当前位置: 首页 > news >正文

网站建设的报告分析海南公共招聘网

网站建设的报告分析,海南公共招聘网,seo专业课程,赤壁网站开发FPGA Xilinx维特比译码器实现卷积码译码 文章目录 FPGA Xilinx维特比译码器实现卷积码译码1 Xilinx维特比译码器实现2 完整代码3 仿真结果 MATLAB #xff08;n,k,m#xff09;卷积码原理及仿真代码#xff08;你值得拥有#xff09;_matlab仿真后代码-CSDN博客 MATLAB 仿真…FPGA Xilinx维特比译码器实现卷积码译码 文章目录 FPGA Xilinx维特比译码器实现卷积码译码1 Xilinx维特比译码器实现2 完整代码3 仿真结果 MATLAB n,k,m卷积码原理及仿真代码你值得拥有_matlab仿真后代码-CSDN博客 MATLAB 仿真实现任意n,k,m卷积码译码_维特比译码matlab-CSDN博客 前面已经使用MATLAB实现了卷积码和译码前段时间也在项目中实现了Xilinx中维特比译码器这次就简单介绍一下这个译码器从项目中把关于卷积码编译码的部分抽取出来 修改了一下匆促实现了一下还行。 1 Xilinx维特比译码器实现 首先找到Viterbi译码器 随便选一个 第一页 别管兄弟们 我也很多不懂什么意思反正第一个就标准 Standard第二个就回溯长度 兄弟们自己设置。 第二页 的第一个Best State 也不懂用了之后会多几个看不懂的引脚 第二个Puncturing 好像那个是打孔的意思我也没用到。第三个Coding是软硬编码的我选择最简单的硬编码直接输入0 1 就行了 第三页就是CC编码时的选项了我编码使用的是1/2CC 然后对应的表达式分别为7 5所以这里第一个就是2 代表两个输出码元然后下面的代表的是表达式7 5 第四页第一个BER Options也没用到用到了也会多几个引脚没敢用 最后一页就是总结大家注意上图中 左侧信息 “Implementation Details” 其中第一个DATA_IN_1(8:8) DATA_IN_1(0:0)意思是输入的比特第8位和第0位有效到时候你只需要把输入的两比特放进这个变量里的第0位和第8位就行了。 DATA(0:0) 就代表每一次输出只有第0位是有效的也就是一次输入一位 这一位就是第0位 2 完整代码 仿真文件 /// timescale 1ns/1ps module testbench_top();//参数定义define CLK_PERIORD 10 //时钟周期设置为10ns100MHz //接口申明reg clk; reg rst_n; reg input_bit; reg input_valid;wire [1:0] output_bits; wire output_valid;reg enable;wire out_data; wire outdata_valid; wire over;reg o_data_end;// 对被测试的设计进行例化// 实例化待测试的卷积编码模块CC2 u_CC2( //二分之一码率 多项式 7,5.clk (clk), .rst (rst_n),.enable (enable), //使能信号 .sink_data (input_bit), //输入数据.sink_valid (input_valid), //数据有效信号.out_valid (output_valid), //输出数据有效信号.out_data (output_bits) //输出数据 );CC2_Decoding u_CC2_Decoding(.clk (clk),.rst (rst_n),.in_data_valid (output_valid), //进来的全是有效数据 直接全部放进译码器中.in_data (output_bits),.o_data_end (o_data_end),.over (over), //结束解码.out_data (out_data),.outdata_valid (outdata_valid) );//复位和时钟产生//时钟和复位初始化、复位产生 initial beginclk 0;rst_n 0;#1000;rst_n 1; end//时钟产生 always #(CLK_PERIORD/2) clk ~clk; integer file; // 文件句柄//测试激励产生 initial begin// 打开文件写入模式file $fopen(D:\\out_data.txt, w);// 确保文件成功打开if (file 0) begin$display(Error opening file!);$finish;endendalways (posedge clk) beginif (outdata_valid) begin // 仅在数据有效时写入$fdisplay(file, %d, out_data); // 将Ik写入文件end endinitial begin(posedge rst_n); //等待复位完成enable 1b0;(posedge clk);input_bit 1b0;enable 1b1;o_data_end 1b0;(posedge clk);repeat(8*16) begin //连续输入8 * 16 *4个bit(posedge clk); input_bit 1b1;input_valid 1b1; //输入数据有效信号(posedge clk); input_bit 1b1;(posedge clk); input_bit 1b0;(posedge clk); input_bit 1b0;endinput_valid 1b0; //输入数据有效信号repeat(3) begin(posedge clk);endo_data_end 1b1; enable 1b0;(posedge clk);o_data_end 1b0;#1000000;$fclose(file); // 关闭文件$stop; endendmodule 1/2CC卷积码编码 module CC2 ( //二分之一码率 多项弿 7,5input clk, input rst,input enable, //使能信号 input sink_data, //输入数据input sink_valid, //数据有效信号output reg out_valid, //输出数据有效信号output reg [1:0] out_data //输出数据 );// sink_data shift_reg[1] shift_reg[0] // out_data[1] out_data[0] 7 5 reg [1:0] shift_reg; //移位寄存噿always (posedge clk) beginif(!rst) beginshift_reg 2b0; //初始化为0out_valid 1b0; //数据输出无效out_data 2b0;end else if(enable) beginif(sink_valid) begin //检测到数据有效信号拉高out_data[0] sink_data shift_reg[0];out_data[1] sink_data shift_reg[1] shift_reg[0];out_valid 1b1; //拉高数据输出有效信号shift_reg {sink_data,shift_reg[1]}; //移位end else beginout_data out_data;out_valid 1b0;shift_reg shift_reg;endend else beginshift_reg 2b0; //将所有寄存器清零out_valid 1b0; //数据输出无效out_data 2b0; endendendmodule1/2CC卷积码译码 module CC2_Decoding (input clk,input rst,input in_data_valid, //进来的全是有效数据 直接全部放进译码器中input [ 1:0] in_data,input o_data_end,output reg over, //结束解码output out_data,output outdata_valid );parameter out_data_hop_amount 8 * 16 * 4; // 输出所有的有效比特数wire [ 7:0] decoded_data;reg [15:0] binary_data; reg data_valid;reg [ 10:0] out_data_hop_count; //一跳的输出码元计数器reg flag;wire s_axis_data_tready; wire decoded_valid;assign out_data decoded_data[0];Viterbi2CC_Ip u_Viterbi2CC_Ip(.aclk (clk),.aresetn (rst), //低电平就是复位.binary_data (binary_data), // 输入的硬判决编码数据流16比特宽度.data_valid (data_valid), // 输入数据有效信号.s_axis_data_tready (s_axis_data_tready),.decoded_data (decoded_data), // 解码后的输出数据.decoded_valid (decoded_valid) // 解码输出有效信号 );assign outdata_valid (out_data_hop_count out_data_hop_amount) ? decoded_valid : 0;always (posedge clk) beginif(!rst) begindata_valid b0;binary_data b0;end else if(in_data_valid !flag) begindata_valid 1b1; //调高数据有效信号binary_data[8] in_data[0];binary_data[0] in_data[1];end else if(flag s_axis_data_tready out_data_hop_count out_data_hop_amount)begindata_valid 1b1;binary_data b0;end else begindata_valid 1b0;binary_data binary_data;end end//对输出的一跳卷积译码码元计数 always (posedge clk) beginif(!rst) beginover 1b0;out_data_hop_count b0;end else if(decoded_valid out_data_hop_count out_data_hop_amount) begin//此时还在接收64个输出的有效比特数据over 1b0;out_data_hop_count out_data_hop_count 2d1;end else if(out_data_hop_count out_data_hop_amount) beginover 1b0;out_data_hop_count out_data_hop_count;end else beginover 1b1;out_data_hop_count out_data_hop_count;end endalways (posedge clk) beginif(!rst) beginflag b0;end else if(o_data_end) begin //数据送完了flag 1b1;end else beginflag flag;end endendmodule维特比译码器 module Viterbi2CC_Ip (input aclk,input aresetn,input [15:0] binary_data, // 输入的硬判决编码数据流16比特宽度input data_valid, // 输入数据有效信号output s_axis_data_tready,output reg [7:0] decoded_data, // 解码后的输出数据output reg decoded_valid // 解码输出有效信号 );reg [15:0] s_axis_data_tdata; reg s_axis_data_tvalid;wire [7:0] m_axis_data_tdata; wire m_axis_data_tvalid; reg m_axis_data_tready;viterbi2CC your_instance_name (.aclk(aclk), // input wire aclk.aresetn(aresetn), // input wire aresetn.s_axis_data_tdata(s_axis_data_tdata), // input wire [15 : 0] s_axis_data_tdata.s_axis_data_tvalid(s_axis_data_tvalid), // input wire s_axis_data_tvalid.s_axis_data_tready(s_axis_data_tready), // output wire s_axis_data_tready.m_axis_data_tdata(m_axis_data_tdata), // output wire [7 : 0] m_axis_data_tdata.m_axis_data_tvalid(m_axis_data_tvalid), // output wire m_axis_data_tvalid.m_axis_data_tready(m_axis_data_tready) // input wire m_axis_data_tready );always (posedge aclk) beginif (!aresetn) begin// 复位信号处理s_axis_data_tvalid b0;m_axis_data_tready b0;decoded_valid b0;decoded_data b0;end else beginif (data_valid s_axis_data_tready) begin// 输入有效时将二进制编码数据发送给解码器s_axis_data_tdata binary_data; // 输入16比特的编码数据s_axis_data_tvalid 1d1; // 表示输入数据有效end else begins_axis_data_tvalid 1d0;end// 解码器输出处理if (m_axis_data_tvalid) begindecoded_data m_axis_data_tdata; // 获取解码后的数据decoded_valid 1d1; // 标记解码输出有效end else begindecoded_valid 1d0;endm_axis_data_tready 1d1; // 准备接收更多解码数据end endendmodule3 仿真结果 这是multisim中的仿真结果不好看直接在MATTAB中看解调出来的数据 最后MATLAB中的数据和仿真输入的数据几乎一模一样只有后四位不一样这主要是因为卷积码译码回溯的问题导致最后几位译码会出现问题。不过问题不大
http://www.w-s-a.com/news/698495/

