中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

東莞人才服務中心官網(wǎng)seo網(wǎng)站診斷文檔案例

東莞人才服務中心官網(wǎng),seo網(wǎng)站診斷文檔案例,石家莊英文網(wǎng)站建設(shè),365做網(wǎng)站FPGA:卷積編碼及維特比譯碼仿真 本篇記錄一下在FPGA中完成卷積編碼和維特比譯碼的過程,通過代碼解釋編碼的過程和譯碼的過程,便于理解,同時也方便移植到其他工程中。 1. 準備工作 卷積編譯碼IP核—convolutionIP核和viterbiIP核…

FPGA:卷積編碼及維特比譯碼仿真

本篇記錄一下在FPGA中完成卷積編碼和維特比譯碼的過程,通過代碼解釋編碼的過程和譯碼的過程,便于理解,同時也方便移植到其他工程中。

1. 準備工作

  • 卷積編譯碼IP核—convolutionIP核和viterbiIP核
  • 卷積編碼原理知識—網(wǎng)上有很多關(guān)于原理性的解釋
  • 卷積編碼對照仿真過程—可以對照之前的MATLAB仿真程序便于更好的理解編譯碼的過程,但是有一點不同,在FPGA仿真代碼中利用自然數(shù)編碼,最后譯碼回自然數(shù),方便對照正確性。

2. 編碼過程

首先添加convolutionIP核,可以看到首先有如下的需要配置的參數(shù)。

卷積核設(shè)置

按照上圖的設(shè)置方式為2,1,7形式的卷積編碼器,這個沒有什么需要注意的,按照常規(guī)設(shè)置就可以了。

然后添加viterbiIP核,打開之后可以看到如下的設(shè)置參數(shù)。

卷積核設(shè)置

在第一個Viterbi Type欄中可以可以選擇Standard,然后約束長度和編碼過程的設(shè)置一致,回溯深度可以利用公式計算5*(約束長度-1),這個是最小的設(shè)置的值,回溯深度至少要大于這個值。

卷積核設(shè)置

在第二個配置頁中,按照如下的參數(shù)進行設(shè)置,這個可以參考MATLAB仿真。

卷積核設(shè)置

這個頁面配置的傳入的bit數(shù)據(jù),因為編碼設(shè)置的是2,1,7所以這個設(shè)置為2,

3. 仿真過程

整個仿真過程利用0-15的自然數(shù)循環(huán),對其進行卷積編碼,然后通過viterbi譯碼還原出原來的自然數(shù)。

程序的設(shè)置流程思路:

  • 為了方便移植到其他的工程中,同時為了轉(zhuǎn)換數(shù)據(jù)速率,在自然數(shù)信源和卷積編碼中間添加了一個fifo
  • 同樣的操作,在譯碼結(jié)束之后添加了一個fifo,與前一個fifo對稱。
  • 在利用譯碼的過程中,有一點注意事項:編碼之后的2bit數(shù)據(jù)輸入到viterbi譯碼的IP核中時,需要在第0位和第8位填充,構(gòu)成兩bit。這個技術(shù)手冊中有說明。

手冊

下面給出兩個fifo的參數(shù)設(shè)置,自然數(shù)位寬為[0:3],首先是信源和編碼之間的fifo。

fifo_en
然后是譯碼之后的fifo。

fifo_de

4. 完整代碼

