【AXIS】AXI-Stream FIFO设计实现(四)——异步时钟

  前文介绍了几种同步时钟情况下的AXI Stream FIFO实现方式,一般来说,FIFO也需要承担异步时钟域模块间数据传输的功能,本文介绍异步AXIS FIFO的实现方式。

  如前文所说,AXI-Stream FIFO十分类似于FWFT异步FIFO,推荐参考前文FWFT异步FIFO的实现方式【FIFO】Standard / FWFT FIFO设计实现(二)——异步时钟,也可以参考同步AXIS FIFO的实现方式【AXIS】AXI-Stream FIFO设计实现(一)——基本模式。

  对于已经实现好的FWFT FIFO,只进行些许调整,将其写FIFO信号wr_en替换为s_axis_tvalid,将FIFO写满信号wfull替换为s_axis_tready,将读FIFO信号rd_en替换为m_axis_tvalid,将FIFO读空信号rempty替换为m_axis_tready。

`timescale 1ns / 1psmodule async_axis_fifo_tb();localparam TDATA_WIDTH = 4;bit m_clk;bit s_clk;bit   [TDATA_WIDTH - 1 : 0]   m_axis_tdata;bit                           m_axis_tvalid; // wr_enbit                           m_axis_tready; // ~wfullbit   [TDATA_WIDTH - 1 : 0]   s_axis_tdata;  bit                           s_axis_tvalid; // ~remptybit                           s_axis_tready;always #5 m_clk = ~m_clk;always #7 s_clk = ~s_clk;logic [TDATA_WIDTH - 1 : 0] send_queue[$], recv_queue[$];always_ff @(posedge m_clk) beginif (~m_axis_tvalid) begin`ifdef FLOWm_axis_tvalid <= 1;`elsem_axis_tvalid <= $random();`endifm_axis_tdata <= $random();end else if (m_axis_tvalid & m_axis_tready) begin`ifdef FLOWm_axis_tvalid <= 1;`elsem_axis_tvalid <= $random();`endifm_axis_tdata <= $random();endendinitial begin forever beginif (m_axis_tvalid & m_axis_tready) beginsend_queue.push_back(m_axis_tdata);end@(posedge m_clk);endendinitial beginforever beginif (s_axis_tvalid & s_axis_tready) beginrecv_queue.push_back(s_axis_tdata);endif (send_queue.size != 0 && recv_queue.size != 0) beginif (send_queue[0] == recv_queue[0]) beginsend_queue.pop_front();recv_queue.pop_front();end else begin$error();$stop();endend@(posedge s_clk);endendalways_ff @(posedge s_clk) begin`ifdef FLOWs_axis_tready <= 1;`elses_axis_tready <= $random();`endifendlogic wfull, rempty;assign m_axis_tready = ~wfull;assign s_axis_tvalid = ~rempty;async_fifo_huge #(.TDATA_WIDTH    (TDATA_WIDTH    ),.FIFO_DEPTH     (4) // 2 ** n) async_fifo_huge_inst(.m_clk(m_clk),.s_clk(s_clk),.m_axis_tdata(m_axis_tdata),.wr_en(m_axis_tvalid), .wfull(wfull),.s_axis_tdata(s_axis_tdata),  .rempty(rempty), .rd_en(s_axis_tready));
endmodule

  下图展示了通过调整利用FWFT FIFO作为AXI Stream FIFO进行数据传输的仿真波形,其中上半部分为FWFT FIFO,下半部分为AXIS Stream输入激励。

图片

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

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

相关文章

MIPI CSI-2 Low Level Protocol解读

一、Low Level Protocol介绍 LLP 是一种面向字节的基于数据包的协议&#xff0c;支持使用短数据包和长数据包格式传输任意数据。为简单起见&#xff0c;本节中的所有示例均为单通道配置。 LLP特性&#xff1a; 传输任意数据&#xff08;与有效载荷无关&#xff09; 8 位字大…

Chatgpt掘金之旅—有爱AI商业实战篇(二)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、前言&#xff1a; 成为一名商业作者是一个蕴含着无限可能的职业选择。在当下数字化的时代&#xff0c;作家们有着众多的平台可以展示和推广自己的作品。无论您是对写书、文…

MSPF5438数据卫星透传

最近在网上找了个项目来做&#xff0c;实现功能简单描述就是通过Lora模块E30-170T27D接收上位机发送的数据包&#xff0c;并对接收数据包进行正确性校验&#xff0c;若数据包校验成功则将其储存在W25Q125FV 中&#xff0c;待上位机发送数据包传输完毕指令后&#xff0c;单片机启…

Docker配置Mysql

1.首页搜索mysql镜像 2.选择对应版本的MySQL&#xff0c;点击pull 3.pull完成以后&#xff0c;点击images&#xff0c;这里可以看到刚刚pull完成的mysql版本 4.打开命令界面&#xff0c;运行命令 docker images ,查看当前已经pull的images 5.运行命令设置mysql docker run -it…

【有芯职说】数字芯片BES工程师

一、 数字芯片BES工程师简介 今天来聊聊数字芯片BES工程师&#xff0c;其中BES是Back End Support的缩写&#xff0c;就是后端支持的意思。其实这个岗位是数字IC前端设计和数字IC后端设计之间的一座桥&#xff0c;完成从寄存器传输级设计到具体工艺的mapping和实现。这个岗位在…

Linux文件(系统)IO(含动静态库的链接操作)

