📄 hdb3_encode.tdf
字号:
--以下是HDB3编码的源程序,它完成的是从不归零码到HDB3码的变换。注意程序中的输出分别用out_hdb3_up和out_hdb3_down来表示HDB3码的不同的极性。
--//////////////////////////////////////////////////////////////////////////////////////////////////////////// //该电路为 HDB3 编码电路, 它完成从 NRZ 码到 HDB3 码的编码功能; //
--// 该电路的输入信号为 transmit_data 和 transmit_clk 信号; //
--// 其输出为 out_hdb3_up, out_hdb3_down 信号; //
--////////////////////////////////////////////////////////////////////////////////////////////////////////////
SUBDESIGN hdb3_encode -- 设计实体名;
(
transmit_data,transmit_clk : INPUT;
out_hdb3_up,out_hdb3_down : OUTPUT;
)
VARIABLE
nodes[3..0] : NODE;
shifts[3..0],buffers[1..0] : DFF;
ss : MACHINE
WITH STATES (s_up_o ,
s_up_e ,
s_down_o,
s_down_e);
BEGIN
shifts[].clk = transmit_clk;
buffers[].clk = !transmit_clk;
shifts[0].d = transmit_data;
nodes[0] = shifts[0] # nodes[1];
%检测到四个连续的零后置1,避免重复计算%
shifts[1].d = nodes[0];
shifts[2].d = shifts[1];
shifts[3].d = shifts[2];
nodes[1] = (!shifts[0]) & (!shifts[1]) & (!shifts[2]) & (!shifts[3]);
%检测四个连续的零%
ss.clk = transmit_clk;
TABLE
ss, shifts[3], nodes[1] => ss, nodes[2], nodes[3];
s_up_o, 0 , 0 => s_up_o, 1, 0;
s_up_o, 1 , 0 => s_down_e, 0, 1;
s_up_o, x , 1 => s_up_e, 0, 1;
s_up_e, 0 , 0 => s_up_e, 1, 0;
s_up_e, 1 , 0 => s_down_o, 0, 1;
s_up_e, x , 1 => s_down_e, 0, 1;
s_down_o, 0 , 0 => s_down_o, 0, 1;
s_down_o, 1 , 0 => s_up_e, 1, 0;
s_down_o, x , 1 => s_down_e, 1, 0;
s_down_e, 0 , 0 => s_down_e, 0, 1;
s_down_e, 1 , 0 => s_up_o, 1, 0;
s_down_e, x , 1 => s_up_e, 0, 1;
END TABLE;
buffers[0].d = (shifts[3] & nodes[2]) # (nodes[1] & s_down_o);
buffers[1].d = (shifts[3] & nodes[3]) # (nodes[1] & s_up_o);
out_hdb3_up = buffers[0]& transmit_clk;
out_hdb3_down = buffers[1]& transmit_clk;
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -