微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog代码 信号同步问题

verilog代码 信号同步问题

时间:10-02 整理:3721RD 点击:

用verilog写的代码,大致如下。
输入一个两位二进制信号a[1:0](串行输入00,01,10,11),对应产生四个不同频率的时钟(具体频率未知),在一定时间内(比方说1ms),在各个时钟触发下计数,产生四个数b0,b1,b2,b3,通过比较|b0-b1|,|b0-b2|,|b0-b3|,|b1-b2|......得出两个时钟频率相差最大输入信号值(比方说|b0-b2|最大),则输出分别为00,10)。
问题是:由于在输入信号a[1:0]到输出四个不同频率时钟的模块中,电路存在延时,使得以后在四个时钟触发产生的数再比较得出输出时,信号不能同步,怎么处理啊?

有两种比较简单的方法:
1. 用握手的方式,在传输的数据上加以个有效信号,通过检查有效信号后  在读取数据,数据不会发生亚稳态。  但数据处理效率比较低。
2.  用做好的异步fifo缓存一下,然后读取就同步了
3. 也可以用异步fifo的设计实现,通过调节指针值差,实现。保证数据读取正确。
具体要根据你你设计  来选择合适的方法!

功耗要求不高的话,用高频时钟同步下

一般来说,这种情况只需要将a[1:0]分别同步到四个时钟域,再进行运算。
这里的前提是a[1:0]属于电平敏感的,不会每个时钟周期都发生变化

求学的路过,加油呀

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top