文章目录 Linux文件&#xff08;系统&#xff09;IO&#xff08;含动静态库的链接操作&#xff09;1、C语言文件IO操作2、三个数据流stdin、stdout、stderr3、系统文件IO3.1、相关系统调用接口的使用3.2、文件描述符fd3.3、文件描述符的分配规则3.3、重定向3.4、自制shell加入重…

HCIP【GRE VPN、MGRE VPN与PPP验证综合实验】

目录 实验要求&#xff1a; 实验拓扑图&#xff1a; 实验思路&#xff1a; 实验步骤&#xff1a; 一、配IP地址 &#xff08;1&#xff09;配置所有设备接口的IP地址&#xff1a; &#xff08;2&#xff09;配置私网与公网接口的缺省路由使得公网可通&#xff1a; 二、P…

前端面试题---->JavaScript

const声明的对象属性和数组的值可以被修改吗&#xff1f;为什么 原因&#xff1a;当使用const声明一个对象或数组时&#xff0c;实际上是保证了对象或数组的引用不会被修改&#xff0c;但对象或数组本身的属性或元素是可以被修改的。这是因为const只能保证指向的内存地址不变&a…

操作教程|在MeterSphere中通过SSH登录服务器的两种方法

MeterSphere开源持续测试平台拥有非常强大的插件集成机制&#xff0c;用户可以通过插件实现平台能力的拓展&#xff0c;借助插件或脚本实现多种功能。在测试过程中&#xff0c;测试人员有时需要通过SSH协议登录至服务器&#xff0c;以获取某些配置文件和日志文件&#xff0c;或…

ES学习日记(四)-------插件head安装和一些配套插件下载

前言 接上节,第三方插件选择了时间久,功能丰富,长得丑的head,head 插件在ES 5版本以前开箱即用非常简单&#xff0c;ES 5版本以后需要运行在node环境下&#xff0c;所以我们要先准备一下环境 一.安装Git yum -y install git 二.安装node 安装包位置node for linux下载 解压…

CaT论文翻译

CaT: Balanced Continual Graph Learning with Graph Condensation CaT&#xff1a;通过图压缩实现平衡的连续图学习 Abstract 持续图学习(CGL)的目的是通过以流方式输入图数据来持续更新图模型。由于模型在使用新数据进行训练时很容易忘记以前学到的知识&#xff0c;因此灾…

什么是检索增强生成(Retrieval-Augmented Generation,RAG)

什么是RAG&#xff1f; 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;&#xff0c;是指为大模型提供外部知识源的概念。能够让大模型生成准确且符合上下文的答案&#xff0c;同时能够减少模型幻觉。 用最通俗的语言描述&#xff1a;在已…

向量点乘有哪些作用呢

如下&#xff1a; 1.找到两个向量之间的夹角(不用多说) 2.求一个向量投影在另一个向量的投影&#xff1a; 我们把图中b的在a上的投影向量称作b1吧&#xff0c;因为b1就在a上&#xff0c;所以只需要求出b1的大小&#xff0c;然后乘以a的单位向量&#xff0c;我们就得到向量b1了…

Unity 渲染

渲染的三个阶段 1&#xff1a;应用阶段 1.1 数据的准备 遮挡剔除&#xff0c;层级剔除。 渲染顺序&#xff0c;UI在Herachy窗口按照层级渲染&#xff0c;其余物体由大概按照先近后远。 打包渲染数据发送给显存&#xff0c;主要包括有模型信息&#xff0c;变换矩阵&#xff0c…

归并排序---分治法

1、算法的概念 归并排序&#xff1a;是创建在归并操作上的一种有效的排序算法。算法是采用分治法的一个非常典型的应用&#xff0c;且各层分治递归可以同时进行。归并排序的思路简单&#xff0c;速度仅次于快速排序&#xff0c;为稳定排序算法&#xff0c;一般用于对总体无序&…

MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索

宗喆和张正分别给我们带了 KCL 相关的最新进展&#xff0c;由蚂蚁集团开发的 Rust 编写的开源 DSL&#xff0c;目标是优化云原生策略配置和用户体验。它通过引入动态配置管理、配置校验和基础设施抽象等核心概念&#xff0c;解决开发者认知负担、配置膨胀和标准化工具缺乏的问题…

[Windows]服务注册工具(nssm)

文章目录 官网下载地址百度云下载地址NSSM常用命令 使用场景&#xff1a;例如现在我们想开启自动启动一个Java服务,nginx,node等。 官网下载地址 https://nssm.cc/download 百度云下载地址 链接&#xff1a;https://pan.baidu.com/s/111fkBWIS7CTlWIj80Kc8Sg?pwdanan 提取码…

python_2

文章目录 题目一运行结果 题目二运行结果 题目一 代码如下&#xff1a; def merge():ls_0 input("输入一个列表(空格隔开)&#xff1a;").split()ls_1 []for i in ls_0:ls_1.append(i)ls_1.sort()if ls_0 ls_1:print("这是一个有序列表")else:print(&qu…

[Android]模拟器登录Google Play失败

问题&#xff1a; 模拟器登录Google Play失败&#xff0c;提示couldnt sign in there was a problem communicating with google servers. try again later. 原因&#xff1a; 原因是模拟器没有连接到互联网&#xff0c;打开模拟器中Google浏览器进行搜索一样不行。 解决&am…

数据结构--循环链表(C语言实现)

一.循环链表的设计 typedef struct CNode{ int data; struct CNode* next; }CNode ,*CList; 2.循环链表的示意图: 3.循环链表和单链表的区别: 唯一区别,没有空指针,尾节点的后继为头,为循环之意. 二.循环链表的实现 //初始化return true; }//返回key的前驱地址&#xff0c;如果…