FPGA基本IP核之FIFO(异步)

2023-11-14

异步FIFO

创建新的异步FIFO IP核,可以看出相比于同步FIFO这里做了写和读两侧并且各自用一个时钟

一般选用二级同步:

然后勾选读和写两侧需要用到的三种信号

选择添加额外的MSB,由于分成两侧时,中间不知道数据是否写满了或者写空了,添加此信号作为保护数据的作用,添加后位宽由7位变成了8位,多出的这一位用来判断是否写满;勾选异步清零。

模式选择正常模式:

生成文件:

代码

顶层文件

这里需要用到两个时钟,写时钟100M,读时钟50M,之前的博客里有关于PLL的讲解。

module test_ip (
    input          rst_n,
    input          clk,  

    input  [7:0]       data   ,
    input              rdreq  ,
    input              wrreq  ,
    output [7:0]       q           

);

    wire        rdempty   ;
    wire        rdfull    ;
    wire [7:0]  rdusedw   ;
    wire        wrempty   ;
    wire        wrfull    ;
    wire [7:0]  wrusedw   ;

    wire        c0        ;//25M
    wire        c1        ;//100M  90°
    wire        c2        ;//100M
    wire        c3        ;//25M  25%
    wire        c4        ;//70M
    wire        locked    ;
    wire        inclk     ;

pll pll_inst (
   .areset ( ~rst_n ),//根据cyclone iv手册,pll复位高电平有效,而设计的rst_n为低电平有效
   .inclk0 ( clk    ),
   .c0     ( c0     ),//25M
   .c1     ( c1     ),//100M  90°
   .c2     ( c2     ),//100M
   .c3     ( c3     ),//25M  25%
   .c4     ( c4     ),//70M
   .locked ( locked )
);

wire          wrclk    ;
wire          rdclk    ;

assign  wrclk  = c2  ;//100M
assign  rdclk  = clk ;//50M


a_fifo    a_fifo_inst (
    .aclr           ( ~rst_n   ),
    .data           ( data     ),
    .rdclk          ( rdclk    ),
    .rdreq          ( rdreq    ),
    .wrclk          ( wrclk    ),
    .wrreq          ( wrreq    ),
    .q              ( q        ),
    .rdempty        ( rdempty  ),
    .rdfull         ( rdfull   ),
    .rdusedw        ( rdusedw  ),
    .wrempty        ( wrempty  ),
    .wrfull         ( wrfull   ),
    .wrusedw        ( wrusedw  )
    );

endmodule

测试文件

