FPGA 关于 Only one always block can assign a given variable write_rdy

来源:互联网 发布:雪之下雪乃手办淘宝 编辑:程序博客网 时间:2024/06/04 06:49

编译FPGA 代码出现 Only one always block can assign a given variable write_rdy
错误。
原因是在连个alway中和命令中对reg 变量write_rdy进行了幅值操作。这样是不允许的。
错误代码如下:


always @ (posedge clk or negedge rst_n) 
begin 
if(!rst_n)
 begin
                        delay_500us=0;
                  write_rdy=0;
delay_init=0;
sys_addr_r=20'hFFF80;
writecnt=21'hFFF80;
write_per=0;
sdram_wr_req2=0;
sdram_wr_req1=0;
read_per=0;
 end
else
 begin
if(delay_500us < 16'd21_000)
 begin
     delay_500us<=delay_500us+1;
       end
       delay_init<=(delay_500us==16'd21_000); 
     end
end


always @ (posedge clk or negedge rst_n) 
if(!rst_n)
begin
    sys_addr_r=20'hFFF80;
endwrite=0;
end
else
           begin
    if(endwrite==0&delay_init&write_per==0)
      begin
      
        if(writecnt==21'h100000)
          begin
            sys_addr_r<=20'h0;
            endwrite<=1;
          end
          else
          begin
            write_per<=1;
            write_rdy<=0; 
            sys_addr_r<=sys_addr_r+8;
            writecnt<=writecnt+8;
          end
       end
            if(write_per==1&endwrite==0)
        write_rdy<=1;
 end 
write_rdy 变量出现在两个always语句中虽然第一个always语句中也只是对其上电复位赋值。
将其上电初始化移到第二个语句中编译通过。

注 在仿真时 不会出现上述错误的。呵呵估计仿真没有考虑到硬件综合的问题所以不会爆出这个问题吧!

原创粉丝点击