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

📄 code1111.txt

📁 具有很好功能的循环冗余码的编码器 对VERILOG的学习很有帮助
💻 TXT
字号:
module crc_3(rest,clk,start,Din,Vout,en_out);
parameter size=4;//the length of initial signal
parameter with=3;//the length of generator    
input rest,clk;
input[size-1:0] Din;//initial signal
output[size+with-1:0]Vout;//????
reg[size+with-1:0] Vout;
reg Dx;
wire Vx;
output en_out;
reg en_out;
//******************************************************/
//??????   
//******************************************************/
parameter  rdy=7'b1000000,
          bit0=7'b0100000,
          bit1=7'b0010000,
          bit2=7'b0001000,
          bit3=7'b0000100,
         bit_1=7'b0000010,
         bit_2=7'b0000001;
 reg[6:0]in_state; 
 input start;        
 always@(posedge clk or negedge rest) 
     if(!rest)
          begin
           in_state<=rdy;
           Dx<=1'b0;
           en_out<=0;
          end   
     else 
         if(start)
         case(in_state)
         rdy:  begin
               in_state<=bit0;
               Dx<=Din[0];
               en_out<=0;
               end    
         bit0: begin
               in_state<=bit1;
               Dx<=Din[1];
               en_out<=0;
               end 
         bit1: begin
               in_state<=bit2;
               Dx<=Din[2];
               en_out<=0;
               end 
         bit2: begin
               in_state<=bit3;
               Dx<=Din[3];
               en_out<=0;
               end  
         bit3: begin
               in_state<=bit_1;
               Dx<=1'b0;
               en_out<=0;
               end  
         bit_1: begin
               in_state<=bit_2;
               Dx<=1'b0;
               en_out<=0;
               end      
               
         bit_2: begin
               in_state<=rdy;
               Dx<=1'b0;
               en_out<=1;
               end          
                                                    
        default: begin
                 in_state<=rdy;
                 Dx<=1'b0;
                 en_out<=0;
                 end       
        endcase          
   //-----------------------------------------------------------
   //LFSR?????????
   //-----------------------------------------------------------
    reg[with-1:0]lfsr;
    integer i;
    parameter tap=3'b100;
    always@(posedge clk or negedge rest)
        if(!rest)
          lfsr<=0;
        else 
            begin
               for(i=1;i<=with-1;i=i+1) 
                 if(tap[i])
                     lfsr[i]<=lfsr[i-1]^Dx;
                 else lfsr[i]<=lfsr[i-1];
               lfsr[0]<=Dx;  
            end 
    assign Vx=Dx^lfsr[with-1] ;
    //---------------------------------------------------------------
    //???????????
    //--------------------------------------------------------------
    reg[size+with-1:0]V_out;
    always@ (posedge clk or negedge rest)
        if(~rest)
         V_out<=1'bz;
        else
           begin
           V_out<= V_out>>1;
           V_out[size+with-1]<=Vx;
           end
    always@(en_out)
         if(en_out) 
          Vout<= V_out; 
 endmodule   

⌨️ 快捷键说明

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