卷積編碼verilog實現

2021-08-19 09:49:25 字數 3604 閱讀 3635

完成(2,1,7)編碼方式 多項式為[133,171],也可以完成(2,1,5)編碼方式多項式[23,35]的verilog實現

對應**中的注釋的位置。

相應的解碼器也寫已寫完,後續。。。。。。。。。。。。。

相關的卷積編碼的基礎知識請參看

`timescale 1ns / 1ps //

// company:

// engineer:

// // create date: 2018/03/30 11:00:01

// design name:

// module name: convolutiongen_module_v2

// project name:

// target devices:

// tool versions:

// description:

// dependencies:

// // revision:

// revision 0.01 - file created

// additional comments:

// //

module convolutiongen_module_v2(

i_clk, i_rst,

i_din,i_dinen,

o_dout1, o_dout2,

o_douten

);input  i_clk;

input  i_rst;

input  i_din;

input  i_dinen;//輸入資料

output o_dout1;

output o_dout2;

output o_douten;

reg o_dout1  = 'b0;

reg o_dout2  = 'b0;

reg o_douten = 'b0;

localparam   s_idle   = 2'b01,

s_s1_gen = 2'b10;

reg [1:0] r_currentstate = s_idle;

reg r_i_din = 'b0, r_din = 'b0;

reg r_i_dinen = 'b0;// r_dinen = 'b0;

reg r_startflag = 'b0, r_endflag = 'b0;

reg r_dout1 = 'b0, r_dout2 = 'b0;

reg r_douten = 'b0;

//reg [3:0] r_shiftreg = 'b0;//(2.1.5)編碼方式的暫存器為4bit

reg [5:0] r_shiftreg = 'b0;//(2.1.7)

always @ ( posedge i_clk )

begin

if ( i_rst )

begin

r_currentstate <= s_idle;

end

else

begin

case ( r_currentstate )

s_idle:

begin

if ( r_startflag )

begin

r_currentstate <= s_s1_gen;

end

else

begin

r_currentstate <= s_idle;

end

ends_s1_gen:

begin

if ( r_endflag )

begin

r_currentstate <= s_idle;

end

else

begin

r_currentstate <= s_s1_gen;

end

end

default:

begin

r_currentstate <= s_idle;

end

endcase

end

end

always @ ( posedge i_clk )

begin

r_i_din   <= i_din;

r_i_dinen <= i_dinen;//輸入資料

r_din   <= r_i_din;

//r_dinen <= r_i_dinen;//輸入資料

if ( r_currentstate == s_idle )

begin

if ( ~r_i_dinen & i_dinen )

begin

r_startflag <= 1'b1;

end

else

begin

r_startflag <= r_startflag;

end

end

else

begin

r_startflag <= 1'b0;

end

if ( r_currentstate == s_s1_gen )

begin

if ( r_i_dinen & ~i_dinen )

begin

r_endflag <= 1'b1;

end

else

begin

r_endflag <= r_endflag;

end

end

else

begin

r_endflag <= 1'b0;

end

if ( r_currentstate == s_s1_gen )

begin

r_dout1 <= r_shiftreg[5]^r_shiftreg[4]^r_shiftreg[2]^r_shiftreg[1]^r_din;

r_dout2 <= r_shiftreg[5]^r_shiftreg[2]^r_shiftreg[1]^r_shiftreg[0]^r_din; //(2,1,7)

/*   r_dout1 <= r_shiftreg[3]^r_shiftreg[2]^r_din;

r_dout2 <= r_shiftreg[3]^r_shiftreg[1]^r_shiftreg[0]^r_din; */  //(2,1,5)

end

else

begin

r_dout1 <= 1'b0;

r_dout2 <= 1'b0;

end

r_douten <= r_currentstate == s_s1_gen;

if ( r_currentstate == s_s1_gen )

begin

//r_shiftreg <= ;//(2,1,5)

r_shiftreg <= ;//(2,1,7)

end

else

begin

r_shiftreg <= 4'd0;

end

o_dout1  <= r_dout1;

o_dout2  <= r_dout2;

o_douten <= r_douten;

end

endmodule

Matlab的卷積編碼實現

最近在做乙個scfde波形的c和向量實現,指導老師給了幾份matlab 要我把對應的c語言和向量寫出來 並行運算指令操作 簡單的 一下就寫完了,有些寫的還是有點煩躁,特別是卷積編碼的解碼,今天我們先不談解碼,先談下編碼,這個還是寫的比較流暢的。卷積編碼器,聽著就不好理解,沒事,我來分析一波,首先我們...

CRC迴圈編碼的Verilog實現

迷茫了幾天,痛苦了幾天,今天終於把crc迴圈編碼的verilog 搞定了,也許是心情好轉的緣故吧,不管怎麼說,終究是做出來了,之前寫的 也沒找出是什麼原因,不管輸入什麼,編碼輸出總是同一碼元,鬱悶 今天重新寫了一遍,原理還是一樣,結果卻是意料之中的,不管了,以後有時間再找原因吧,現在把寫好的 分享一...

卷積自編碼

這篇教程是翻譯paolo galeone寫的卷積自編碼分析教程,作者已經授權翻譯,這是原文。卷積操作符會對輸入訊號進行濾波操作,以便提取其內容的一部分。在傳統的方法中,自編碼沒有考慮到訊號可以被看做是和其他訊號的和。相反,卷積自編碼就是使用卷積操作來做訊號的疊加之和。他們對一組簡單的輸入訊號進行編碼...