我在使用verilog实施时遇到了一个彻底的灾难,但是这个问题在一个小时左右让我感到紧张,我无法修复它!
这是我的代码
genvar i;
assign eq=1;
assign gr=0;
generate for(i=7 ; i>=0 ; i=i-1)
initial begin
if(eq&&~gr)
if (a[i]&~b[i])
initial begin
assign gr=1;
assign eq=0;
end
else if (~a[i]|b[i])
initial begin
assign gr=0;
assign eq=0;
end
end
endgenerate
这个想法是创建一些if语句,所以如果gr为0且eq为1,我可以比较[i]和b [i]。 算法无法改变因为它是一个任务,我必须以这种方式工作,但我真的很想找到问题所在(verilog的错误描述根本没有帮助)
答案 0 :(得分:0)
generate
块用于在编译/精化时复制硬件initial
块仅在时间0运行一个。对a
和b
的更改将不起作用。嵌套initial
块是非法的。assign
块中使用initial
语句(这是合法的,但非常不鼓励,并考虑折旧)。通常,非三态assign
到网络应该只进行一次。always
块最好的猜测,这是你想要的功能:
integer i;
reg eq,gr;
always @* begin
for (i=7 ; i>=0 ; i=i-1) begin
if (eq&&~gr) begin
if (a[i]&~b[i]) begin
gr=1;
eq=0;
end
else if (~a[i]|b[i]) begin
gr=0;
end
end
eq=0;
end
end