CMI码预备知识
CMI又称传号反转码,是一种二电平非归零码。其中“0”码用固定的负、正电平表示,“1”码用交替的正、负电平表示。具有以下优点:(1)不存在直流分量,且低频分量较小;(2)信息码流中具有很强的时钟分量,便于从信号中提取时钟信息;(3)具有一定的检错能力。因此,在高次群的PCM系统中作为接口的码型,在速率低于8 848 kb/s的光纤数字传输系统中被推荐为线路传输码型。
CMI码的编码原理。CMI码是一种1B2B码(一位信息码,二位码元),即将过来的一位码子用两位码子来表示。当过来“0”码时,编码输出固定的“01”码;当过来的是“1”码时,编码输出“00”或者“11”码,并且交替出现。
CMI编码的一种Verilog HDL实现
module CMI(clk1, rst, clk2, cmi_en, cmi_in, cmi_out);
input clk1;
input rst;
input clk2; //clk1的2倍频
input cmi_en; //原始码输入使能信号
input cmi_in; //原始码输入,与clk1时钟同步
output cmi_out; //cmi码输出,与clk2时钟同步
reg cmi_out;
reg [1:0] cmi; //cmi码寄存器
reg mstate; //存储"1"码的序列,以实现交替编码
reg count; //区分当前输出的CMI电平
always@(posedge clk1 or posedge rst)
if(rst)
begin
cmi <= 2'b00;
mstate <=1'b0;
end
else if(cmi_en)
if(cmi_in == 1'b0)
cmi <= 2'b01;
else
begin
cmi <= mstate ? 2'b11 : 2'b00;
mstate <= ~mstate;
end
always@(posedge clk2 or posedge rst)
if(rst)
begin
count <= 1'b0;
cmi_out <= 1'b0;
end
else if(cmi_en)
begin
cmi_out <= count ? cmi[1]: cmi[0];
count<=count+1;
end
endmodule
//说明,大体代码如上,要注意接口的时序关系
//上述代码未作编译,仅供参考