Aurora8b10b(2)上板验证

文章目录

  • 前言
  • 一、AXI_Stream数据产生模块
  • 二、上板效果
  • 总结

前言

上一篇内容我们已经详细介绍了基于aurora8b10b IP核的设计,本文将基于此进一步完善并且进行上板验证。
设计思路及代码思路参考FPGA奇哥系列网课

一、AXI_Stream数据产生模块

在这里插入图片描述
AXIS协议是非常简单的,看过之前的AXI_FULL协议应该会很容易理解。

该模块有以下需要注意的点:

  1. 主机VALID信号一定是要主动拉高的,不可以以从机READY信号作为拉高判断的条件。
  2. 对于last信号的产生和计数器的清零,一定是要在握手成功的前提下进行判断,因为要避免从机莫名其妙拉低的情况,例如,我们要发送100个数据,计数器需要在99时候清零,如果READY在98的时候是高,那么计数器会顺利计数到99,而READY恰好99时候变为为0,如果不加w_active这个握手成功的限制条件,计数器会在此时清零,而我们第100个数据也就丢失了,对于LAST信号更加严重,因为从机压根就接收不到LAST信号了。
else if(w_active && r_send_cnt == P_SEND_LEN - 1)r_send_cnt <= 'd0;
else if(w_active && r_send_cnt == P_SEND_LEN - 2)rm_axi_tx_tlast <= 'd1;
module user_data_gen(input               i_clk                       ,input               i_rst                       ,output [31:0]       m_axi_tx_tdata              ,output [3 :0]       m_axi_tx_tkeep              ,output              m_axi_tx_tlast              ,output              m_axi_tx_tvalid             ,input               m_axi_tx_tready             ,input  [31:0]       s_axi_rx_tdata              ,input  [3 :0]       s_axi_rx_tkeep              ,input               s_axi_rx_tlast              ,input               s_axi_rx_tvalid             
);localparam              P_SEND_LEN = 100            ;reg  [31:0]             rm_axi_tx_tdata             ;
reg  [3 :0]             rm_axi_tx_tkeep             ;
reg                     rm_axi_tx_tlast             ;
reg                     rm_axi_tx_tvalid            ;
reg  [15:0]             r_cnt                       ;
reg  [15:0]             r_send_cnt                  ;wire                    w_start                     ;
wire                    w_active                    ;assign w_start = r_cnt == 100                      ;
assign w_active = m_axi_tx_tvalid & m_axi_tx_tready ;
assign m_axi_tx_tdata  = rm_axi_tx_tdata            ;
assign m_axi_tx_tkeep  = rm_axi_tx_tkeep            ;
assign m_axi_tx_tlast  = rm_axi_tx_tlast            ;
assign m_axi_tx_tvalid = rm_axi_tx_tvalid           ;always@(posedge i_clk,posedge i_rst)
beginif(i_rst)r_cnt <= 'd0;else if(rm_axi_tx_tlast)r_cnt <= 'd0;else if(r_cnt == 100)r_cnt <= r_cnt;else r_cnt <= r_cnt + 1;endalways@(posedge i_clk,posedge i_rst)
beginif(i_rst)r_send_cnt <= 'd0;else if(w_active && r_send_cnt == P_SEND_LEN - 1)r_send_cnt <= 'd0;else if(w_active)r_send_cnt <= r_send_cnt + 1;elser_send_cnt <= r_send_cnt;
endalways@(posedge i_clk,posedge i_rst)
beginif(i_rst)rm_axi_tx_tvalid <= 'd0;else if(w_active && r_send_cnt == P_SEND_LEN - 1)rm_axi_tx_tvalid <= 'd0;else if(w_start)rm_axi_tx_tvalid <= 'd1;else rm_axi_tx_tvalid <= rm_axi_tx_tvalid;
endalways@(posedge i_clk,posedge i_rst)
beginif(i_rst)rm_axi_tx_tlast <= 'd0;else if(w_active && r_send_cnt == P_SEND_LEN - 2)rm_axi_tx_tlast <= 'd1;else    rm_axi_tx_tlast <= 'd0;
endalways@(posedge i_clk,posedge i_rst)
beginif(i_rst)rm_axi_tx_tdata <= 'd0;else if(rm_axi_tx_tlast)rm_axi_tx_tdata <= 'd0;else if(w_active)rm_axi_tx_tdata <= rm_axi_tx_tdata + 1;else rm_axi_tx_tdata <= rm_axi_tx_tdata;
endalways@(posedge i_clk,posedge i_rst)
begin   if(i_rst)rm_axi_tx_tkeep <= 4'b1111;else rm_axi_tx_tkeep <= 4'b1111;
endendmodule