相关文章:

  • 如何做网站哪个站推广描述对于营销型网站建设很重要飘红效果更佳
  • 济阳做网站公司99企业邮箱888
  • 国贸做网站的公司能接做网站的活的网站
  • 淮南建设厅网站上杭县建设局网站
  • 东莞做网站公司首选!西安注册公司费用
  • 做网站包括什么卖水果网站模板
  • 扬州网站建设外包wordpress 文章评分
  • 网站建设网站多少钱公司名字大全列表
  • 设计企业网站内容wordpress 投稿者 权限
  • seo网站推广免费价格低的成语
  • 做网站建设销售辛苦吗专题页是什么
  • 做网站的软件名字全拼wordpress可以上传文件吗
  • 建品牌网站公司关于asp_sql网站开发的书籍
  • 建网站公司营销型网站建设wordpress自定义登录页
  • 泉州市住房和城乡建设局网站淘宝店网站怎么做
  • 企业网站建设费未付款怎样挂账长春网站制作专业
  • 深圳找网站建设邹城市建设局网站
  • 长春火车站停运了吗网站开发概要设计
  • 网站开发表格整体页面居中网站域名详解
  • 漕泾网站建设赢展网站建设
  • 医院网站建设的要求毕业了智慧团建密码忘了
  • 网站怎么建设在哪里接单坪山商城网站建设哪家便宜
  • 中山企业网站优化易语言wordpress发布
  • 宜昌网站推广自己怎么做彩票网站吗
  • 英文网站建设 招标网站建设中服务器搭建方式
  • 直播网站建设需要什么软件有哪些室内设计效果图怎么做
  • 宁波网站建设电话网络推广外包一年多少钱
  • 检索标准的网站怎么制作企业网站
  • 下列关于网站开发中网页发布wordpress 粘帖图片
  • 网站建设遇到的问题及对策宁波网站建设营销推广