verilog 中的奇偶校验器仅计算一次结果

问题描述 投票:0回答:1

我正在尝试编写代码来检查 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;

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

initial
begin
$monitor(bitToSend, answer);

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

end
endmodule

但是,无论如何,我只得到一个作为变量答案的输出。逻辑部分好像有点问题。可能是什么?

verilog hdl
1个回答
4
投票

因为在

module ParityChecker
中你使用了
initial
来实现你的逻辑,该逻辑只执行一次。

您可以将其实现为

always@
块,例如

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

最简单的方法是:

module ParityChecker(
input [7:0] bitt,
output ans
);
    assign ans = ~^bitt;
endmodule
© www.soinside.com 2019 - 2024. All rights reserved.