`timescale 1ns/1ps
module test_tb();
    reg               rst_n       ; 
    reg               clk         ; 

    reg   [7:0]       data     ;  
    reg               rdreq    ; 
    reg               wrreq    ;
    wire  [7:0]       q        ;

    parameter CYCLE = 20;

test_ip u_test_ip (
    .rst_n (rst_n  ),  
    .clk   (clk    ),
    .data  (data   ),  
    .rdreq (rdreq  ),  
    .wrreq (wrreq  ),  
    .q     (q      )         
);

integer  i;

initial begin
    clk = 1'b1;

    rst_n = 1'b1 ;
    #(2*CYCLE);
    rst_n = 1'b0;
    data  = 0;
    rdreq = 0;
    wrreq = 0;

    rst_n = 1'b1;

    #(10*CYCLE);

    //读写

for (i = 0;i<16 ;i=i+1 ) begin//写数据
    wrreq = 1'b1;
    data  = {$random};
    #(CYCLE/2);//这步延时不能省,因为for循环是执行很快的,否则在modelsim中观察不到
end
wrreq = 1'b0;
#40;
for (i = 0;i<16 ;i=i+1 ) begin//读数据
    rdreq = 1'b1;
    #(CYCLE/2);
end
wrreq = 1'b0;
#(CYCLE);

$stop;
end

always #(CYCLE/2)  clk = ~clk ;//50M
endmodule

仿真分析

全局:

写数据请求拉高,写入第一个数据36,在下一个写时钟的上升沿对应的读数据空标志信号拉低,在下一个时钟上升沿检测到剩余可用数据量为1。

而读时钟信号在这个上升沿才检测到写请求空信号拉低。

由于在设置里选择的二级同步,从检测到写空信号拉低时,隔了两个读时钟才拉低读数据空信号。

而对于读数据的可用数据量,由于延时,在空信号拉低后的下一个上升沿检测到可用数据量,且为二级同步,在最开始写可用数据量为2的时候被检测,所以读可用数据量分别呈现为2,4,6...

往后分析,for循环16层,刚好写入16哥数据。当读请求拉高时,下一个时钟上升沿读出第一个数据36,后面依次读。

读完返回写侧,刚好是同步的,因为读写时钟是两倍关系,读一个时钟周期刚好可以采到两次

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA基本IP核之FIFO(异步) 的相关文章

  • FPGA_时钟显示(时钟可调)

    1 实验说明 在数码管显示数据的基础上 让六位数码管显示数字时钟 并且通过按键可以对时间进行修改 实验目标 六位数码管分别显示时间的时分秒 且通过按键可实现加减调整时间及清零功能 key1 切换键 选择待调整的时间单位 时 分 秒 key2
  • 【路径规划】基于A*算法和Dijkstra算法的路径规划(Python代码实现)

    个人主页 研学社的博客 欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码实现 1 概述 Dijkstr
  • 【FPGA】面试问题及答案整理合集

    面试问题及答案整理合集 1 硬件描述语言和软件编程语言的区别 2 FPGA选型问题 3 建立时间和保持时间问题 3 亚稳态问题 4 竞争和冒险问题 5 乒乓操作问题 6 同步和异步逻辑电路 7 同步复位和异步复位 8 MOORE 与 MEE
  • docker创建CentOS云主机(docker实践)

    基于Ubuntu操作系统 从零开始构建一套docker虚拟化平台 docker的产物为 容器 docker构建容器 Nginx WEB docker启动虚拟机 创建CentOS云主机 同样是容器 对之前内容的总结熟悉 要求 CentOS 7
  • C4D和3dmax有什么区别?

    很多小伙伴都知道3d Max和C4D都是一款三维制作软件 可是 很少见到游戏公司使用C4D软件制作模型呢 反而设计师们用的最多的就是3dmax 而C4D往往用于广告行业 那么C4D和3d max的区别是什么呢 一 性质不同 1 3Dmax
  • 【DDR3 控制器设计】(3)DDR3 的写操作设计

    写在前面 本系列为 DDR3 控制器设计总结 此系列包含 DDR3 控制器相关设计 认识 MIG 初始化 读写操作 FIFO 接口等 通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO 接口设计等 附上汇总博客直达链接 DD
  • 【Xilinx Vivado时序分析/约束系列4】FPGA开发时序分析/约束-实验工程上手实操

    目录 建立工程 添加顶层 模块1 模块2 添加约束文件 编辑时钟约束 打开布线设计 代码代表的含义 时序报告 进行时序分析 Summary 包含了汇总的信息量 Source Clock Path 这部分是表示Tclk1的延时细节 Data
  • BUCK电路分析(二)

    BUCK电路分析 二 PSIM仿真同步BUCK电路 在上片文章中 初步的分析了BUCK电路的工作原理 本章使用PSIM软件仿真BUCK电路 观察分析BUCK电路器件关键波形 图1是同步BUCK电路图 开关频率设置为200K 固定占空比 在仿
  • Allegro PCB封装焊盘介绍(一)

    PCB封装焊盘结构 焊盘结构如图 1所示 图 1焊盘结构 锡膏层 SMT刷锡膏贴片用 一般贴片焊盘要选 跟焊盘等大 阻焊层 把焊盘裸露出来 不开的话 焊盘会被油墨盖住 这样无法焊接哦 一般比焊盘大0 1mm 顶层 底层焊盘 实际焊盘大小 电
  • 【计算机基础

    定点数的表示 定点数 小数点的位置固定 例 996 007 常规计数 浮点数 小数点的位置不固定 例 9 96007 10 2 科学计数法 二进制的定点数 浮点数也类似 无符号数 整个机器字长的全部二进制位均为数值位 没有符号位 相当于数的
  • FileZilla尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败。

    考虑是否在ubuntu下开启了FTP服务 执行以下命令开启 sudo apt get install vsftpd 不能远程登陆 mobaxterm等 unbutu 考虑是否开启了SSH 使用以下命令开启 sudo apt get inst
  • 筛选sql中一列的重复数据及重复次数

    SELECT PROJECT CODE COUNT PROJECT CODE FROM meng project info GROUP BY PROJECT CODE HAVING COUNT PROJECT CODE gt 1 结果
  • ALLEGRO等长时如何将PIN DELAY和VIA长度计算在内

    在PCB设计中 对于时序要求严格的线路 Via和IC pin delay的长度必须得到重视 通过下面的操作 可将Via和Pin delay加入到线路长度的计算中 1st 计算Pin delay 打开Constraint Manager 选择
  • // SPDX-License-Identifier: MIT

    上述声明是指明你写的智能合约采用什么样的对外开放标准 该标准规定了别人是否拥有各种使用权利 其中 MIT 标准说明其他人可以随便用该源码 但出问题不负责
  • 4大主流CPU处理器技术架构

    推荐阅读 浅谈linux 内核网络 sk buff 之克隆与复制 深入linux内核架构 进程 线程 了解Docker 依赖的linux内核技术 导读 RISC 精简指令集计算机 是一种执行较少类型计算机指令的微处理器 起源于80年代的MI
  • 深度学习模型参数量/计算量(附计算代码)

    参考 https mp weixin qq com s biz MzI4MDYzNzg4Mw mid 2247546551 idx 2 sn f198b6365e11f0a18832ff1203302632 chksm ebb70e63dc
  • 【FMC141】基于VITA57.4标准的4通道2.8GSPS 16位DA播放子卡(2片DAC39J84)

    FMC141是一款基于VITA57 4标准的4通道2 8GSPS 2 5GSPS 1 6GSPS采样率16位DA播放FMC子卡 该板卡为FMC 标准 符合VITA57 4与VITA57 1规范 16通道的JESD204B接口通过FMC 连接
  • 硬核 | 从零制作一个激光雷达需要多久?

    编辑 ADS智库 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 硬件交流 技术交流群 本文只做学术分享 如有侵权 联系删文 激光雷达 LiDAR 是激光探测及测距系统的简称 目前广泛应用在无
  • Vivado ILA的debug信息保存与读取

    保存 write hw ila data D Project FPGA ILA Debug Data 202401041115 ila upload hw ila data hw ila 1 读取 display hw ila data r
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步

随机推荐

  • python爬取邮件内容_python简单爬虫,抓取邮箱

    最近 老师给了一个练习是 实现一个爬虫 就爬大概100个网页 匹配出邮箱 于是 我花了几天时间 熟悉熟悉了python 就有了下面这个超级简单的爬虫程序 各种毛病 这里先说明一下 python库的安装 因为我在这上面浪费了不少时间 首先是p
  • mongodb连接报错:connect@src/mongo/shell/mongo.js:374:17

    mongodb部署在云服务器上一直可以用 今天重启了一下 不知道为什么一直连接不上 就很慌 报的这个错误代码 去百度了半天也没找到一样的情况 直接我使用了net start mongodb 整个人都傻了 mongodb需要起服务的 起了以后
  • Android LocalBroadCastManager 使用总结

    1 概述 在Android中 BroadCast是一种广泛运用的在应用程序之间传输信息的机制 我们拿广播电台来打比方 我们平常使用收音机是这样的 许多不同的广播电台通过特定的频率来发送他们的内容 而我们用户只需要将频率调成和广播电台的一样就
  • Entity Framework Core系列教程-22-跟踪实体图(TrackGraph)

    Entity Framework Core中的ChangeTracker TrackGraph 在上一章中 您了解了不同的方法为Entity Framework Core 2中的实体图的每个实体设置不同的EntityState 在这里 您将
  • 字节序转换函数

    由于主机的千差万别 主机的字节序不能做到统一 但是对于网络上传输的变量 它们的值必须有一个统一的表示方法 网络字节序是指多字节变量在网络传输时的表示方法 网络字节序采用大端字节序的表示方法 所以小端字节序的系统通过网络传输变量的时候需要进行
  • vuex刷新后数据不会保存??解决办法在此

    我们在写vue项目的时候 经常要用到vuex作为内存来储存 但是我们存放在vuex中的数据 用户数据 当前页面的数据等等 在刷新后就会丢失 那么如何解决呢 超级简单 1 安装vuex persistedstate npm install s
  • STM32串口USART1中断接收和中断发送

    先贴出中断函数 plain view plain copy void USART1 IRQHandler void IF USART GetiTStatus USART1 USART IT RXNE RESET USART ClearITP
  • vue 实现分享功能

    今天给大家分享一个vue的分享插件vshare 实现如下 1 开发环境 vue element 2 电脑系统 windows10专业版 3 组件安装 通过命令在控制台输入 npm install vshare save 4 组件导入 在ma
  • 【刷题】蓝桥杯

    蓝桥杯2023年第十四届省赛真题 平方差 C语言网 dotcpp com 初步想法 x y2 z2 y z y z 即x a b a y z b y z 2y a b 即a b是2的倍数就好了 即x存在两个因数之和为偶数就能满足条件 但时间
  • 抠矩形图程序

    根据抠图位置的起始点坐标和长宽进行矩形抠图 示例代码 原图大小为640 480 每个像素占16bit 起始点坐标 234 124 抠图长宽分别为238 282 include
  • mysql java测试_JAVA 访问MySQL数据库(使用方法及测试)

    说明 本文使用的JDBC框架是基于Java SE 1 8 MySQL Eclipse 工具下载 MySQL V5 5 x64 64位 MySQL V5 5 x86 32位 要根据你电脑的情况选择相应的MySQL版本 我的电脑是64位 所以本
  • 【牛客SQL】SQL17 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

    题目描述 描述 有一个薪水表salaries简况如下 请你获取薪水第二多的员工的emp no以及其对应的薪水salary 示例1 输入 drop table if exists salaries CREATE TABLE salaries
  • Matlab批量拟合曲线并绘制在一张图上

    文章目录 简单的拟合 批量拟合并呈现在一张图上 最终结果与完整代码 简单的拟合 在命令行输入 cftool 可以启动工具箱 1 在 选择数据 中导入数据 2 选择拟合方法 matlab提供的方法或者你自己定义的函数 matlab提供的方法
  • 数据结构——非线性结构(树与二叉树)

    文章目录 一 非线性结构的概述 二 树的基本概念 1 树的定义 2 专业术语 3 树的性质 三 树的分类 1 一般树 2 二叉树 是有序树 2 1 概念 2 2 分类 1 一般二叉树 2 满二叉树 3 完全二叉树 2 3 二叉树的性质 2
  • 【西南交大电子实习】用ESP32和HX711实现的称重计/电子秤的Arduino代码

    参考 https randomnerdtutorials com esp32 load cell hx711 7月12日 Update 修改为克g 盎司oz 克拉ct之间的切换 增加计数功能版本代码 需要安装的arduino库 Adafru
  • JS变量的使用【弹出输入框,提示用户名输入姓名;弹出一个对话框,输出用户刚才输入的姓名】

    一 代码 二 结果显示 1 输入名字 2 输出名字 三 补充变量 1 变量只声明不赋值 输出结果是undefined 2 变量不声明不赋值 直接使用某个变量会报错 3 不声明直接赋值使用 也可使用 4 尽量不要用name作为变量名
  • 我玩了玩chatGPT,她确实NB!

    大家好 我是北妈 0 如果这几天你不知道一个叫chatGPT的东西 那说明你网感真不太好了 或者说你过的很幸福 完全不需要关注网络世界的新动向 因为毫不夸张地说 北妈个人未来可以预见的是 普通互联网从业人士已经赶不上时代趋势 以后如果地球没
  • Spring Source Tools安装Virgo插件

    1 STS 3 7 4 安装Virgo插件失败 需要先安装 先下载一个STS IDE 地址 http spring io tools sts all 然而在STS中添加Virgo插件 如果你直接在Install new software中输
  • mysql 1054错误 "Unknown column 'xxx' in 'field list'"

    出现问题的代码如下 s 测试 sql INSERT INTO ffff ID VALUES s s try cursor execute sql db commit print 写入成功 except Exception as e prin
  • FPGA基本IP核之FIFO(异步)

    异步FIFO 创建新的异步FIFO IP核 可以看出相比于同步FIFO这里做了写和读两侧并且各自用一个时钟 一般选用二级同步 然后勾选读和写两侧需要用到的三种信号 选择添加额外的MSB 由于分成两侧时 中间不知道数据是否写满了或者写空了 添