集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2494|回复: 8

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

[复制链接]
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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 11:07 , Processed in 0.059499 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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