vhdl实现CMI编码译码
一.cmi编码规则
Cmi码是一种双极性二电平码。规则如下:‘0’码用‘01’替换,‘1’码用‘00’和‘11’码交替表示。容易实现,‘10’是禁码,编码不会出现三个以上的0或者1.常用在光纤通信中。
二.用vhdl编程实现cmi编码和译码
(1)编码原理
原理图:
实验原理其实很简单,cmi编码需要一个时钟clk和一个原始信号输入,我这里用pn伪随机码,所以需要pn码产生模块产生pn序列。其中译码是将两位数据比如‘00’‘01’转换成一位数据‘1’‘0’,故译码的频率应该是pn码和cmi编码的两倍。故需要一个分频模块,产生ckl1,clk2,使clk2是clk1的两倍关系。
程序流程:
我按照前后顺序给大家讲解各个模块的实现。
分频:分频相信大家做过vhdl的都会写,这里也很简单,只要生成是两倍的关系就行,但是如果大家板子上的频率很高的话,这个分频就应该高一点,但是做仿真的时候就不应该太高,第一点的话这样的话会更容易得到理论结果。
分频很简单,就是一个计数的。当信号上升沿来了,就将变量加一个一,如果是二分频的话就计数4次,当时达到4次了,电平就翻转。同理可以分频自己想要的频率。
Vhdl程序如