fpga初始状态为正弦波,周期64个时钟周期和总线周期 有会做的fpga大佬么

我们平时听说的流水就是一种通過切割大的组合逻辑(在其中插入一级或多级D触发器从而使寄存器与寄存器之间的组合逻辑减少)来提高工作频率的方法。比如一个32 位嘚计数器该计数器的进位链很长,必然会降低工作频率我们可以将其分割成4位和 8位的计数,每当4位的计数器计到15后触发一次8位的计数器这样就实现了计数器的切割,也提高了工作频率

    在状态机中,一般也要将大的计数器移到状态机外因为计数器这东西一般是经常 昰大于4输入的,如果再和其它条件一起做为状态的跳变判据的话必然会增加LUT的级 联,从而增大组合逻辑以一个6输入的计数器为例,我們原希望当计数器计到111100后 状态跳变现在我们将计数器放到状态机外,当计数器计到111011后产生个enable信号 去触发状态跳变这样就将组合逻辑减尐了。状态机一般包含三个模块一个输出模块,一个决定下个状态是什么的模块和一个保存当前状态的模块组成三个模块所采用的逻輯也各不相同。输出模块通常既包含组合逻辑又包含时序逻辑;决定下一个状态是什么的模块通常又组合逻辑构成;保存现在状态的通常甴时序逻辑构成三个模块的关系如下图9所示。


    所有通常写状态机时也按照这三个模块将状态机分成三部分来写如下面就是一种良好的狀态机设计方法:

    状态机通常要写成3段式,从而避免出现过大的组合逻辑

    上面说的都是可以通过流水的方式切割组合逻辑的情况,但是囿些情况下我们是很 难去切割组合逻辑的在这些情况下我们又该怎么做呢?

    状态机就是这么一个例子我们不能通过往状态译码组合逻輯中加入流水。如果我 们的设计中有一个几十个状态的状态机它的状态译码逻辑将非常之巨大,毫无疑问 这极有可能是设计中的关键蕗径。那我们该怎么做呢还是老思路,减少组合逻辑我 们可以对状态的输出进行分析,对它们进行重新分类并根据这个重新定义成┅组组小 状态机,通过对输入进行选择(case语句)并去触发相应的小状态机从而实现了将大的 状态机切割成小的状态机。在ATA6的规范中(硬盘的標准)输入的命令大概有20十种 ,每一个命令又对应很多种状态如果用一个大的状态机(状态套状态)去做那是不可想象的,我们可以通过case语句去对命令进行译码并触发相应的状态机,这样做下来 这一个模块的频率就可以跑得比较高了

    总结:提高工作频率的本质就是偠减少寄存器到寄存器的时延,最有效的方法就是 避免出现大的组合逻辑也就是要尽量去满足四输入的条件,减少LUT级联的数量我们 可鉯通过加约束、流水、切割状态的方法提高工作频率。

在FPGA中进行时钟设计时也要注意一下几点:

  1. 一个模块尽量只用一个时钟这里的一个模块是指一个module或者是一个entity。在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔 离这样做可以让综合器综合絀更优的结果。
  2. 除非是低功耗设计不然不要用门控时钟--这会增加设计的不稳定性,在要用到门控时钟的地方也要将门控信号用时钟的丅降沿 打一拍再输出与时钟相与。
  3. 禁止用计数器分频后的信号做其它模块的时钟而要用改成时钟使能的方式,否则这种时钟满天飞的方式对设计的可靠性极为不利也大大增加了静态时序分析的复杂性。

1.4 不同时钟域之间的同步
    当一个设计中的两个模块分别用的是两个工作時钟那么在它们的接口处就工作在异步模式,这时为了保证数据能正确的处理那么就要对两个模块进行同步
这里的不同的时钟域通常昰以下的两种情况:
1、 两个时钟的频率不同;
2、 虽然两个时钟的频率相同,但是它们是两个独立的时钟其相位没有任何关系。
图10 两个时鍾的频率完全不同
图11两个时钟的频率相同但相位不相关
    两个时钟域之间传输的数据根据不同的位宽通常采用不同的同步的方法。
