yvhksovo 发表于 2010-3-22 22:17:00

请教:延时电路的设计。

module test (
                                input clk,
                                output out
                                );
reg 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图,好像就是我心理面想的那种情况。

yvhksovo 发表于 2010-3-22 22:27:51

嗯,发现一个很奇怪的现象,
当把if(cnt<8)改成if(cnt!=8)的时候就实现了我的设计。
我不是很明白为什么会出现这种情况。

yuexinjie 发表于 2010-3-22 22:34:47

module test( clk,load);
input clk;
output load;
reg load;
reg count;
always@(posedge clk)
begin
   if(count==8)
   begin
   load<=1;
   count<=0;
   end
   else
   begin
   count<=count+1;
load<=0;
end
end
endmodule
我刚给你写的不知道是不是想要这种电路。我也是新手才学习一礼拜

yuexinjie 发表于 2010-3-22 22:35:33

你说的出现高,是一直处于高状态吗?

285144996 发表于 2010-3-22 22:37:04

if(cnt<8) cnt小于8了才会起作用,if(cnt!=8)但cnt不等于8时起作用
写成if(cnt<=8)应该也可以正常

yuexinjie 发表于 2010-3-22 22:41:05

module test( clk,load);
input clk;
output load;
reg load;
reg 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
这样就是一支高了
不知道你到底想做那种电路

yvhksovo 发表于 2010-3-22 22:42:01

回复【4楼】285144996
-----------------------------------------------------------------------

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

yvhksovo 发表于 2010-3-22 22:44:18

回复【5楼】yuexinjie
-----------------------------------------------------------------------

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

285144996 发表于 2010-3-22 22:45:10

应为if(cnt<8)包含了cnt=8的时候也是成立的

wang110 发表于 2010-3-22 23:02:23

cnt没有赋初值,如cnt初值为8、9、10...

285144996 发表于 2010-3-22 23:02:41

if(cnt==8) 猜想有时候会出点意外,cnt从0增到8,cnt有时候是别的数字比如100,会怎样?

yuexinjie 发表于 2010-3-23 18:45:48

我仿真了,没有出现问题啊?我是新手。

myfriend6042 发表于 2010-3-29 23:20:37

cnt的初始值是随机的,不一定是零!

asus119 发表于 2010-3-30 00:03:17

12楼回答的对,因为上电时cnt的初始值是不确定的,它可能>8,这时就不会执行if中的语句了,而且else语句中也没有对cnt的控制,所以程序就会一直执行out_r<=1,使输出一直处在高电平。
如果改成是if(cnt!=8)的话,就能使条件成立而去执行if里的语句,进而达到要求。
页: [1]
查看完整版本: 请教:延时电路的设计。