我正在实现一个模块来计算输入向量中的‘1’的数量,并且无法修复推断锁存器错误。
警告(10240):Verilog HDL始终在掩码处构造警告( 15 ):推断锁存器用于变量“/var/www/verilog/work/vlgaaQTZu_dir/top_module.v”,其在通过始终构造文件的一个或多个路径中保持其先前的值:top_module.v行:15警告(10240):Verilog HDL始终构造top_module.v处的警告(15):推断用于变量“top_module.v”的锁存器,在一个或多个通过始终构造文件的路径中保存其前一个值: /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
我没有通过合规考试。
发布于 2019-01-05 14:59:51
添加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
https://stackoverflow.com/questions/54049179
复制相似问题