VerilogHDL那些事-整合篇学习笔记
1、源码的整合——定时器整合于操作步骤
好处是:操作更加方便。
1 case( i ) 2 3 0: 4 if( C1 == 10 - 1 ) begin C1 <= 5'd0; i <= i + 1'b1; end 5 else begin rQ <= 1'b1; C1 <= C1 + 1'b1; end 6 7 1: 8 if( C1 == 10 - 1 ) begin C1 <= 5'd0; i <= i + 1'b1; end 9 else begin rQ <= 1'b0; C1 <= C1 + 1'b1; end 10 11 2: 12 if( C1 == 10 - 1 ) begin C1 <= 5'd0; i <= i + 1'b1; end 13 else begin rQ <= 1'b1; C1 <= C1 + 1'b1; end 14 15 3: 16 if( C1 == 10 -1 ) begin C1 <= 5'd0; i <= i + 1'b1; end 17 else begin rQ <= 1'b0; C1 <= C1 + 1'b1; end 18 19 endcase
2、源码整合——显性指向时钟,清楚每一步骤消耗的时钟
3、循环保留和循环操作
循环保留:将多次的循环展开成多个步骤;保留循环:Verilog语言实现循环语句,如for循环。
4、模块之间的调用延迟
由于存储器存在D触发器,造成输入和输出之间存在延迟的问题,解决方法有两个:
1)加入旁路寄存器
在输出端加入寄存器,使得输出延迟,加入一个寄存器,延迟一个时钟,其缺点是:如果延迟时钟较多,那么需要的旁路寄存器也就多了;
2)使用循环操作同步数据
5、采用两级缓存(2个移位寄存器)解决亚稳态问题
当FPGA采集外部信号时,容易出现亚稳态这种现象。
6、计数器的程序
1 always @ ( posedge CLK or negedge RSTn ) 2 if( !RSTn ) 3 C1 <= 4'd0; 4 else if( C1 == 4 ) 5 C1 <= 4'd1; 6 else 7 C1 <= C1 + 1'b1;
第5行 C1 <= 4'd1;即每一次计数从1开始,计满4结束,也就是每一个过程占了4个时钟。

浙公网安备 33010602011771号