集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2421|回复: 1

CPLD语言:想用一个模块实现延迟功能,并且能够在仿真中看出

[复制链接]
inter 发表于 2010-6-26 01:05:32 | 显示全部楼层 |阅读模式
想用一个模块实现延迟功能,并且能够在仿真中看出,所以写了下面的代码
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会改变,但是却无法实现延时功能。向各位大大求助了,小弟现在钱太少,所以悬赏价格比较低,见笑。
UFP 发表于 2010-6-26 01:49:51 | 显示全部楼层
典型的C语言的思维模式,采用内部累加器的运算时间达到某一粗略延时的目的。问题在:你的仿真器采用的time slice是极小的,导致你在波形上没有看到1000个累加操作的延时效果。<br>
解决:如果不考虑电路的可综合性,何不直接赋值:<br>
`timescale 1ns/1ns<br>
......<br>
initial<br>
&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;i2 = 0 ;<br>
&nbsp; &nbsp; #20 i2 = 1 ;<br>
&nbsp; &nbsp; #30 i1 = 0 ;(#后的时间就是你的期望延时,单位ns)<br>
&nbsp; &nbsp; .......<br>
&nbsp;&nbsp;end<br>
......<br>
或者<br>
always@(posedge i1)<br>
&nbsp;&nbsp;#1000<br>
&nbsp; &nbsp;i2 = 0;<br>
.......<br>
如果要求实际电路,有两种办法:采用dff的方式进行粗略的延时,精细部分采用组合电路(一串反相器),通过设置延时的时序约束(max output delay/min output delay);或者,直接采用大延时单元,一般的FPGA/Foundry库有手册说明。<br>
我猜想你需要的应该是不可综合的行为级描述,直接延时赋值。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-23 23:23 , Processed in 0.057290 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表