0
두 개의 4 비트 숫자를 추가하는 코드가 있습니다. 불행하게도Verilog로 두 개의 4 비트 정수를 추가하는 코드가 작동하지 않습니다. 뭐가 잘못 되었 니?
module part2(SW, LEDG, LEDR);
input [17:0] SW;
output [17:0] LEDR;
output [4:0] LEDG;
//Red lights for each one
assign LEDR[17:0] = SW[17:0];
//Wires between adders.
wire carry[2:0];
//Add the first digits of A and B
full_adder F0(SW[4], SW[0], SW[8], LEDG[0], carry[0]);
//Add the second digits of A and B
full_adder F1(SW[3], SW[1], carry[0], LEDG[1], carry[1]);
//Add the third digits of A and B
full_adder F2(SW[6], SW[2], carry[1], LEDG[2], carry[2]);
//Add the last digits of A and B
full_adder F3(SW[7], SW[3], carry[2], LEDG[3], LEDG[4]);
endmodule
module full_adder(A, B, CI, S, CO);
input A, B, CI;
output S, CO;
//Sum
assign S = A^B^CI;
//Carry out
assign CO = (A & B) | (CI & A) | (CI & B);
endmodule
대부분의 경우 작동하지만, 1, 10 또는 10에 무슨 보는 것 같다 ... 공식 정말 간단하고 나는이 문제를 찾을 수없는 경우에도 모든 경우에 작동하지 않습니다 10 :
문제는 와이어 반송로 하였다 [2 : 0] 대신 와이어 [2 : 0] [2 : 0] – OHHH
'와이어 반송 운반 '와이어'대 [2 : 0] carry'은 할 수 없습니다 이 상황의 차이. 'wire [2 : 0] carry '는'carry'가 packed array (벡터라고도 함)임을 의미하며, 개별적으로 또는 슬라이스로 모든 비트를 함께 액세스 할 수 있습니다. 'wire carry [2 : 0]'은 단일 비트의 압축되지 않은 배열입니다. 즉, 인덱스를 액세스 할 수는 있지만 어레이를 전체 또는 슬라이스로 액세스 할 수는 없습니다. – Greg