我正在尝试编写代码来检查 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
但是,无论如何,我只得到一个作为变量答案的输出。逻辑部分好像有点问题。可能是什么?
因为在
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