使用verilog寫3輸入變數四位元漣波進位全加器

請問如何使用verilog寫3輸入變數四位元漣波進位全加器?

我的程式裡輸入端有A, B, C_in

主要是由A,B相加

我想再加入一個變數Y和A,B,能相加

請問我該如何修改?

下面網址是我的檔案

http://qoh0807.acgaa.com/ADD.rar

Update:

請問HIB兄

我依照你修改module stimulus的地方

答案卻不正確

請問是我的程式有哪裡沒改好嗎?

附上檔案

HTTP://qoh0807.acgaa.com/FULLADD2.V

Update 2:

HIB如有看到希望能到

http://tw.knowledge.yahoo.com/question/question?qi...

看看

不知閣下對這種情形有何看法?

2 Answers

Rating
  • Bing
    Lv 4
    1 decade ago
    Favorite Answer

    我修改您的,

    module stimulus;

    // Set up variables

    reg [3:0] A, B, Y;

    reg C_IN;

    wire [3:0] SUM, SUM1;

    wire C_OUT, C1_OUT, C2_OUT, C3_OUT;

    // Instantiate the 4-bit full adder. call it FA1_4

    fulladd4 FA1_4(SUM, C_OUT, A, B, C_IN);

    fulladd4 FA2_4(SUM1, C1_OUT, SUM, Y, 1'b0);

    fulladd FA3_1(C2_OUT, C3_OUT, C1_OUT, C_OUT, 1'b0);

    所以所得的結果為 {C3_OUT, C2_OUT, SUM1} ,共有五個位元。基本上,就是先將A+B 的結果再加上Y,然後再將這兩個加法器的carry 相加即可。

    2007-12-04 23:23:00 補充:

    我附上我的測試block 給您參考一下。

    不好意思,因為字數的關係,我分為兩個。

    integer i,j,k,l;

    initial

    begin

    for(i=0;i<2;i=i+1) begin

    C_IN = i;

    for(j=0;j<16;j=j+1)

    for(k=0;k<16;k=k+1)

    for(l=0;l<16;l=l+1) begin

    A = j;

    B = k;

    Y = l;

    2007-12-04 23:23:26 補充:

    #50;

    if({C3_OUT, C2_OUT, SUM1} !== A+B+Y+C_IN) begin

    $display("Error !! at A=%d, B=%d, Y=%d", A,B,Y);

    #100;

    $finish;

    end

    end

    end

    $display("Test OK!!");

    $finish;

    end

    2007-12-04 23:28:11 補充:

    因為你已經用三個四位元的變數了,所以你不可以monitor原來的sum,而是新的sum1,再加上兩個位元(C3_OUT, C2_OUT),即為您要的和。

    Source(s): 自己
  • 1 decade ago

    請問是SUM = A+B+Y?

    你可以把看成SUM = (A+B) + Y。

    如果不行,那就用推布林代數囉^^~

Still have questions? Get your answers by asking now.