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

烟台哪里做网站好免费影视网站建设

烟台哪里做网站好,免费影视网站建设,上海电商网站开发,上海如何批量建站FPGA: RS译码仿真过程 在上一篇中记录了在FPGA中利用RS编码IP核完成信道编码的仿真过程#xff0c;这篇记录利用译码IP核进行RS解码的仿真过程#xff0c;带有程序和结果。 1. 开始准备 在进行解码的过程时#xff0c;同时利用上一篇中的MATLAB仿真程序和编码过程#x…FPGA: RS译码仿真过程 在上一篇中记录了在FPGA中利用RS编码IP核完成信道编码的仿真过程这篇记录利用译码IP核进行RS解码的仿真过程带有程序和结果。 1. 开始准备 在进行解码的过程时同时利用上一篇中的MATLAB仿真程序和编码过程IP核的下载是同样的地址。解码过程中的参数设置正好对应编码的过程。对0-15的自然数通过RS编码得到的数据进行解码其中m4,n15,k3,ploy19。 2. RS译码IP核 RS译码IP核全名Reed-Solomon Decoder具体细节可以参照PDF技术文档首先看IP核参数设置。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R32PpUta-1692190030739)(1.png “rs解码IP核设置1”)] 已经通过RS编码IP核完成了编码的仿真过程并且通过MATLAB对比对结果进行了验证所以这个第一个页码的参数直接参照如图设置就可以与编码是一一对应的没有什么需要特别的说明。 在下面的Variable Check Symbol Options不需要勾选。 在第二个参数设置界面都不需要勾选勾选的话译码输出的结果会带有校验的数据。 在第三个参数设置界面中把Reset选项勾选上。 完成这个IP核的设置。 补充 为了方便利用仿真过程中的译码过程在之前完成编码过程后添加了一个fifo方便进行数据处理和信号控制其中的fifoIP核的参数设置为如下。 这个fifo根据需要设置即可主要是为了编码之后的数据和译码过程使用控制方便。 3. 代码编写 译码过程是在编码基础上添加的编码过程的参数没有变化对0-15的数据进行编码然后再进行译码在编码和译码过程中间有一个fifo其中fifo的读控制信号利用empty信号和译码IP的s_ready信号fifo的写信号编码信号的输出valid信号。详细的逻辑看代码。 代码如下rs_test.v timescale 1ns / 1psmodule rs_test(input clk, //时钟input rst_n // 复位 高电平复位 // input [7:0] data_in, // 输入的待编码数据 // output [7:0] dataout // 输出的解码数据);wire rs_encode_input_tready; // 编码输入准备信号 reg rs_encode_input_tvalid_reg; // 编码输入有效信号 reg rs_encode_input_tready_reg; wire rs_encode_input_tlast; reg rs_encode_input_tlast_reg; wire[7:0] rs_encode_data; wire rs_encode_output_tvalid; wire rs_encode_output_tlast; wire rs_enocde_output_tready; reg rs_enocde_output_tready_reg;parameter K 3; // 对应MATLAB仿真中的k和n的值这个在IP核设置中已经有体现 parameter N 4; // parameter L 15; // 编码之后的数据长度reg [3:0] datain_num; // 每一组编码的原始数据个数 reg [5:0] dataout_num; //输出编码数据的个数wire fifo_full; // fifo 满信号// 设计输入数据 reg [3:0] datain; always(posedge clk)beginif(~rst_n)begindatain 4b0;rs_encode_input_tready_reg 1b0;rs_encode_input_tvalid_reg 1b0;rs_encode_input_tlast_reg 1b0;rs_enocde_output_tready_reg 1b0;datain_num 4b0;endelse beginrs_encode_input_tready_reg rs_encode_input_tready;if(fifo_full1b1)beginrs_encode_input_tvalid_reg 1b0;endelse beginrs_encode_input_tvalid_reg 1b1;endif(rs_encode_input_tready 1b1 rs_encode_input_tvalid_reg 1b1)begin // 在ready 和valid信号都有效的时候才开始编码数据可以在这里计数编码的个数。datain datain 4b1;datain_num 4b1 datain_num;rs_enocde_output_tready_reg 1b1;endelse beginendend end// 根据每一组编码的组数来确定数据顺序 控制最后一个tlast信号。 always(posedge clk)beginif(~rst_n)beginrs_encode_input_tlast_reg 1b0; // 这个信号是需要在一组中的最后一个数据时候信号处于高电平 和k的大小对应endelse beginif(datain_num K)beginrs_encode_input_tlast_reg 1b1;endelse beginrs_encode_input_tlast_reg 1b0; //然后重新置零endend endwire [3:0] data_in; assign data_in datain;rs_encoder_0 rs_encoder_0_ins ( //latency 5clk.aclk(clk), // input wire aclk.aresetn(rst_n), // input wire aresetn.s_axis_input_tdata(data_in), // input wire [7 : 0] s_axis_input_tdata.s_axis_input_tvalid(rs_encode_input_tvalid_reg), // input wire s_axis_input_tvalid.s_axis_input_tready(rs_encode_input_tready), // output wire s_axis_input_tready.s_axis_input_tlast(rs_encode_input_tlast_reg), // input wire s_axis_input_tlast.m_axis_output_tdata(rs_encode_data), // output wire [7 : 0] m_axis_output_tdata.m_axis_output_tvalid(rs_encode_output_tvalid), // output wire m_axis_output_tvalid.m_axis_output_tready(rs_enocde_output_tready_reg), // input wire m_axis_output_tready.m_axis_output_tlast(rs_encode_output_tlast) // output wire m_axis_output_tlast );// 通过编码模块输出的valid信号和ready信号来记录输出数据的个数 always(posedge clk)beginif(~rst_n)begindataout_num 6b0;endelse beginif(rs_encode_output_tvalid1b1 rs_enocde_output_tready_reg1b1)begindataout_num dataout_num 6b1;if(dataout_num 6d15)begindataout_num 6b0;endendelse beginendend end// rs 译码过程 // 在编码之后的数据添加一个fifo 方便管理valid信号和ready信号减少耦合同时可以比配位宽 wire fifo_empty; wire fifo_rd_en;wire[3:0] fifo_data; reg fifo_flag; // 这个是用来标致第一次从fifo中读取数据的过程wire [7:0] rs_decode_data_temp; wire [3:0] rs_decode_data; //in wire rs_decode_data_s_ready; wire rs_decode_data_s_valid; reg rs_decode_data_s_valid_reg; // 去掉fifo 输出的一个时钟延迟 reg rs_decode_data_s_tlast_reg; assign fifo_rd_en rs_decode_data_s_ready (!fifo_empty); // out wire rs_decode_data_m_valid; wire rs_decode_data_m_tlast; wire rs_decode_data_m_ready; // stat wire [7:0] rs_decode_stat_data; //wire rs_decode_stat_ready; wire rs_decode_stat_valid;always(posedge clk)beginif(~rst_n)beginfifo_flag 1b0;endelse beginif(fifo_rd_en1b1)beginfifo_flag 1b1;endend endalways(posedge clk)beginif(~rst_n)beginrs_decode_data_s_valid_reg 1b0;endelse beginrs_decode_data_s_valid_reg fifo_rd_en;end endfifo_generator_0 fifo_ins( // 这个输出有1clk延迟.clk(clk), // input wire clk.srst(~rst_n), // input wire srst.din(rs_encode_data[3:0]), // input wire [3 : 0] din.wr_en(rs_encode_output_tvalid), // input wire wr_en.rd_en(fifo_rd_en), // input wire rd_en.dout(fifo_data), // output wire [3 : 0] dout .full(fifo_full), // output wire full.empty(fifo_empty) // output wire empty ); // 输入编码中的有效信号 assign rs_decode_data_s_valid (fifo_flag1b1)?fifo_rd_en:rs_decode_data_s_valid_reg; // 在第一次读取的时候 信号跟随reg信号之后跟随en信号 reg[5:0] decode_num; always(posedge clk)beginif(~rst_n)begindecode_num 6b1;endelse beginif(rs_decode_data_s_valid1b1)begindecode_num decode_num 6b1;if(decode_num 6d14)begindecode_num 6b0;endendend end // 控制tlast信号 always(posedge clk)beginif(~rst_n)beginrs_decode_data_s_tlast_reg 1b0;endelse begin //当解码输入进入的数据为一组时拉高tlast信号if(decode_num 6d14)beginrs_decode_data_s_tlast_reg 1b1;endelse beginrs_decode_data_s_tlast_reg 1b0;endend endrs_decoder_0 rs_decoder_0_ins (.aclk(clk), // input wire aclk.aresetn(rst_n), // input wire aresetn.s_axis_input_tdata(fifo_data), // input wire [7 : 0] s_axis_input_tdata.s_axis_input_tvalid(rs_decode_data_s_valid), // input wire s_axis_input_tvalid.s_axis_input_tlast(rs_decode_data_s_tlast_reg), // input wire s_axis_input_tlast.s_axis_input_tready(rs_decode_data_s_ready), // output wire s_axis_input_tready.m_axis_output_tdata(rs_decode_data_temp), // output wire [7 : 0] m_axis_output_tdata.m_axis_output_tvalid(rs_decode_data_m_valid), // output wire m_axis_output_tvalid.m_axis_output_tready(1b1), // input wire m_axis_output_tready.m_axis_output_tlast(rs_decode_data_m_tlast), // output wire m_axis_output_tlast.m_axis_stat_tdata(rs_decode_stat_data), // output wire [7 : 0] m_axis_stat_tdata.m_axis_stat_tvalid(rs_decode_stat_valid), // output wire m_axis_stat_tvalid.m_axis_stat_tready(1b1) // input wire m_axis_stat_tready );assign rs_decode_data rs_decode_data_temp[3:0];endmodule 4. 仿真测试 测试程序的testbench文件和之前保持一致只需要把实例化的模块名字更改即可。 timescale 1ns / 1ps module rs_tb();reg l_clk; reg rst_n;rs_test rs_test_ins(.clk(l_clk), //时钟.rst_n(rst_n) // 复位 高电平复位); 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然后进入仿真过程对照时序查看结果。 首先看试验大图其中的蓝色线是解码之后的数据从数据结果中可以看出每个数据间隔3正好是编码之前的结果拉开蓝色线就可以看到具体的数值。因为译码也是存在延时的所以看起来数据会滞后蓝色数据线的m_valid信号对应输出数据有效信号。 这里面有需要注意的地方首先看仿真结果的前面部分。 这是fifo_rd_en有效的第一段由于有1个clk的时钟延迟所以把有效信号rs_decode_data_s_valid信号需要延迟一个clk,然后看接下来的fifo_rd_en第二个周期需要把rs_decode_data_s_valid信号和fifo_rd_en信号对齐否则会丢一个数据后面的和第二个周期相同只有第一个需要延迟一个周期这个在程序中通过fifo_flag判断是不是第一个周期。 至此完成了译码的过程。
http://www.huolong8.cn/news/50681/

