我正在实现一个模块,以对输入向量中的'1'进行计数,并且无法修复推断锁存器错误。
警告(10240):Verilog HDL始终在top_module.v(15)处构造警告:推断变量“ count”的锁存器,该变量在始终构造文件的一个或多个路径中保留其先前值:/ var /www/verilog/work/vlgaaQTZu_dir/top_module.v行:15 警告(10240):Verilog HDL始终在top_module.v(15)处构造警告:推断变量“掩码”的锁存器,该变量在始终构造文件的一个或多个路径中保留其先前值:/ var / www / verilog / work / vlgaaQTZu_dir / top_module.v行:15
我试图在if语句后的for循环中添加一个else表达式,并且还添加一个初始语句来初始化count和mask的值。
module top_module(
input [254:0] in,
output [7:0] out );
wire [7:0]count;
wire [254:0]mask;
initial begin
count = 8'h0;
mask = 255'h1;
end
always @(*)
begin
for(int i = 0; i < 255; i = i + 1)
begin
if(in & mask)
begin
count = count + 1;
mask = mask << 1;
end
else
begin
count = count;
mask = mask;
end
end
out = count;
end
endmodule
我没有通过合规。
答案 0 :(得分:0)
添加initial
语句仅在时间0初始化一次变量。每次输入Always块时都需要进行初始化,因此您永远都不会引用以前的值。
always @(*)
begin
count = 8'h0;
mask = 255'h1;
for(int i = 0; i < 255; i = i + 1)
begin
if(in & mask)
begin
count = count + 1;
mask = mask << 1;
end
end
out = count;
end