`timescale 1ns / 1psmodule conv_encoder(input clk,          //時鐘input rst_n         // 復位  高電平復位);parameter K = 1;   //  對應MATLAB仿真中的k和n的值,這個在IP核設(shè)置中已經(jīng)有體現(xiàn)
parameter N = 2;   //
parameter L = 7;  // 編碼之后的數(shù)據(jù)長度reg [5:0] datain_num; // 每一組編碼的原始數(shù)據(jù)個數(shù)
reg [3:0] datain;
//reg [5:0] dataout_num;  //輸出編碼數(shù)據(jù)的個數(shù)// 定義viterbi IP核需要用到的信號
wire vit_datain_valid;   // 當vit ip的ready信號有效同時 conv的輸出有效的時候,這個信號有效
wire vit_datain_ready;   //
wire vit_dataout_valid;
wire vit_dataout_ready;
wire vit_data_out;  // 譯碼結(jié)果輸出// 信源處fifo的相關(guān)信號線,該fifo是用來把多位數(shù)轉(zhuǎn)為比特流傳入到卷積編碼中。
wire fifo_encode_empty;
wire fifo_encode_full;
wire fifo_encode_out;
wire fifo_decode_empty;
wire fifo_decode_full;
wire [3:0] fifo_decode_out;wire rd_en; //第一個fifo的讀寫控制信號
wire wr_en;
reg wren;always@(posedge clk)beginif(~rst_n)beginwren <= 1'b0;endelse beginif(fifo_encode_full==1'b1)beginwren <= 1'b0;endelse beginwren <= 1'b1;endend
end
assign wr_en = wren & (!fifo_encode_full);  // fifo沒有滿就往fifo中寫數(shù)據(jù) 
wire rd_en2; // 第二個fifo的讀寫控制信號
wire wr_en2;assign rd_en2 = !fifo_decode_empty;  // 最后一個fifo 非空就可以讀數(shù)據(jù)
assign wr_en2 = (!fifo_decode_full) & vit_dataout_valid;
assign vit_dataout_ready = 1'b1;  // 最后直接進fifo了,這里不做特殊控制了,直接常為1,就可以僅看vit_dataout_valid信號了// 編碼信號的控制型號 valid 和 ready
wire conv_datain_ready;
reg conv_datain_valid;
wire [1:0] conv_dataout;
wire conv_dataout_valid;
wire conv_dataout_ready;// 設(shè)計輸入數(shù)據(jù) 這里面需要對輸入的數(shù)據(jù)轉(zhuǎn)化弄成位的形式,
// 這個和卷積編碼的參數(shù)設(shè)置有關(guān),2,1,7,接受一個輸入bit生成兩個bitalways@(posedge clk)beginif(~rst_n)begindatain <= 4'b0;datain_num <= 6'b0;endelse beginif(wr_en == 1'b1)begin // 數(shù)據(jù)只在wr_en有效的情況下才逐漸累加,這個是為了通過連續(xù)的數(shù)值檢驗譯碼正確性datain <= datain + 4'b1;datain_num <= datain_num + 6'b1;endelse begindatain <= datain;datain_num <= datain_num;endend
end// 在這里添加轉(zhuǎn)換bit 可以用fifo實現(xiàn),同時能夠控制速率 assign rd_en = conv_datain_ready;
fifo_encode u1 (.clk(clk),      // input wire clk.srst(~rst_n),    // input wire srst.din(datain),      // input wire [3 : 0] din.wr_en(wr_en),  // input wire wr_en.rd_en(rd_en),  // input wire rd_en.dout(fifo_encode_out),    // output wire [0 : 0] dout.full(fifo_encode_full),    // output wire full.empty(fifo_encode_empty)
);always@(posedge clk)beginif(~rst_n)beginconv_datain_valid <= 1'b0;endelse beginconv_datain_valid <= rd_en;end
endassign conv_dataout_ready = 1'b1;convolution_0 conv (.aclk(clk),                              // input wire aclk.aresetn(rst_n),                        // input wire aresetn.s_axis_data_tdata(fifo_encode_out),    // input wire [7 : 0] s_axis_data_tdata  注意這個只能接受1bit有效數(shù)據(jù).s_axis_data_tvalid(conv_datain_valid),  // input wire s_axis_data_tvalid.s_axis_data_tready(conv_datain_ready),  // output wire s_axis_data_tready.m_axis_data_tdata(conv_dataout),    // output wire [7 : 0] m_axis_data_tdata.m_axis_data_tvalid(conv_dataout_valid),  // output wire m_axis_data_tvalid.m_axis_data_tready(conv_dataout_ready)  // input wire m_axis_data_tready
);assign vit_datain_valid = conv_dataout_valid & conv_dataout_ready;// 編碼完成后進行譯碼過程
viterbi_0 viterbi (.aclk(clk),                                // input wire aclk.aresetn(rst_n),                          // input wire aresetn.s_axis_data_tdata({7'b0,conv_dataout[1],7'b0,conv_dataout[0]}),      // input wire [15 : 0] s_axis_data_tdata 這個經(jīng)過編碼之后的數(shù)據(jù)需要按照此種方式輸入。.s_axis_data_tvalid(vit_datain_valid),    // input wire s_axis_data_tvalid.s_axis_data_tready(vit_datain_ready),    // output wire s_axis_data_tready.m_axis_data_tdata(vit_data_out),      // output wire [7 : 0] m_axis_data_tdata.m_axis_data_tvalid(vit_dataout_valid),    // output wire m_axis_data_tvalid.m_axis_data_tready(vit_dataout_ready)   // input wire m_axis_data_tready
);// 添加一個把數(shù)據(jù)恢復成自然數(shù)的fifo
fifo_decode u2 (.clk(clk),      // input wire clk.srst(~rst_n),    // input wire srst.din(vit_data_out),      // input wire [3 : 0] din.wr_en(wr_en2),  // input wire wr_en.rd_en(rd_en2),  // input wire rd_en.dout(fifo_decode_out),    // output wire [0 : 0] dout.full(fifo_decode_full),    // output wire full.empty(fifo_decode_empty)  // output wire empty
);endmodule

下面為tb文件:

`timescale 1ns / 1psmodule conv_tb();reg l_clk;
reg rst_n;conv_encoder conv_test_ins(.clk(l_clk),          //時鐘.rst_n(rst_n)         // 復位  高電平復位
//    input [7:0] data_in,  // 輸入的待編碼數(shù)據(jù)
//    output [7:0] dataout      // 輸出的解碼數(shù)據(jù));initial l_clk = 1;
always #5 l_clk= !l_clk;  //15.625   initial beginrst_n <= 0;#40;rst_n <= 1;#320;//#50000000;#320;
//    $stop;
end
endmodule

5. 結(jié)果分析

以下為仿真結(jié)果圖:

結(jié)果

最下面的紅色線是譯碼之后經(jīng)過fifo速率轉(zhuǎn)換之后的結(jié)果,可以看到是從0依次遞增的自然數(shù),一直到15,然后循環(huán)下去。這個有效是和rd_en2這個信號保持一致的,但是看這組紅線,譯碼的結(jié)果是兩個0,這是因為fifo讀數(shù)據(jù)的時候是有一個clk的時鐘延時的,這也是為什么在給出fifo參數(shù)設(shè)置的時候把latency=1用紅線框起來。所以把rd_en2延遲一個系統(tǒng)時鐘對照fifo_decode_out看數(shù)據(jù)就正確了。在使用的時候看接下來數(shù)據(jù)處理的過程需求,采用合適的操作,這里只做簡單的仿真驗證。

http://m.risenshineclean.com/news/59744.html

相關(guān)文章:

  • 網(wǎng)站怎么做 凡科網(wǎng)站策劃書的撰寫流程
  • 自己如何做電影網(wǎng)站今日熱點新聞大事件
  • 門戶網(wǎng)站建設(shè)情況哪家網(wǎng)絡(luò)營銷好
  • 兒童做的小游戲下載網(wǎng)站市場seo是什么意思
  • 邢臺做網(wǎng)站哪個網(wǎng)絡(luò)公司好贛州seo優(yōu)化
  • 電商網(wǎng)站建設(shè)網(wǎng)蘭州seo
  • 新媒體公司網(wǎng)站怎么做北京網(wǎng)站推廣排名
  • 河間網(wǎng)站建設(shè)價格hyein seo是什么牌子
  • 風中有朵雨做的云在線網(wǎng)站查域名注冊詳細信息查詢
  • 網(wǎng)站制作主要公司2022網(wǎng)站seo
  • dw怎么做網(wǎng)站注冊登入頁面推廣平臺有哪些渠道
  • 做風險投資網(wǎng)站優(yōu)化大師的作用
  • 商丘建網(wǎng)站百度競價排名廣告定價
  • 品牌設(shè)計公司簡介廣東seo網(wǎng)絡(luò)培訓
  • 學網(wǎng)站建設(shè) 去哪里百度推廣客戶端下載安裝
  • 中國建設(shè)銀行網(wǎng)站查詢密碼是什么意思媒體發(fā)布平臺
  • 網(wǎng)站站點文件夾權(quán)限設(shè)置網(wǎng)絡(luò)軟文營銷
  • 公司做網(wǎng)站需要注意什么華為手機網(wǎng)絡(luò)營銷策劃方案
  • 凡科網(wǎng)做網(wǎng)站網(wǎng)站策劃報告
  • 網(wǎng)站建設(shè) 方案書網(wǎng)絡(luò)平臺怎么推廣
  • 同一個網(wǎng)站可以同時做競價和優(yōu)化百度熱門排行榜
  • 網(wǎng)站做導航的地圖seo模板建站
  • 惠州網(wǎng)站建設(shè) 翻譯6旅游搜索量環(huán)比增188%
  • 做文學網(wǎng)站用什么域名口碑營銷怎么做
  • 商丘做網(wǎng)站哪家好上海廣告推廣
  • 網(wǎng)站開發(fā)功能模塊出錯seo課培訓
  • 哪個網(wǎng)站做醫(yī)學培訓好seo工作內(nèi)容和薪資
  • 浙江嘉興seo網(wǎng)站優(yōu)化推廣網(wǎng)絡(luò)推廣宣傳
  • 網(wǎng)站建設(shè)價格自動點擊器怎么用
  • 廣西備案工信部網(wǎng)站營銷型網(wǎng)站內(nèi)容