专栏首页根究FPGA手撕distributed ram类型同步FIFO

手撕distributed ram类型同步FIFO

同步fifo设计的核心在于full与empty信号的控制,今天看网上发布的部分verilog代码,虽然可以完成读写操作,但是存在部分问题,就是最后一个数据的读取问题,该问题的导致是因为full与empty信号的控制失误。

Target

设计一个小型distributed FIFO(数据位宽8,地址位宽4,深度16),类型为FWFT(即读数据与读取信号同周期输出),该FIFO使用FPGA内部的LUT资源,不使用FPGA内部的Block memory资源(因为比较小,所以不使用容量较大的BRAM)。

此外,为了练习VCS、VERDI软件操作,熟悉波形dump、Coverage check,对代码进行检测。

对代码进行波形加载、对覆盖率进行检测,使用Verdi进行debug

DVE记录波形

在编译时打开vcdpluson选项($vcdpluson()),在编译脚本中设置生成的vpd文件名。

vpd是Synopsys公司VCS DVE支持的波形文件,可以使用$vcdpluson()产生。

在指令中设置生成的vpd文件名:

VPD_NAME=+vpdname+${OUTPUT}.vpd

在编译时打开-debug_all选项,同时打开VPD_NAME开关,存储编译生成的.vpd波形文件,其实此时生成的.vpd文件仅为一个空文件。

在运行仿真即运行生成的二进制可执行文件时,打开VPD_NAME选项,此时生成的.vpd文件中包含波形信息。

打开vpd文件有两种方式:

第一种:先打开dve(dve &),之后在dve中打开.vpd文件

第二种:直接打开,dve -vpd ${OUTPUT}.vpd &

覆盖率检测

代码质量的标准,在编译时打开行、状态、条件、翻转、分支统计选项,并设置保存覆盖率统计文件的文件夹,还可以设置包含覆盖覆盖率信息的文件名:

CM=-cmline+fsm+cond+tgl+tgl
CM_DIR=-cm_dir{OUTPUT}.vdb
CM_NAME=-cm_nameBaseFPGA

上述语句分别设置覆盖率文件的统计信息、文件目录、文件名

在编译和运行时打开上述选项,之后通过DVE查看覆盖率信息:

dve -covdir{OUTPUT}.vdb &

Verdi波形加载

verdi波形加载需要使用.fsdb文件,生成.fsdb文件有两种方式.

一种是在.v文件中嵌入函数:

$fsdbDumpfile(“xxx.fsdb”);  //指定生成的fsdb文件名字
$fsdbDumpvars(0,top);         //指定Dump波形层次,需要注意top没有.v后缀

另一种方式是调用-ucil/tcl接口,在脚本中进行设置

在编译时打开Verdi偏移选项,在仿真时调用ucli接口对波形进行Dump。

需要注意的是在仿真时需要设置+fsdb+autoflush即自动将波形转存到.fsdb文件中。

