이것은 Verilog HDL에서 처음 프로그래밍 한 것이며 코드에 무엇이 문제가 있는지 파악하는 데 어려움이 있습니다. 행동 코드에서 간단한 ALU를 디자인해야합니다.ALL 용 Verilog HDL behavioral coding 호출 모듈
지금까지는 감산기와 덧셈기 모듈을 만들었습니다. (모듈을 더 추가해야하지만 다른 모듈을 추가하기 전에 ALU 모듈에서이 모듈을 사용하고 싶습니다.)
나는 같은 프로젝트 (?이 행동입니다 확신) 별도의 .V 파일에 다음과 같은 모듈이 있습니다
module adder3bit(sum, co, a, b);
parameter n = 2;
output reg [n:0] sum;
output reg co;
input [n:0] a;
input [n:0] b;
always @(a, b)
{co, sum} = a + b;
endmodule
module subtract3bit(diff, bo, a, b);
parameter n = 2;
output reg [n:0] diff;
output reg bo;
input [n:0] a;
input [n:0] b;
always @(a, b)
{bo, diff} = a - b;
endmodule
나는이 테스트를하고 작업하는 것을 알 수있다.
module alu(out, overflow, a, b,sel);
input [2:0] a, b;
input sel;
output [2:0] out;
output overflow;
always @(a,b,sel)
begin
if(sel=='b0)
adder3bit A1(out,overflow,a,b);
if(sel=='b1)
subtract3bit S1(out, overflow, a, b);
end
endmodule
내 구문이 잘못 될 수 있지만 오류를 보여주는 :
는 지금은 주요 ALU 모듈을 호출하는 것을 시도하고있다. 나는 Verilog에 익숙하지 않다. 나는 처음에 C를 배우면서 느낀 기분을 느낀다.모듈을 올바르게 호출하고 있지만 if 문과 관련이 있다고 생각합니다.
고맙습니다. 새로운 것을 배우기를 바랍니다.
'n'과 'N'을 사용하면 같은 매개 변수를 식별 할 수 있습니다. 둘 중 하나를 선택하십시오. 업계 및 여러 프로그래밍 언어의 일반적인 관행이므로 매개 변수를 식별하려면 대문자를 사용하는 것이 좋습니다 – Greg
물론 맞습니다, 감사합니다! –
도움 주셔서 감사합니다. 따라서 모듈을 미리 초기화해야합니다. 이것은 always 블록에있는 모듈의 출력을 읽을 때마다 a와 b에 따라 새로운 입력을 읽는 것을 의미합니다. 또한 두 개의 와이어 인 sum과 diff를 선언하는 대신 단일 출력 와이어를 사용할 수 있습니까? – Darklink9110