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

📄 rsc_7_5encoder.v

📁 turbo码_verilog_编码源文件
💻 V
字号:
/*	-------------------------------------------------------------------------
Author:QiuPing Zhong
Date:Oct 18th,2004
Veision: 

Function:complete RSC_7_5encoder
CLK:
DataIn_Speed:
DataOut_Speed:
Delay: 1 clk
---------------------------------------------------------------------------*/
module RSC_7_5encoder(//input:
                     data_clk,
                     reset_n,
							framehead,
							bitin,
							tailinen, //pluse 1 clk 
							//output:
							sysbitout,
							paribitout,
                     rscencoder_over,//pluse 1 clk 
							//current_state,
							//next_state,
							//cnt4096,
							tailouten //pluse 1 clk
							);
  input data_clk;
  input reset_n;
  input framehead;
  input bitin;
  input tailinen;
  
  output sysbitout;
  output paribitout;
  output rscencoder_over;
  //output [1:0] current_state;
  //output [1:0] next_state;
  //output [12:0] cnt4096;
  output tailouten;

  parameter IDLE='d0, A='d1, B='d2,C='d3; //the four state of RSC_7_5 encoder

  reg [1:0] current_state;
  reg [1:0] next_state;

  reg [2:0] cnt4;
  //wire tailen;

  reg  tailouten;
  reg sysbitout;
  reg paribitout;
  reg rscencoder_over;

always@(posedge data_clk or posedge reset_n)
begin 
  if(reset_n)
    cnt4<=3'd4;
  else if(tailinen)
       cnt4<=0;
		 else if(!cnt4[2])
		      cnt4<=cnt4+1;
end

//assign tailen=!cnt4[2];
/*always@(posedge data_clk or posedge reset_n)
begin 
  if(reset_n)
    cnt4096<=13'd4096;
  else if(framehead)
       cnt4096<=0;
		 else if(!cnt4096[12])
		      cnt4096<=cnt4096+1;
end
  
assign tailen=(&cnt4096[11:2])&&(!cnt4096[12]);

*/

/*  state swicthing with all the possible conditions,see details in word file */
always@(posedge data_clk or posedge reset_n)
begin
    if(reset_n)
	   current_state<=IDLE;
    else if(framehead)
	       current_state<=IDLE; 
	      else current_state<=next_state;
end


always@(current_state or cnt4[2] or bitin)
begin
if(cnt4[2])   
     case(current_state)
       IDLE: if(bitin)
		         next_state<=B;
             else 
					next_state<=IDLE;
        A:	 if(bitin)
		         next_state<=IDLE;
             else 
					next_state<=B;
        B:   if(bitin)
		         next_state<=A;
             else 
					next_state<=C;
        C:   if(bitin)
		         next_state<=C;
             else 
					next_state<=A;        
    endcase
else
    case(current_state)
       IDLE: next_state<=IDLE;
        A:	 next_state<=IDLE;
        B:   next_state<=IDLE;
        C:   next_state<=A;
    endcase
end


always@(posedge data_clk or posedge reset_n)
begin
    if(reset_n)
	   begin
	    sysbitout<=0;
	    paribitout<=0;
	   end
	 else if(cnt4[2])
	         begin
	         case(current_state)
				IDLE: if(bitin)
				          begin
				           sysbitout<=1;
	                    paribitout<=1;
						    end
				      else 
						    begin
				           sysbitout<=0;
	                    paribitout<=0;
						    end
            A:	   if(bitin)
				          begin
				           sysbitout<=1;
	                    paribitout<=1;
						    end
				      else 
						    begin
				           sysbitout<=0;
	                    paribitout<=0;
						    end
            B:	   if(bitin)
				          begin
				           sysbitout<=1;
	                    paribitout<=0;
						    end
				      else 
						    begin
				           sysbitout<=0;
	                    paribitout<=1;
						    end
            C:	   if(bitin)
				          begin
				           sysbitout<=1;
	                    paribitout<=0;
						    end
				      else 
						    begin
				           sysbitout<=0;
	                    paribitout<=1;
						    end
				endcase
	         end
        else
		      begin
	         case(current_state)
				IDLE: begin
				      sysbitout<=0;
	               paribitout<=0;
						end
            A:	   begin
				      sysbitout<=1;
	               paribitout<=1;
						end
            B:	   begin
				      sysbitout<=1;
	               paribitout<=0;
						end
            C:	   begin
				      sysbitout<=0;
	               paribitout<=1;
						end
				endcase
				end
end		      


always@(posedge data_clk or posedge reset_n)
begin
if(reset_n)
    rscencoder_over<=0;
else 
    rscencoder_over<=framehead;
end

always@(posedge data_clk or posedge reset_n)
begin
if(reset_n)
   tailouten<=0;
else 
   tailouten<=tailinen;
end
	      
endmodule


⌨️ 快捷键说明

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