本文分享自微信公众号 - 根究FPGA(gh_08b5d93f8fa5),作者:叫什么好呢啊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Block RAM与Distributed RAM

    Block RAM与Distributed RAM,简称为BRAM与DRAM, 要搞清楚两者的区别首先要了解FPGA的结构:

    根究FPGA
  • FPGA基础知识极简教程(4)从FIFO设计讲起之异步FIFO篇

    一开始是想既然是极简教程,就应该只给出FIFO的概念,没想到还是给出了同步以及异步FIFO的设计,要不然总感觉内容不完整,也好,自己设计的FIFO模块不用去担心...

    Reborn Lee
  • FPGA设计心得(11)关于FIFO IP核使用的一点注意事项

    FIFO?还是FIFO IP核?这也需要写总结吗?太容易了吧。如果我是一个正在处于面试找工作中的年轻人,肯定关注的是如何手撕FIFO,这也是当时校招时候干过的事...

    Reborn Lee
  • 从 IP 开始,学习数字逻辑:BRAM 篇(上)

    RAM -> Ramdom Access Memory ,随机存取存储器。何为随机存取。举个不准确的例子:和上篇文章中的 FIFO 进行对比。对于 FI...

    碎碎思
  • 从 IP 开始,学习数字逻辑:FIFO 篇(上)

    使用 ip 对于数字逻辑方面的工作来说,是非常正常的,基础的 ip 之于数字逻辑设计,与与非门相比大概只是设计层次上的差别。更何况对于 SoC 公司来说...

    碎碎思
  • 为什么推荐使用XPM?

      首先,什么是XPM?可能很多人没听过也没用过,它的全称是Xilinx Parameterized Macros,也就是Xilinx的参数化的宏,跟原语的例化...

    猫叔Rex
  • 为什么要用XPM_MEMORY

    存储单元在FPGA设计中几乎是不可或缺的。无论是单端口(SP)、简单双端口(SDP)或真双端口(TDP),也无论是采用BlockRAM或分布式RAM(Distr...

    Lauren的FPGA
  • FPGA逻辑设计回顾(11)FPGA以及PC中的RAM与ROM

    DDR也是计算机中的元素,当然在我们的FPGA中也广泛使用,在科普了它们的渊源,它们的基础知识后,我们便可以接着讲它在FPGA中的应用,它的使用方式,乃至它的设...

    Reborn Lee
  • FPGA的设计艺术(1)FPGA的硬件架构

    本文首发:FPGA的设计艺术(1)FPGA的硬件架构[1]FPGA是一个很神奇的器件,工程师可以在上面做游戏或者说工程师每天都在上面做游戏,通过搭积木的方式,还...

    Reborn Lee
  • Xilinx FPGA底层资源介绍

    XILINX FPGA 芯片整体架构如下所示,整个芯片是以BANK进行划分的,不同的工艺、器件速度和对应的时钟具有不同的BANK数量(下面截图是以K7325tf...

    瓜大三哥
  • FPGA逻辑设计回顾(6)多比特信号的CDC处理方式之异步FIFO

    异步FIFO是处理多比特信号跨时钟域的最常用方法,简单来说,异步FIFO是双口RAM的一个封装而已,其存储容器本质上还是一个RAM,只不过对其添加了某些控制,使...

    Reborn Lee
  • IP CORE 之 FIFO 设计- ISE 操作工具

    本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小...

    FPGA技术江湖
  • CDC跨时钟域处理及相应的时序约束【set_clock_groups】【set_max_delay】【FPGA探索者】

    CDC(Clock Domain Conversion)跨时钟域分单bit和多bit传输,其中:

    FPGA探索者
  • FPGA设计原则总结

    这里的面积指一个设计消耗 FPGA/CPLD 的逻辑资源的数量,对于 FPGA 可以用消耗的 FF(触发器)和 LUT(查找表)来衡量,更一般的衡量方式可以用设...

    碎碎思
  • Vivado综合属性:RAM_STYLE和ROM_STYLE

    在Xilinx FPGA中既可以采用分布式资源(查找表)也可以采用BRAM实现存储单元。对于手工编写的HDL代码所描述的RAM,在默认情况下,Vivado会通过...

    Lauren的FPGA
  • 备战秋招-面经篇-[二十一]

    vaild连续拉高,同时有16bit数据进来,vaild连续拉高的周期数为3-255,然后模块要把这些数据求和,但是要把最大值和最小值踢除,最后done和sum...

    空白的贝塔
  • STM32H7的CAN FD学习笔记整理贴(2021-03-15)

    CAN FD(CAN with flexible data-rate)是CAN2.0协议的扩展,CAN-FD由博世开发,并由 ISO 11898-1:2015标...

    armfly
  • 为什么FPGA调试中双口RAM的读写冲突总是隐藏的很深很深

    FPGA调试本身就是挺辛苦的一件事情,尤其是在刚开始调试FPGA的时候,无论培训的时候如何强调一些注意事项,如跨时钟域问题,如接口问题,以及RAM读写冲突问题,...

    网络交换FPGA
  • xilinx verilog 语法技巧

    在Vivado Design Suite中,Vivado综合能够合成多种类型的属性。在大多数情况下,这些属性具有相同的语法和相同的行为。

    FPGA开源工作室

扫码关注云+社区

领取腾讯云代金券