目录
由宽到窄的数据转换
假设数据从模块A传入到模块B,模块A的输出数据为32位,模块B的输入数据位宽为16位,那么如何能把数据从A传入B而不损失数据呢。可以通过时钟的分频与倍频实现。
假设一个原时钟clk1,通过二分频,把原时钟变为时钟clk2,那么clk1的时钟频率就是clk2的两倍。在clk2的上升沿,我们读入32bit数据,在clk1的上升沿我们输出16bit数据,由于clk1的频率是clk2的两倍,每读入一次32bit数据,就会输出两次16bit数据,从而实现了数据位宽的转换。
注意代码中输出信号data_out的赋值,即在分频的慢时钟域的高位期间发送高16位,在地位期间发送低16位。
由窄到宽的数据转换
由窄到宽的数据位宽转换原理和由宽到窄的是一样的。把频率高一点的时钟用来采样16bit数据,频率低一点的时钟用来输出32bit数据。
注意由窄到宽需要两个中间变量来保存数据,clk1打拍时候,temp保存高16位,sync保存组合后的,在clk2打拍的时候将组合后的sync赋值输出。(先发送的数据为高16位,后发送的位低16位)
位宽转换的核心就在于生成一个与原时钟成比例关系的时钟,这样时钟频率的比例关系就可以和数据的位宽扯上联系。
原文链接:https://blog.csdn.net/qq_57502075/article/details/127136259