2016-07-27 66 views
0

作爲我在Verilog中的第一個程序,我寫了一個4位比較器,由單個1位的比較器組成。我無法弄清楚爲什麼當Eo = 1,Lo = 1時。我一直在用modelsim寫這個,而且對於調試工具來說是新的。Verilog 4位比較器=無法正常工作

我寫的代碼是基於邏輯圖上http://www.onsemi.com/pub_link/Collateral/MC14585B-D.PDF

// 1 Bit comparator 
module comparator_1(A, B, L, E, G); 
    input A, B; // 2 bits to be compared 
    output L, E, G; // 3 possible outputs 
    wire s1, s2; // connecting wires for inverters 

    not X1 (s1, A); // create inverter 
    not X2 (s2, B); 
    nand X3 (L, s1, B); 
    nand X4 (G, s2, A); 
    nand X5 (E, L, G); 


endmodule 


//4 bit comparator 
module comparator_4(Lo, Eo, Go, A, B, Li, Ei, Gi); 
    input [3:0] A; input [3:0] B; //4 bit inputs 
    input Li, Gi, Ei;  //A<B, A=B, A>B inputs 
    output Lo, Go, Eo;  //A<B, A=B, A>B outputs from chip 
    wire [3:0]L; wire [3:0]E; wire [3:0]G; //A<B, A=B, A>B outputs from individual comparators 
    wire s0, s1, s2, s3, s4, s5, s6, s7, s8; 

    // Set up individual 1 bit converters 
    comparator_1 comp0(A[0], B[0], L[0], E[0], G[0]); 
    comparator_1 comp1(A[1], B[1], L[1], E[1], G[1]); 
    comparator_1 comp2(A[2], B[2], L[2], E[2], G[2]); 
    comparator_1 comp3(A[3], B[3], L[3], E[3], G[3]); 

    // Gate logic from schematic 

    or X1(s3, E[3], L[2]); 
    or X2(s2, E[3], E[2], L[1]); 
    or X3(s1, E[3], E[2], E[1], L[0]); 
    or X4(s0, E[3], E[2], E[1], E[0], Li); 
    nor X5(s4, E[3], E[2], E[1], E[0], Ei); 
    nand X6(s5, L[3], s0, s1, s2, s3); 
    nor X7(Go, s5, s4); 


    assign Eo = s4; 
    assign Lo = s5; 

endmodule 

感謝

+0

示意圖示出所有的ORS饋送到與非門,和所有的與非門送入一個也不,這是我的。對不起,可怕的命名約定。 –

+0

是的,你是對的,我誤解了它 – samgak

+0

在原理圖中有幾個nots似乎沒有在代碼中。例如李和Ei在一開始就沒有經歷過。所有的產出都沒有結束。你是否以某種方式優化了它? – samgak

回答

0

基於真值表,我會描述你的御條件爲

AND(s4,E[3], E[2], E[1], E[0], Ei); 
assign E0 = s4; 

在我的頭腦中,我確信爲什麼那個真值表將A < B == 1和A = B == 1的可能輸出分配給級聯輸入。這說明它既小於也相等。僞裝邏輯恕我直言,但也許有用途,我不知道。但是,上述對於Eo的聲明將在兩種情況下都包含你,在這兩種情況下,所有等於聲明並且級聯輸入也被聲明。

我可以問你是否試圖在更高的水平寫這個?我對所有的NOR和OR都感到困惑。

module comparator_4(Lo, Eo, Go, A, B, Li, Ei, Gi); 
    input [3:0] A; input [3:0] B; //4 bit inputs 
    input Li, Gi, Ei;  //A<B, A=B, A>B inputs 
    output Lo, Go, Eo;  //A<B, A=B, A>B outputs from chip 
    begin 
    Eo = A==B & Ei; 
    Lo = A<B & Li; 
    Go = (A>B & Gi) || (A==B & ~Li & ~Ei); // Last term covers weird case 
    end 
end module 

我沒有時間檢查出來,但我認爲這可以做這項工作。

0

所以,我解決了這個問題。數據表表示輸入端E門應該是默認的高,並且我切換

or X4(s0, E[3], E[2], E[1], E[0], Li); 
nor X5(s4, E[3], E[2], E[1], E[0], Ei); 

or X4(s0, E[3], E[2], E[1], E[0], ~Li); 
nor X5(s4, E[3], E[2], E[1], E[0], ~Ei);