本文主要是介绍Verilog 曼彻斯特编码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
鱼弦:CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)
项目场景: CPLD开发板介绍:有一个FPGA芯片与RAM芯片,现在内容是由开发板A对串口发送过来的数据进行曼彻斯特编码,之后将编码数据输出到引脚,通过杜邦线输送到另一个开发板B,开发板B进行曼彻斯特译码。
开发软件:quartus II 语言:Verilog
问题描述 目前曼彻斯特编码数据一切正常,主要思路就是先产生一个合适的采样时钟,其中采样时钟通过分频手段。其中编码逻辑部分是参考CSDN曼彻斯特编码以及译码原理 ,但是线上仿真总是最理想的情况,实际运转中存在一定的偏差。 进行曼彻斯特译码中,首先通过时钟clk_bps_en(该时钟是通过分频产生的,其频率是串口波特率的2倍,即9600*2)将一个2位的数组将保存数据的前两位数据。然后通过clk_bps_en产生一个两倍的flag2采样时钟,该时钟就是下面译码的参考时钟。
主要问题 采样时钟flag2与编码后的数据之间的相位差总是随机的,又或者说两者之间的相位差在一个固定的周期内不断变化,当两者相位差超过了某个阈值后,采样时钟flag2在上升沿取值的时候会发生偏差,也就导致后续的取值都发生错误,但是当这个相位差小于这个阈值后,取值又回到正常。 现象 所以现在的实
这篇关于Verilog 曼彻斯特编码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!