请教:延时电路的设计。
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图,好像就是我心理面想的那种情况。 嗯,发现一个很奇怪的现象,
当把if(cnt<8)改成if(cnt!=8)的时候就实现了我的设计。
我不是很明白为什么会出现这种情况。 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
我刚给你写的不知道是不是想要这种电路。我也是新手才学习一礼拜 你说的出现高,是一直处于高状态吗? if(cnt<8) cnt小于8了才会起作用,if(cnt!=8)但cnt不等于8时起作用
写成if(cnt<=8)应该也可以正常 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
这样就是一支高了
不知道你到底想做那种电路 回复【4楼】285144996
-----------------------------------------------------------------------
嗯,我还是不明白为什么if(cnt<8)不可以,当cnt小于8的时候,就执行if后面的语句就好了,当cnt>=8的时候就执行else后面的语句就好了啊。为什么不行。改成!=8就可以执行。 回复【5楼】yuexinjie
-----------------------------------------------------------------------
呵呵,我是想做个时序的配合,
前面一个模块处理完数据,到输出数据需要9个周期,我想让后面的那个模块在这9个周期之内不接受无效数据,所以就想用这个方法来实现对吼一个模块的使能。这样前面9个周期之后,就源源不断的输出正常数据,后面就不断接受。 应为if(cnt<8)包含了cnt=8的时候也是成立的 cnt没有赋初值,如cnt初值为8、9、10... if(cnt==8) 猜想有时候会出点意外,cnt从0增到8,cnt有时候是别的数字比如100,会怎样? 我仿真了,没有出现问题啊?我是新手。 cnt的初始值是随机的,不一定是零! 12楼回答的对,因为上电时cnt的初始值是不确定的,它可能>8,这时就不会执行if中的语句了,而且else语句中也没有对cnt的控制,所以程序就会一直执行out_r<=1,使输出一直处在高电平。
如果改成是if(cnt!=8)的话,就能使条件成立而去执行if里的语句,进而达到要求。
页:
[1]