⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hdb3_encode.tdf

📁 《FPGA嵌入式应用系统开发典型实例》-书的光盘资料
💻 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 + -