相关文章:

  • 双滦区seo整站排名没有虚拟主机怎么建网站
  • 唐山哪里有做网站的进入网站wordpress配置
  • dede网站模板页在什么文件夹wordpress 函数 文件
  • 做网站时图片要切片有什么作用专业做网站的人
  • 什么网站可以制作套餐徐州免费建站模板
  • 天津市精神文明建设网站兰州市做网站的企业有哪些
  • 郑州企业网站推广外包wordpress 文章过滤
  • 在电脑上做网站搜索引擎营销的优缺点及案例
  • 网站开发前后端分离要多少钱汽车汽配网站建设
  • 平台网站模板素材基于wordpress个人博客网站论文
  • 网站合同需要注意什么呢湖南seo优化
  • 网站为什么要做seo哪些网站可以做帮助文档
  • 哈尔滨做网站企业东莞有互联网企业吗
  • 泰安网站建设价格厦门网站设计公司找哪家厦门小程序建设
  • 与网站开发相关的书籍wordpress5.2发布
  • 高端设计图网站丹东seo
  • 建设自己公司的网站首页网站优缺点分析
  • 建设银行客户端官方网站如何给wordpress添加关键词描述
  • 广东省路桥建设发展有限公司网站网站开发的重难点
  • 各种网站的区别长沙网站开发湖南微联讯点不错
  • 一个网站多久能做完云南火电建设公司网站
  • 免费企业网站建设word推荐坪地网站建设
  • 网站开发的意义163企业邮箱入口官网
  • 网站建设服务的广告曲阜文化建设示范区网站
  • 和17做网店一样的货源网站免费网页制作工具下载
  • 易企秀+旗下+网站建设国内做跨境电商的平台有哪些
  • wordpress 找站点河北建筑培训网首页
  • 品质网站建设商务网站建设与维护 ppt
  • 网站建设合同标的自己做网站要学什么软件
  • 静态网站开发一体化课程备案的博客网站可以做别的吗