求助:这样的信号怎么产生呢?
大家好!向大家请教个问题,希望在这能得到大家的帮助!谢谢!我在做设计师遇到这样的一个问题,需要产生这样的信号,如图所示:clk是时钟,a信号是输入,b是输出,我的要求是这样的:a信号低态时要经历2个时钟上升沿,而b要经历一个时钟上升沿,在a经历的第一个时钟上升沿之前输出b和a是一样的,在第一个上升沿后的第一个下降沿后b和a不一样,输出b为1。象图形这样所示。
我的设计代码是这样的:
signal RE1_cnt : integer range 0 to 9;
signal RE2_cnt : integer range 0 to 9;
b_Counter1_Proc: process(MCLK,MR)
begin
if (MR='0') then
RE1_cnt<=0;
elsif rising_edge(MCLK) then
if (a='0') then
RE1_cnt<=RE1_cnt+1;
else
RE1_cnt<=0;
end if;
end if;
end process b_Counter1_Proc;
b_Counter2_Proc: process(MCLK,MR)
begin
if (MR='0') then
RE2_cnt<=0;
elsif falling_edge(MCLK) then
if (RE1_cnt>=1) then
RE2_cnt<=RE2_cnt+1;
else
RE2_cnt<=0;
end if;
end if;
end processb_Counter2_Proc;
b<=a when (RE2_cnt<=0)else'1';
这个代码前仿真没有问题,但后仿真就有问题,不知道怎么回事?
请大家指点一下,怎么修改?怎么设计呢? 看了一下,我想问题可能出在你的RE1_cnt 的定义上,你可以换变量试下<br>
好久没用VHDL了,不知道说得对不 状态机完成 状态机?能讲讲思路吗?我有点不懂 1。可以采用计数器,时钟clk,a做为计数使能信号,为高时不能计数,为低时可以计数,而b只在计数的其中一个值为1;<br>
2。采用状态机,很好用,对这类问题:<br>
a=1,b=1则b=1,保持当前状态;<br>
a=0,b=1则b=0,<br>
a=0,b=0,则b=1;<br>
关键是找到状态转移条件,分析状态之间的关系。 采用状态机就没问题的 我把思路改了,设计修改了,不这样做了。<br>
谢谢大家的帮忙!<br>
非常感谢! MR是作为reset在用吧?不考虑时间的话,逻辑上没有发现什么问题。<br>
我试了下,还没做到。。。郁闷。<br>
建议还是用状态基做了。跑process我碰到麻烦。。。<br>
<br>
[ 本帖最后由 toyibm 于 2007-1-25 14:40 编辑 ] 这种东东,最好还是状态机来做比较方便
页:
[1]