打印

计数器产生的门控时钟问题

[复制链接]
2958|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
iampeter|  楼主 | 2011-7-19 20:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
计数器产生的门控时钟问题
设计中需要由计数器产生一个时钟供后级电路使用,计数器将一个全局时钟rdy_60分频,当reg_zip=cnt时产生一个脉冲a,使用a做为时钟驱动后级!基本代码如下:

process(rdy_60,reg_zip)
begin
if(rdy_60'event and rdy_60='1')then
if(reg_zip=cnt)then
   cnt<="0000000000000001";
   a<='1';
  else
    cnt<=cnt+'1';
    a<='0';
  end if;
end if;  

由于a为门控时钟,直接使用a驱动后级电路会给后级电路带了很多不稳定的因素,因此将a做为触发器的使能端,来产生一个由全局时钟rdy_60得到的稳定时钟b,增加的代码如下:
if(rdy_60'event and rdy_60='1')then
if(a='1')then
   b<='1';
        else
        b<='0';
end if;
end if;

可能是我的第二个代码写法不对,b还是不稳定,求消除门控时钟的正解!!!

相关帖子

沙发
wwde| | 2011-7-19 21:00 | 只看该作者
不了解了

使用特权

评论回复
板凳
wwde| | 2011-7-19 21:00 | 只看该作者

使用特权

评论回复
地板
GoldSunMonkey| | 2011-7-19 21:05 | 只看该作者
a和b有什么区别:)

使用特权

评论回复
5
GoldSunMonkey| | 2011-7-19 21:41 | 只看该作者
再说了a也不能叫门控时钟啊

使用特权

评论回复
6
iampeter|  楼主 | 2011-7-19 22:51 | 只看该作者
其实我就想知道用什么方法把全局时钟计数分配得到的时钟最优!!!

使用特权

评论回复
7
GoldSunMonkey| | 2011-7-19 22:54 | 只看该作者
DCM

使用特权

评论回复
8
iampeter|  楼主 | 2011-7-20 07:33 | 只看该作者
时钟会随着参数reg_zip的变化而产生分频变化,不能用DCM,需要自己写一段代码来产生这个时钟!!!

使用特权

评论回复
9
atua| | 2011-7-20 09:33 | 只看该作者
把a做为触发器的使能时还不稳定是什么意思?怎么个不稳定法?能描述一下吗?

使用特权

评论回复
10
AutoESL| | 2011-7-20 09:35 | 只看该作者
b不稳定是什么意思?
有时有,有时没有?

使用特权

评论回复
11
AutoESL| | 2011-7-20 09:36 | 只看该作者
把a,b都寄存几拍呢,不知道会不会好点

使用特权

评论回复
12
星星之火红| | 2011-7-20 20:32 | 只看该作者
大圣,快跟贴啊~

使用特权

评论回复
13
xh0123456xh| | 2011-7-21 11:17 | 只看该作者
顶下

使用特权

评论回复
14
iampeter|  楼主 | 2011-7-22 10:44 | 只看该作者
本帖最后由 iampeter 于 2011-7-22 10:45 编辑

我把信号a/b产生的时钟给了一个状态机的地址计算器,结果那个地址计数器工作不正常,有时候可以正常产生地址,有时候地址固定在了某个随机的值上,感觉像是时钟reg_buc没起作用一样, reg_buc就是上面程序里的a!!!
代码如下:(reg_buc为a/b)
          if(span_l='1')then
            data_fns<='1';
                 addr2<="000000000";
           elsif rising_edge(reg_buc)then
                  data_fns<='0';
                  wea<='1';
                  addr2<=addr2+'1';
                  addr_data<=addr2+"000001001";        
     end if;

使用特权

评论回复
15
iampeter|  楼主 | 2011-7-22 10:56 | 只看该作者
看一些经验,不建议在状态机中进行较复杂的判断和总线赋值,我尝试着把地址生成的代码写到状态机之外,状态机之内就进行简单赋值看看!!!

使用特权

评论回复
16
atua| | 2011-7-22 11:31 | 只看该作者
rising_edge(reg_buc)

使用特权

评论回复
17
AutoESL| | 2011-7-22 12:24 | 只看该作者
来学习

使用特权

评论回复
18
星星之火红| | 2011-7-22 22:26 | 只看该作者
感觉你的代码好奇怪~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

138

帖子

1

粉丝