verilog中的奇偶校验

时间:2016-11-01 17:13:36

标签: verilog hdl

我试图编写代码以检查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

但是,无论如何,我只能得到一个作为变量答案的输出。逻辑部分似乎存在一些问题。可能是什么?

2 个答案:

答案 0 :(得分:1)

因为在module ParityChecker中您使用initial来实现您的逻辑,该逻辑仅执行一次。

您可以将其实现为always@块,例如

always@(bitt)
begin
    // All your logic...
    // Or even simpler,
    ans = ~^bitt;
end

Simplist方式将是

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

答案 1 :(得分:-1)

兄弟,一切都是正确的。但是在测试平台模块中,您编写了 SecondQuestion 而不是 ParityChecker。