verilog中到底应不应该用for循环呢?我听我们老师说不让用for循环,要用计数器展开,但是我看的很多xilinx官方demo中for循环使用还是很频繁啊,像下面图片中alway块中,复位后竟然可以将存储器全部复位为0,i得变化不是根据时钟走吗?如果不是,那是根据什么变化?
知乎网友提问
先说结论,可以用,但是分时候,不会用的时候别乱用。
你老师说的计数器xx,可能是让你写计数器的时候别用for循环,软硬件编程思维的不同。写一个计数器表示一段延时,软件编程的思维肯定的是用for循环,软件的执行是顺序执行,也就是一直处于这个循环中,直到不满足循环计数条件而跳出循环。
而硬件中的计数器实现直接就是一组D触发器,根据计数器的使能,加上在时钟边沿触发变化,再加上一个清零端(还可以加置位端)。软件和硬件这两个可以说,完全不是一个东西。
always @(posedge clk or negedge rst_n)begin if(!rst_n) cnt <= 3'd0; else if(cnt_clear) cnt <= 3'd0; else if(cnt_en) cnt <= cnt + 1'd1;end
如果我想实现软件思维的delay一段时间怎么做,直接用上面的计数器做一个fla