首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在VHDL中作用于两个信号(通信时钟)沿?

如何在VHDL中作用于两个信号(通信时钟)沿?
EN

Stack Overflow用户
提问于 2020-04-23 19:01:08
回答 1查看 198关注 0票数 0

我想知道什么是“最好的”或者至少是一个“好”的方法来实现一个在总线或通信时钟上同时作用于两个进程的进程。

假设您想为一个可以发送和接收数据的FiFo提供服务。通常,接收到的数据在其总线"com_clk“的”下降“沿被分配,其中被发送的数据需要在"com_clk”的上升沿被更新,以便在对方在下降沿分配数据时最稳定。

我的方法看起来像这样,当然是使用通常的框架:

方法1:

代码语言:javascript
复制
wait until rising_edge(com_clk);
  if reading='1' then 
    wait until com_clk='0';
    internal_mem <= bus_data;  --read the data from the bus
  else
    bus_data <= internal_mem ; --write the data to the bus
  end if;

方法2:

代码语言:javascript
复制
wait until rising_edge(sys_clk);   --should be much faster than "clk" i guess about 10x(?)
  if reading='1' then 
    wait until com_clk='0';        --wait for the com_clk to become '0'
    internal_mem <= bus_data;      --read the data from the bus
  else
    wait until com_clk='1';        --wait for the com_clk to become '1'
    bus_data <= internal_mem ;     --write the data to the bus
  end if;

解决方案2的一个派生方法是为"com_clk“构建一个边缘检测器,并将该信号用于”等待“或”if子句“中。那么,什么是“好的”或“最好的”方法来处理com_clk信号的两个边缘,我如何评估它呢?

EN

回答 1

Stack Overflow用户

发布于 2020-04-24 13:40:48

实际上,您希望在FPGA上实现双倍数据速率。

可怕的方式:你可以做两个进程,一个在上升沿工作,另一个在下降沿工作。这可能会合成,也可能不会合成,这取决于您的技术,它可能会合成,也可能不会合成,以使用硬件触发器。

的坏方法:你不能使用你的时钟和上升沿两者。在这里,您实际上是在使用两个时钟域。如果你的时机错了,你可能会得到亚稳态。你需要在这里做通常的亚稳态处理电路。

更好的方式:生成一个较慢的时钟。从时钟创建上升沿和下降沿脉冲。这些脉冲将被馈送到触发器的使能端口。

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

https://stackoverflow.com/questions/61385614

复制
相关文章

相似问题

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