2015-01-25 5 views
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 :

enter image description here

+0

문제는 와이어 반송로 하였다 [2 : 0] 대신 와이어 [2 : 0] [2 : 0] – OHHH

+0

'와이어 반송 운반 '와이어'대 [2 : 0] carry'은 할 수 없습니다 이 상황의 차이. 'wire [2 : 0] carry '는'carry'가 packed array (벡터라고도 함)임을 의미하며, 개별적으로 또는 슬라이스로 모든 비트를 함께 액세스 할 수 있습니다. 'wire carry [2 : 0]'은 단일 비트의 압축되지 않은 배열입니다. 즉, 인덱스를 액세스 할 수는 있지만 어레이를 전체 또는 슬라이스로 액세스 할 수는 없습니다. – Greg

답변

1

SW[3:0]SW[7:4]B에 매핑 A입니다 가정. 그런 다음 문제는 F1 인스턴스에 있습니다. SW[3]SW[4]이어야합니다.

full_adder F1(SW[ 4 /*not 3*/ ], SW[1], carry[0], LEDG[1], carry[1]);