1、单bit之間的同步且发送的每个pulse至少有1个周期宽度的情况
    这类同步主要是用于一些控制信号自己的同步通常的采用方法就是输出数据在接收的模塊中利用两个触发器采用系统时钟打两拍,如下图12所示对于这种同步需要说明以下几点。
图12 一位同步器设计
(1)图12中的同步电路其实叫"┅位同步器",它只能用来对一位异步信号进行同步,而且这个信号的宽度必须大于本级时钟的脉冲宽度,否则有可能根本采不到这个异步信号
(2)为什么图一中的同步电路只能用来对一位异步信号进行同步呢? (a)当有两个或更多的异步信号(控制或地址)同时进入本时域来控制本时域的电路时,如果这些信号分别都用图12中的同步电路来同步就会出现问题,由于连线延迟或其他延迟使两个或更多的异步信号(控制或地址)之间產生了skew,那么这个skew经过图12的同步器同步进入本时域后,会产生很大的skew或产生竞争,导致本时域电路出错。
出现的问题如下图13所示:
图13 同步多个控淛信号时出错
(b)如果是异步数据总线要进入本时域,同样不能用图12的电路,因为数据的变化是很随机的,其0的宽度或1的宽度和本时域时钟脉冲無关,所以图12的电路可能会采不到正确数据
(3)注意,第二个触发器并不是避免“亚稳态的发生”确切的说,该电路能够防止亚稳态的傳播也就是说,一旦第一个触发器发生了亚稳态(可能性存在)由于有了第二个
触发器,亚稳态不会传播到第二个触发器以后的电路Φ去
(4)第一级触发器发生了亚稳态,需要一个恢复时间来稳定下来或者叫退出亚稳态。当恢复时间加上第二级触发器的建立时间(哽精确的还要减去clock skew)小于等于时钟周期和总线周期的时候(这个条件还是很容易满足的,一般要求两级触发器尽量接近中间没有任何組合逻辑,时钟的skew较小)第二级触发器就可以稳定的采样,得到稳定的确定的数据了防止了亚稳态的传播。
(5)FF2是采样了FF1的输出当嘫是FF1输出什么,FF2就输出什么仅仅延迟了1个周期。注意亚稳态之所以叫做亚稳态,是指一旦FF1进入其输出电平不定,可能正确也可能错誤所以必须说明的是,虽然这种方法可以防止亚稳态的传播但是并不能保证两级触发器之后的数据是正确的,因此这种电路都有一萣数量的错误电平数据,所以仅适用于少量对于错误不敏感的地方。对于敏感的电路可以采用双口RAM或FIFO。
2 输入pulse有可能小于一个时钟周期囷总线周期宽度情况下的同步电路
对2的情况通常采用如下图14的反馈电路该电路的分析如下:假设输入的数据是高电平,那么由于第一个觸发器FF1是高电平清零所有输出也是高电平,采用正确如果输入是第电平那么被FF1被强制清零,这个时候输出位零这样就保证了输出的囸确性。
图14输入pulse有可能小于一个时钟周期和总线周期宽度情况下的同步电路

设总线的时钟频率为8MHZ一个总线周期等于一个时钟周期和总线周期。如果一个总线周期中并行传送16位数据试问总线的带宽是多少?答案是8*16/8=16,还是8*16在网上有两种答案不知噵哪个是对的... 设总线的时钟频率为8MHZ,一个总线周期等于一个时钟周期和总线周期如果一个总线周期中并行传送16位数据,试问总线的带宽昰多少
在网上有两种答案,不知道哪个是对的

两个都对只是第一个单位是MBps 第二个单位是Mbps

你对这个回答的评价是?


你对这个回答的评价昰


你对这个回答的评价是?

但是百度百科里说 带宽=时钟频率x总线位数/8

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

我要回帖

更多关于 时钟周期和总线周期 的文章

 

随机推荐