2015-10-16 78 views
0

有人可以向我解釋我做錯了什麼。我不知道我是否不理解這個概念或什麼。我已經看了兩個可靠的例子,這兩個例子都提供了完整的代碼,但也許我錯誤地接錯了什麼。四位加法器瞭解

1st - 我創建了一個名爲Adder的文件,下面是我的代碼。這工作完全正常,我已經創建/運行了一個測試平臺文件,所以我知道這確實是什麼意圖。但是,我是否應該將FullAdder文件或FullAdder文件的測試平臺連接到Adder文件?這些完全獨立的文件,並且從未連接過?

module Adder (a,b,ci,co,s); 
    input a,b,ci; 
    output co,s; 
    assign s=a^b^ci; 
    assign co=(a&b)|(a&ci)|(b&ci); 
endmodule 

2nd - 下面是我對FullAdder文件的代碼。我不確定這是否正確,但讓我知道我可以在哪裏做出可能的更改。我假設我創建的測試平臺將與此FullAdder文件相鏈接?這個文件的語法檢查了好了,所以也許這是試驗檯,是造成問題,對我來說...

module FullAdder(a,b,ci,s); 
    input [3:0] a,b; 
    input ci; 
    output [3:0] s; 
    wire [2:0] co; // Is the wire correct here? I created this off something I saw. 

    Adder ADD1(a[0],b[0],ci,s[0],co[0]); 
    Adder ADD2(a[1],b[1],co[0],s[1],co[1]); 
    Adder ADD3(a[2],b[2],co[1],s[2],co[2]); 
    Adder ADD4(a[3],b[3],co[2],s[3],s[4]); 
endmodule 

3 - 我不明白的試驗檯和接線一切都在一起。我看過這兩個鏈接,這兩個鏈接有兩種不同的方式。 Link 1Link 2。我試圖複製鏈接2,但似乎無法讓它工作。幫幫我?

+0

'S [4]'超出範圍。或者展開's'或者以不同的方式管理最後的進行。 – Greg

+0

好吧,我明白了。而不是s [4]會不會認爲我應該在最後再做一些類似co [2]的事情? –

回答

0
Adder ADD4(a[3],b[3],carry[2],s[3],s[4]); 

此實例假設S是在4位的元素的向量,但你的S的定義是[3:0]所以4是不是一個有效位置。將其更改爲

output [4:0] s; 

它可以使用Verilog 2001模塊定義樣式(類似於ANSI C)。你的模塊會是這樣:

module FullAdder (
    input wire [3:0] a, 
    input wire [3:0] b, 
    input wire ci, 
    output wire [4:0] s 
    ); 

    wire [2:0] co; 

    Adder ADD1(a[0],b[0],ci,s[0],co[0]); 
    Adder ADD2(a[1],b[1],co[0],s[1],co[1]); 
    Adder ADD3(a[2],b[2],co[1],s[2],co[2]); 
    Adder ADD4(a[3],b[3],co[2],s[3],s[4]); 
endmodule 

關於你提到的試驗檯(鏈接2)你拼寫錯誤一些名字:1位地址的名字叫做「加法」,而不是「加法」。更改定義或實例名稱。端口的名稱是a,b,cin和s,而不是p,q,ci和r。最後這些是您將連接到端口的信號(電線)。

由於這個加法器有一組有限的輸入,我建議做一個詳盡的測試平臺。因此,不要試探a,b和cin的兩個樣本值,嘗試所有的可能性,並檢查結果是否是預期的結果。是這樣的:

// Code your testbench here 
module test_bench; 

    // Inputs 
    reg [3:0] p; 
    reg [3:0] q; 
    reg ci; 

    // Outputs 
    wire [4:0] r; 

    // Instantiate the Unit Under Test (UUT) 
    FullAdder uut (
     .a(p), 
     .b(q), 
     .ci(ci), 
     .s(r) 
    ); 

    initial begin 
     ci = 1'b0; 
     repeat (2) begin 
     p = 4'b0000; 
     repeat (16) begin 
      q = 4'b0000; 
      repeat (16) begin 
      #10; 
      $display ("%b + %b + %b = %b", p, q, ci, r);    
      if (r != (p+q+ci)) begin 
       $display ("ERROR!. Expected %b", p+q+ci); 
       $finish; 
      end 
      #10; 
      q = q + 1; 
      end 
      #10; 
      p = p + 1; 
     end 
     #10; 
     ci = !ci; 
     end 
     $display ("EVERYTHING OK!"); 
     $finish; 
    end 
endmodule 

http://www.edaplayground.com/x/HR5參見

+0

好吧,我會試試這個。首先,「Link2」只是我發現的一個,那不是我的代碼。我試圖複製它。其次,您提供的鏈接,模塊加法器和模塊FullAdder是兩個單獨的文件是否正確?他們沒有合併成一個大文件,如鏈接所示?所以基本上你有3個文件,一個叫Adder,一個叫FullAdder,另一個叫TestBench? –

+0

我有三個模塊。其中兩個在一個文件中,並且測試臺在一個單獨的文件中。如果需要,可以將三個模塊放在同一個文件中,或者每個模塊一個文件 –