首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VHDL:与设置相关的正确计时另一个组件

VHDL:与设置相关的正确计时另一个组件
EN

Stack Overflow用户
提问于 2013-04-09 12:41:22
回答 1查看 374关注 0票数 1

我正在做一个用VHDL编写的FPGA项目。

我需要将一个16位移位寄存器复制到FIFO中(例如,在16个新的数据位被送入移位寄存器后,我想将新形成的16位字发送到fifo)。

我的问题是,在断言fifo上的时钟线之前,我是否需要在fifo的输入端设置一个时钟的数据?这实际上是一个通用的VHDL问题,并不特定于fifos。

基本上,是否可以在同一操作中设置数据和切换时钟,或者我是否需要一些基本的状态机来设置一个时钟沿上的数据并在下一个时钟沿上切换fifo时钟?

例如:

代码语言:javascript
复制
fifo_d_in( 7 downto 0 ) <= shift_register;
fifo_clk <= '1';

代码语言:javascript
复制
if( state = one ) then
    fifo_d_in( 7 downto 0 ) <= shift_register;
    state <= two;
elsif( state = two ) then
    fifo_clk <= '1';
end if;

我的直觉告诉我,我必须首先设置数据,以满足输入寄存器的设置和保持要求。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-09 13:00:45

数据必须在时钟沿之前的设置时间内存在,因此在任何可能的数据更改的同时断言时钟可能会导致不稳定的行为。

配置移位寄存器的一种方法是让一个输出在最后一位数据输入后断言。对于8位移位寄存器,在第8个时钟之后,信号将被断言。实现这一点的任何简单方法都是使用3位计数器,当所有位都为1时,输出为1。该信号随后连接到fifo的CLKEN,以便在第9个时钟边沿,移位寄存器输出端的数据被计入fifo。也可以在第9个时钟向移位寄存器输入下一串行位数据。

代码语言:javascript
复制
       shift reg             FIFO
       -------------        ---------
      -|DIN   DOUT |--------| DIN   |
       |      FULL |--------| CLKEN |
     - |>          |      --|>      |
     | -------------      | ---------
     |                    | 
CLK -----------------------

在上图中,FULL将在最后一位数据写入移位寄存器后立即置位,并在下一个周期解除置位。FULL可以是组合逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15893454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档