搜索
bottom↓
回复: 13

请教:延时电路的设计。

[复制链接]

出0入0汤圆

发表于 2010-3-22 22:17:00 | 显示全部楼层 |阅读模式
module test (
                                input clk,
                                output out
                                );
reg [3:0] cnt;
reg out_r;
assign out=out_r;
always @  (posedge clk)
        if(cnt<8)
                begin
                cnt=cnt+1;
                out_r<=0;
                end
        else
                out_r<=1;
endmodule
               

如上,我想设计一个电路,经过9个周期之后电路输出高。
但是他给了我两个警告:1,说我的输入电路没有驱动逻辑器件,2,说我的输出被拉为高了
我一仿真,果然,我的输出电路一直是高。
我想问一下,这段代码到底哪里出了问题?为什么会出现这样不解的情况?
我看了rtl图,好像就是我心理面想的那种情况。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-3-22 22:27:51 | 显示全部楼层
嗯,发现一个很奇怪的现象,
当把if(cnt<8)改成if(cnt!=8)的时候就实现了我的设计。
我不是很明白为什么会出现这种情况。

出0入0汤圆

发表于 2010-3-22 22:34:47 | 显示全部楼层
module test( clk,load);
input clk;
output load;
reg load;
reg[3:0] count;
always@(posedge clk)
  begin
   if(count==8)
   begin
   load<=1;
   count<=0;
   end
   else
   begin
   count<=count+1;
  load<=0;
end
end
endmodule
我刚给你写的不知道是不是想要这种电路。我也是新手才学习一礼拜

出0入0汤圆

发表于 2010-3-22 22:35:33 | 显示全部楼层
你说的出现高,是一直处于高状态吗?

出0入0汤圆

发表于 2010-3-22 22:37:04 | 显示全部楼层
if(cnt<8) cnt小于8了才会起作用,if(cnt!=8)但cnt不等于8时起作用
写成if(cnt<=8)应该也可以正常

出0入0汤圆

发表于 2010-3-22 22:41:05 | 显示全部楼层
module test( clk,load);
input clk;
output load;
reg load;
reg[3:0] count;
initial load=0;
always@(posedge clk)
  begin
   if(count==8)
   begin
   load<=1;
   count<=0;
   end
   else
   begin
   count<=count+1;
end
end
endmodule
  这样就是一支高了
不知道你到底想做那种电路

出0入0汤圆

 楼主| 发表于 2010-3-22 22:42:01 | 显示全部楼层
回复【4楼】285144996
-----------------------------------------------------------------------

嗯,我还是不明白为什么if(cnt<8)不可以,当cnt小于8的时候,就执行if后面的语句就好了,当cnt>=8的时候就执行else后面的语句就好了啊。为什么不行。改成!=8就可以执行。

出0入0汤圆

 楼主| 发表于 2010-3-22 22:44:18 | 显示全部楼层
回复【5楼】yuexinjie
-----------------------------------------------------------------------

呵呵,我是想做个时序的配合,
前面一个模块处理完数据,到输出数据需要9个周期,我想让后面的那个模块在这9个周期之内不接受无效数据,所以就想用这个方法来实现对吼一个模块的使能。这样前面9个周期之后,就源源不断的输出正常数据,后面就不断接受。

出0入0汤圆

发表于 2010-3-22 22:45:10 | 显示全部楼层
应为if(cnt<8)包含了cnt=8的时候也是成立的

出0入0汤圆

发表于 2010-3-22 23:02:23 | 显示全部楼层
cnt没有赋初值,如cnt初值为8、9、10...

出0入0汤圆

发表于 2010-3-22 23:02:41 | 显示全部楼层
if(cnt==8) 猜想有时候会出点意外,cnt从0增到8,cnt有时候是别的数字比如100,会怎样?

出0入0汤圆

发表于 2010-3-23 18:45:48 | 显示全部楼层
我仿真了,没有出现问题啊?我是新手。

出0入0汤圆

发表于 2010-3-29 23:20:37 | 显示全部楼层
cnt的初始值是随机的,不一定是零!

出0入0汤圆

发表于 2010-3-30 00:03:17 | 显示全部楼层
12楼回答的对,因为上电时cnt的初始值是不确定的,它可能>8,这时就不会执行if中的语句了,而且else语句中也没有对cnt的控制,所以程序就会一直执行out_r<=1,使输出一直处在高电平。
如果改成是if(cnt!=8)的话,就能使条件成立而去执行if里的语句,进而达到要求。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 01:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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