使用verilog进行编程时,经常会遇到需要对连续信号进行延时处理的情况,这里记录一下常用的给信号进行延时打拍的手段。
方案一:使用多个寄存器采用时序逻辑依次赋值,如下:
/****************************************************************\
此方案使用了3倍数据位宽的寄存器,实现了延迟2拍输出数据的效果
\****************************************************************/
module aaa(
input clk,
input rst_n,
input [7:0]data_in,
output [7:0]data_out
);
reg [7:0]data_delay_1, data_delay_2, data_delay_3;
always @(posedge clk or negedge rst_n)
if(!rst_n)
begin
data_delay_1 <= 8'h0;
data_delay_2 <= 8'h0;
data_delay_3 <= 8'h0;
end
else
begin
data_delay_1 <= data_in;
data_delay_2 <= data_delay_1;
data_delay_3 <= data_delay_2;
end
assign data_out = data_delay_3;
endmodule
方案优点:延时拍数较少时方便阅读,常见于需要延时一两拍的场景下。
方案缺点:延时拍数较多时阅读性变差。
至于资源占用其实在FPGA综合布线时会被自动优化成移位寄存器形式。
方案二:使用移位寄存器
待补充,先鸽了,总而言之就是使用shift_ram巴拉巴拉巴拉...
3 comments
博主我想问问你的handsome 是怎样设置的这么好看?
设置里改主题色、布局、装美化插件
博主能出一期教程教教嘛?