二、上板效果

这就没啥好说的了,一收一发,没有任何问题。
在这里插入图片描述
在这里插入图片描述

总结

完整工程可参考:https://github.com/shun6-6/AURORA8B10B

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588346.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java零基础入门到精通_Day 4

方法的重载 就是同一个类中的相同方法名的多个方法&#xff0c;但是他们的参数不同&#xff0c;类型不同或者参数个数不同。 &#xff08;与返回值无关&#xff09; package Base_One;public class Base_005 {public static void main(String[] args) {// Main method logic …

C++读取.bin二进制文件

C读取.bin二进制文件 在C中&#xff0c;可以使用文件输入/输出流来进行二进制文件的读写操作&#xff0c;方便数据的保存和读写。 //C读取bin二进制文件 int read_bin() {std::ifstream file("data_100.bin", std::ios::in | std::ios::binary);if (file) {// 按照…

plumelog日志查询使用指南

一、日志查询 字段说明 内容语法 1.中文需要用双引号包含 例如:"异常",默认会被按照单字体分割检索 2.多个检索条件可以用 AND OR NOT 来组合查询 例如 "异常" AND "内容" 3.单个不可分割单词可以用*开头或者结尾进行模糊匹配 例如 *NullPoi…

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时&#xff0c;terminal窗口太小怎么办&#xff1f;看起来非常累眼睛&#xff0c;本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求&#xff1a; 通过上图可知&#xff0c;UART默认使用的是xterm。因此&#xff0c;我们需要修改xterm的默认字体设…

实景三维在数字乡村建设中的重要作用

随着科技的飞速发展&#xff0c;数字乡村建设已成为推动乡村振兴、实现农村现代化的重要途径。实景三维技术作为数字乡村建设的重要支撑&#xff0c;正逐渐在各个领域发挥着不可或缺的作用。本文将从实景三维技术在数字乡村中的应用场景、优势及未来展望等方面进行探讨&#xf…

Brain.js 的力量:构建多样化的人工智能应用程序

机器学习&#xff08;ML&#xff09;是人工智能 (AI) 的一种形式&#xff0c;旨在构建可以从处理的数据中学习或使用数据更好地执行的系统。人工智能是模仿人类智能的系统或机器的总称。 机器学习&#xff08;ML&#xff09;与复杂的数学纠缠在一起&#xff0c;让大多数初学者…

时序分解 | Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序…

盘点中国优秀付费资源站WordPress主题

中国优秀的付费资源站WordPress主题&#xff0c;它们专注于资源管理和分享&#xff0c;提供了丰富的功能和用户体验&#xff1a; 资源宝&#xff08;ziyuanbao&#xff09;&#xff1a;这是一款功能强大的资源站主题&#xff0c;支持多种资源类型的上传、分类和展示&#xff0…

html引入json文本测试数据

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 复现bug时&#xff0c;可以这样给前端准备测试数据。 dayData.json存放测试数据&#xff0c;只需声明为变量即可 这里不用管ide中的报错。 <!DOCTYPE html> <html lang"en">…

QT背景介绍

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、QT背景 1.1什么是QT 1.2QT的发展历史 1.3什么是框架、库 1.4QT支持的平台 1.5QT的优点 1.6QT的…

软考考哪个好?软考中级到高级方向该如何计划

刚接触软考的朋友可能对软考的科目选择比较迷茫&#xff0c;不知道自己该怎么选方向&#xff0c;怎么选级别&#xff0c;这属于再正常不过的事情了&#xff0c;毕竟谁看到这些都可能有些迷茫&#xff0c;要理清自己的选择还是要从自身的几个方面开始的。 软考的考试专业类别就…