decoder.v

来自「这是一个HDB3的译码器」· Verilog 代码 · 共 29 行

V
29
字号
module Decoder(clk,clr,data_p,data_n,data_out);
input clk,clr;
input data_p,data_n;                        // HBD3 码以上下行输入  正是01,负是10,零是00
output data_out;
reg [4:0] data_reg;                         // 输出data_reg 之前的暂存
reg [4:0] d_n;                              // 下行输入数据的暂存
reg [4:0] d_p;                              // 上行输入数据的暂存
wire data = data_p + data_n;                // 判断是不是零电平

always @(posedge clk or posedge clr)
  if(clr)
    begin
      data_reg=0;   d_n=0;    d_p=0;        // 初始态清零
    end
  else
    begin                                   //破坏符号V总是与前一位的非零元极性相同
      if(data_reg[4:2]==3'b001 && data && (data_n==d_n[2] || data_p==d_p[2]))       //如果输入后是1001
        data_reg={4'b0000,data_reg[1]};     //修改前四位为0000
      else
        if(data_reg[4:1]==4'b0001 && data && (data_n==d_n[1] || data_p==d_p[1]))    //如果输入后是10001
          data_reg=5'b00001;                //修改为00001
        else
          data_reg={data,data_reg[4:1]};     //输入码从最高位存入
	      d_n={data_n,d_n[4:1]};             //下行输入
	      d_p={data_p,d_p[4:1]};             //上行输入
    end
   assign data_out=data_reg[0];              //解码从最低位输出,将两行变成一行输出

endmodule

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?