2016-11-01 229 views
0

我試圖編寫一個代碼來檢查Verilog中的奇偶校驗。Verilog中的奇偶校驗器

`timescale 1ns/1ps 

module ParityChecker(
input [7:0] bitt, 
output reg ans 
); 

integer count = 0; 
integer i = 0; 

initial 
begin 
    count = 0; 
    for(i=0; i<=7; i=i+1) 
    begin 
     if(bitt[i]==1) 
     count = count + 1; 
    end 
    if(count%2==0) //even parity 
    ans = 1; 
    else 
    ans = 0; 

end 

endmodule 

下面是測試平臺代碼:

module ParityChecker_tb; 

reg [7:0] bitToSend; 
wire answer; 

SecondQuestion mygate(.bitt(bitToSend), .ans(answer)); 

initial 
begin 
$monitor(bitToSend, answer); 

bitToSend = 8'b11111101; 
#10 
bitToSend = 8'b11111100; 
#10 
bitToSend = 8'b1111111; 

end 
endmodule 

不過,我只得到一個作爲變量answer輸出,不管是什麼。邏輯部分似乎存在一些問題。可能是什麼?

+0

你已經把所有的代碼到'initial'塊。在某個地方應該有一個「永遠」的區塊......你應該得到一本好的Verilog書籍,並提高你對概念的理解。 –

回答

1

因爲在module ParityChecker中,您使用initial來實現您的邏輯,該邏輯僅執行一次。

您可以實現它作爲[email protected]塊,像

[email protected](bitt) 
begin 
    // All your logic... 
    // Or even simpler, 
    ans = ~^bitt; 
end 

Simplist辦法是

module ParityChecker(
input [7:0] bitt, 
output ans 
); 
    assign ans = ~^bitt; 
endmodule 
+0

感謝您指出...什麼是分配ans =〜^ bitt;順便問一下?這個異或門的第一個操作數是什麼? – archity

+0

@archity這是一個減少XNOR門,將操作數的所有位XNOR在一起。 – timrau