quartus 中直接引用的延时模块(Modelsim已验证)
软件:Quartus,Modelsim
语言:Verilog
引言
在设计时序时,我们经常要用到延时模块,即将某个信号进行延迟N个clk处理。在Quarus中有可以直接引用的原语模块,按照格式直接调用即可,方便快捷,可以缩短工程的开发周期。
1、模块调用格式
lpm_shiftreg LPM_SHIFTREG_component (
.clock (clk),
.shiftin (data_in),
.shiftout (data_out )
);
defparam LPM_SHIFTREG_component.lpm_direction = "LEFT";
defparam LPM_SHIFTREG_component.lpm_type = "LPM_SHIFTREG";
defparam LPM_SHIFTREG_component.lpm_width = 9;
如上 输入data_in,输出data_out, 输出比输入延迟了 9-1=8 个clk。延迟clk的个数可以修改LPM_SHIFTREG_component.lpm_width的参数。"LEFT"指的是左移。
注:此模块适用单bit的信号输出,即data_in的位宽为1bit,多bit的话需要拆分成单bit使用此模块,或者重新写一个多bit的延迟模块。
2、仿真验证
写一个简单的testbench ,来验证 如上调用模块的可行性。
lpm_shiftreg LPM_SHIFTREG_component (
.clock (clock),
.shiftin (shiftin),
.shiftout (qqout)
);
defparam LPM_SHIFTREG_component.lpm_direction = "LEFT";
defparam LPM_SHIFTREG_component.lpm_type = "LPM_SHIFTREG";
defparam LPM_SHIFTREG_component.lpm_width = 9;
initial begin
#0 clock = 1;shiftin = 0;
#1000 shiftin = 1;
#2000 shiftin = 0;
#1000
$stop ;
end
仿真接口波形如下:
可以看到两个箭头之间的延迟是8个clock;
即:输出比输出延迟8个clk。
欢迎 评论、留言、交流指正。