usd 发表于 2010-6-27 23:28:09

求助:这样的信号怎么产生呢?

大家好!向大家请教个问题,希望在这能得到大家的帮助!谢谢!
我在做设计师遇到这样的一个问题,需要产生这样的信号,如图所示: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';

这个代码前仿真没有问题,但后仿真就有问题,不知道怎么回事?
请大家指点一下,怎么修改?怎么设计呢?

UFO 发表于 2010-6-28 00:54:42

看了一下,我想问题可能出在你的RE1_cnt 的定义上,你可以换变量试下<br>
好久没用VHDL了,不知道说得对不

ups 发表于 2010-6-28 02:12:41

状态机完成

CTT 发表于 2010-6-28 04:09:02

状态机?能讲讲思路吗?我有点不懂

ICE 发表于 2010-6-28 04:40:24

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>
关键是找到状态转移条件,分析状态之间的关系。

usd 发表于 2010-6-28 06:32:28

采用状态机就没问题的

CTT 发表于 2010-6-28 08:06:59

我把思路改了,设计修改了,不这样做了。<br>
谢谢大家的帮忙!<br>
非常感谢!

inter 发表于 2010-6-28 08:49:35

MR是作为reset在用吧?不考虑时间的话,逻辑上没有发现什么问题。<br>
我试了下,还没做到。。。郁闷。<br>
建议还是用状态基做了。跑process我碰到麻烦。。。<br>
<br>
[ 本帖最后由 toyibm 于 2007-1-25 14:40 编辑 ]

longtim 发表于 2010-6-28 09:18:12

这种东东,最好还是状态机来做比较方便
页: [1]
查看完整版本: 求助:这样的信号怎么产生呢?