1. 程式人生 > >FPGA設計之迴圈編解碼(行動通訊)

FPGA設計之迴圈編解碼(行動通訊)

1,迴圈碼編碼部分

module cyc_code(rst,clk,data,code);

input rst,clk;
input [3:0]data;

output reg [7:0]code;

 begin
  code[7]=1'b0;
  code[6]=data[2];
  code[5]=data[1];
  code[4]=data[0];
  code[3]=data[2]^data[1];
  code[2]=data[1]^data[0];
  code[1]=data[2]^data[1]^data[0];
  code[0]=data[2]^data[0];
 end

endmodule

 2,迴圈碼解碼部門

module cyc_decode(clk,code,code_out);

input clk;
input [6:0]code;

output reg [3:0]code_out;

  7'b0010111:code_out=4'b0001;
  7'b0101110:code_out=4'b0010;
  7'b0111001:code_out=4'b0011;
  7'b1001011:code_out=4'b0100;
  7'b1011100:code_out=4'b0101;
  7'b1100101:code_out=4'b0110;
  7'b1110010:code_out=4'b0111;
  7'b0000000:code_out=4'b0000;
  default:
  code_out=4'b0000;
  
 endcase
endmodule

3,並行轉序列資料

module p16s(clk,data,cyc_out,fs);
input clk;
input [15:0] data;
output reg cyc_out,fs;

reg [4:0] m;
reg [15:0] yreg;
//=============================================
[email protected](posedge clk)
begin
       if(m==4'd15)
            m<=0;
       else
           m<=m+4'b1;
end
//===============================================

[email protected](posedge clk)
 if(m==4'b0)
  begin
   yreg<=data;
   cyc_out<=yreg[15];
  end
 else
  begin
   yreg[14:1]<=yreg[13:0];
   cyc_out<=yreg[14];
  end
//================================================
[email protected](posedge clk)//每40位作為一幀資料傳送一個高電平控制位
 if(m==4'd0)
 fs<=1'b1;
 else
 fs<=1'b0;
//======================================================
endmodule

4,序列轉並行資料

module s2p16(cyc_code_in,fs,bs,pcode);

input cyc_code_in,fs,bs;
output reg [15:0]pcode;
reg [15:0]temp;

if(fs)
 pcode<=temp;
else
 begin
  temp[0]<=cyc_code_in;
  temp[1]<=temp[0];
  temp[2]<=temp[1];
  temp[3]<=temp[2];
  temp[4]<=temp[3];
  temp[5]<=temp[4];
  temp[6]<=temp[5];
  temp[7]<=temp[6];
  temp[8]<=temp[7];
  temp[9]<=temp[8];
  temp[10]<=temp[9];
  temp[11]<=temp[10];
  temp[12]<=temp[11];
  temp[13]<=temp[12];
  temp[14]<=temp[13];
        temp[15]<=temp[14];
 end
endmodule