ex6_5.v

来自「精通VerilogHDL:IC设计核心技术实例详解」· Verilog 代码 · 共 55 行

V
55
字号
module ex6_5;

reg clk=0,nrst=1;
always #10 clk=~clk;
initial 
begin
   #30 nrst=0;
   #30 nrst=1;
end

reg [4:0] cntr;
always@(posedge clk or negedge nrst)
 if (~nrst)         cntr<=0;
 else if (cntr==25) cntr<=cntr;
 else               cntr<=cntr+1;
 
//source data
wire [25:0] source_data=26'b0010_1101_0111_0001_1100_0000_10;
wire #1 sd=(cntr>1)?source_data[26-cntr]:0;

//NRZI encode
reg NRZI;
always@(posedge clk or negedge nrst)
 if (~nrst)    NRZI<=0;   
 else if (~sd) NRZI<=~NRZI;
 else if ( sd) NRZI<= NRZI;
  
//NRZI decode
wire #20 prev_NRZI=NRZI;
wire NRZI_decode=(cntr>1)?(NRZI!=prev_NRZI)?0:
                          (NRZI==prev_NRZI)?1:0:0;
                   
//Compare                           
reg sd_d;
always@(posedge clk or negedge nrst)
 if (~nrst) sd_d<=0;
 else       sd_d<=sd;

always@(negedge clk)
begin
 if (sd_d!=NRZI_decode)                   
 begin        
  $display("err happen at time:%t",$time);
  $finish;
 end 
end 
                  

initial 
begin
    $dumpfile("./ex6_5.vcd");
    $dumpvars(0,ex6_5);
end          

endmodule

⌨️ 快捷键说明

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