CPLD语言:想用一个模块实现延迟功能,并且能够在仿真中看出
想用一个模块实现延迟功能,并且能够在仿真中看出,所以写了下面的代码module yanchi1(i1,i2);
input i1;
output i2;
reg i2;
integer i;
initial
begin
i2=1;
i=0;
end
always @(posedge i1)
begin
for(i=0;i<1000;i=i+1);
i2=0;
end
endmodule
其中 i 就是用来实现延迟功能的,希望利用for语句执行的时间来实现延迟功能,但是在仿真中i2一直等于零,根本就没有改变过,而如果在initial语句中是i2=0,在always语句中是i2=1的话,i2会改变,但是却无法实现延时功能。向各位大大求助了,小弟现在钱太少,所以悬赏价格比较低,见笑。 典型的C语言的思维模式,采用内部累加器的运算时间达到某一粗略延时的目的。问题在:你的仿真器采用的time slice是极小的,导致你在波形上没有看到1000个累加操作的延时效果。<br>
解决:如果不考虑电路的可综合性,何不直接赋值:<br>
`timescale 1ns/1ns<br>
......<br>
initial<br>
begin<br>
i2 = 0 ;<br>
#20 i2 = 1 ;<br>
#30 i1 = 0 ;(#后的时间就是你的期望延时,单位ns)<br>
.......<br>
end<br>
......<br>
或者<br>
always@(posedge i1)<br>
#1000<br>
i2 = 0;<br>
.......<br>
如果要求实际电路,有两种办法:采用dff的方式进行粗略的延时,精细部分采用组合电路(一串反相器),通过设置延时的时序约束(max output delay/min output delay);或者,直接采用大延时单元,一般的FPGA/Foundry库有手册说明。<br>
我猜想你需要的应该是不可综合的行为级描述,直接延时赋值。
页:
[1]