0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA验证简介之FPGA开发分析一个testbench

电子工程师 来源:CSDN技术社区 作者:aaaaatiger 2021-04-11 10:46 次阅读

很多FPGA/IC开发工具都提供设计例子,方便使用者学习和练习,例如,Xilinx ISE提供了很多设计实例,放在ISE5.X的安装目录下的ISEexamples目录下,例如CDMA匹配滤波器、Johnson计数器、PN码发生器、频率计等,这些例子是经验丰富的工程师写的,我们可以学到编程思想、代码风格等方面的知识和经验,这些东西可能从学校老师或一般书籍都学习不到。

如果你用的不是Xilinx的FPGA,也就是说不使用ISE,那也没关系,HDL代码和testbench的设计思想和方法是一样的,你照样可以从中学到很多东西。下面以其中一个例子――同步FIFO为例,分析一下我们的第一个testbench,设计的源代码可以在ISEexamples目录下找到,Xilinx还提供了Application Note详细介绍了该FIFO的细节,

1.511x8同步FIFO功能简介

为了对这个511x8同步FIFO进行功能验证,首先要清楚它的功能,只有这样才能知道需要验证什么功能,以及如何进行验证,图1为该同步FIFO的原理框图。

与异步FIFO相比,同步FIFO的读、写时钟是同一个时钟,简化了FIFO的设计,Empty和Full标志的产生也比较容易,同步FIFO内部使用二进制计数器记录读地址和写地址。在异步FIFO中,由于读写使用不同的时钟,也就是说设计存在两个时钟域,为了减少出现亚稳态时产生的错误,记录读写地址的计数器要使用格雷码,Empty和Full标志的产生也比较复杂。511x8同步FIFO(以下简称FIFO)的工作时序如图2所示。

o4YBAGByZPuATShbAAFdQ1wC_ZQ738.png

读FIFO数据时,首先read_allow信号置高,时钟上升沿到来时read_addr地址处的数据将出现在read_data处,同时read_addr加1。让read_allow信号持续为高可以完成burst read操作。如果读出的数据是FIFO的最后一个数据,那么读操作完成后Empty信号变高。Empty信号为高时读出来的数据是无效的。

写FIFO数据时,首先write_allow信号置高,同时准备好输入数据write_data,时钟上升沿到来时,数据将写入write_addr所指向的地址中,同时write_addr加1。让write_allow信号持续为高可以完成burst write操作。如果某一个时钟上升沿时写入第511个数,那么下一个时钟沿到来的时候Full信号变高,表示FIFO已经写满。

我们再详细分析FIFO的工作时序图。在图2中,开始时FIFO的读写指针均为0,Empty为高表示FIFO处于空的状态,然后write_allow置高,时钟上升沿到来时写入第一个数据,Empty变低;一个CLK之后,read_allow置高,时钟上升沿到来时,读出数据,由于是最后一个数据,所以Empty信号又变为有效(高电平)。在时序图的右半部分,写入509个数据之后,再写入两个数据,Full信号变为有效,表示FIFO为满。

这个FIFO还有一个名为fifo_count_out的输出,从4’b0000~4’b1111,分别表示FIFO满的程度从不足1/16到15/16,为某些应用提供方便。

2.验证

清楚FIFO的功能之后,我们就可以开始验证工作了。验证工作的第一步是整理出FIFO需要验证的功能点,这些功能点一般直接来源于FIFO应该具有的功能,或者来源于它的使用方法。FIFO需要验证的功能点包括:

1)FIFO复位后,read_addr和write_addr为0,Full为0,Empty为1。

2)读FIFO数据时,read_allow信号必须置高,时钟上升沿到来时read_addr地址处的数据将出现在read_data处,同时read_addr加1。

3)读出FIFO的最后一个数据后,Empty信号变高。

4)写FIFO数据时,write_allow信号必须置高,时钟上升沿到来时,输入数据write_data将写入write_addr所指向的地址中,同时write_addr加1。

5)如果某一个时钟上升沿时写入第511个数,那么下一个时钟沿到来的时候Full信号变高,表示FIFO已经写满。

6)fifo_count_out端能正确的指示FIFO满的程度。

分析Xilinx提供的testbench可以为我们编写自己的testbench提供很好的参考。FIFO的RTL代码和testbench代码放在ISEexamplesfifo_ver_131和fifo_vhd_131下。以verilog代码为例,fifo_ver_131中包括了两个testbench文件,一个是功能仿真testbench文件fifoctlr_cc_tb.tf,另一个是时序仿真(后仿真)testbench文件fifoctlr_cc_tb_timing.tf,这里我们主要分析功能仿真文件,为了方便大家理解,以下(下一帖)为注释过的功能仿真testbench。大家看testbench的代码时,对照FIFO需要验证的功能点,检查是不是所有功能点都经过了验证。

FIFO的testbench主要包括初始化、验证initial块、读写task等内容,初始化部分主要完成复位信号、CLK信号等的初始化工作,读写task把读写、delay等操作模块化,方便使用。这里主要介绍一下验证initial块,也可以说是验证的主程序,如下所示。

initial begin

delay; //保证验证环境正确复位

writeburst128; //写入512个数,Full信号应该在写入511个数后变高

writeburst128;

writeburst128;

writeburst128;

read_enable = 1; //读出一个数,Full信号应该变低

writeburst128; //同时读写,检查FIFO操作是否正确

read_enable = 0; //读操作结束

endwriteburst; //写操作结束

delay;

readburst128; //连续读512次,Empty信号应在读出511个数后变高

readburst128;

readburst128;

readburst128;

endreadburst;

end

这段程序首先延迟5个时钟周期,等初始化完成之后再开始验证工作。验证时,首先写入512个数,使用波形观察器可以检查写入的过程是否正确,以及Full信号在写入511个数后是否变高;然后read_enable = 1,读出一个数,Full信号应该变低,这样写操作和Full信号的验证就基本完成了;程序接着也启动了写操作,由于此时read_enable仍然为高,即读写同时进行,这是对实际情况的模拟,可以对FIFO的功能进行更严格的验证;最后,连续读FIFO 512次,用波形观察器检查读操作是否正确,Empty信号是否在读出511个数后变高,如果这些操作都是正确的,那么FIFO的功能就基本正确了。

需要注意的一点是,以上的程序是不可综合的,因为不是RTL级描述,而是行为级描述(Behavioral Description)。行为级描述的特点是直接描述对象的功能,具有比较高的抽象层次,开发、运行速度都比RTL代码要快,因此testbench都是用行为级描述写的。关于行为级描述的特点、写法以后将有专门的章节论述。

这个testbench的特点是,输入激励由testbench产生,输出响应的检查人工完成,这样的testbench编写相对容易,可以加快开发速度,作为开发人员自己验证是非常好的选择。有些testbench能完成输入激励和输出检查,不用观察波形也能完成验证工作,这样的testbench具有更高的自动化程度,使用方便,可重复性好,当设计比较复杂而且团队中有专门的验证工程师时,一般会有验证工程师建立一套这样的testbench,用于验证开发工程师的RTL级代码,如果发现问题,开发工程师修改后在testbench再运行一次所花的时间非常少,开发复杂项目时这样做可以比用波形观察器节省很多时间。

3.总结

验证一般要通过写testbench实现,testbench要完成向DUT施加激励和检查DUT相应是否正确的功能,这就要求我们非常清楚待验证模块(DUT)的功能,这样才知道需要验证什么、如何施加激励和如何检查响应是否正确。写testbench时, 首先要列出需要验证的功能,让后再编写testbench,这样可以做到有的放矢,避免遗漏。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IC
    IC
    +关注

    关注

    36

    文章

    6068

    浏览量

    178088
  • fifo
    +关注

    关注

    3

    文章

    397

    浏览量

    44545
  • CLK
    CLK
    +关注

    关注

    0

    文章

    127

    浏览量

    17488

原文标题:FPGA开发分析一个testbench

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
    相关推荐
    热点推荐

    FPGA开发需求

    我们这里有项目,有FPGA开发需求,配套DAC芯片AD9164+评估板AD9164-FMCC-EBZ使用。 需求:1.时域上产生周期性的脉冲信号; 2.同时要保证
    发表于 04-30 10:03

    FPGA EDA软件的位流验证

    位流验证,对于芯片研发是非常重要的测试手段,对于纯软件开发人员,最难理解的就是位流验证。在FPGA
    的头像 发表于 04-25 09:42 415次阅读
    <b class='flag-5'>FPGA</b> EDA软件的位流<b class='flag-5'>验证</b>

    FPGA开发任务

    还原成数据流,通过2.5Gbps网口转发至目标服务器。 3、FPGA PS编程 提供接口用于状态监控、串口配置等; 4、完成PCB板级调试验证 FPGA电路调试、代码联调等工作。 5、完成上下位机通讯联调
    发表于 04-22 18:46

    国产FPGA往事

    首先,这篇文章的后半部分,会有广告:我去年和紫光同创原厂的技术专家写了本书——《国产FPGA权威开发指南》,我想送
    的头像 发表于 04-14 09:53 118次阅读
    国产<b class='flag-5'>FPGA</b>往事

    Verilog 测试平台设计方法 Verilog FPGA开发指南

    Verilog测试平台设计方法是Verilog FPGA开发中的重要环节,它用于验证Verilog设计的正确性和性能。以下是详细的Ver
    的头像 发表于 12-17 09:50 926次阅读

    MCU和FPGA的区别分析

    ): MCU是种集成电路芯片,它将计算机的CPU、存储器、输入/输出接口等集成在芯片上。MCU通常用于嵌入式系统,如家用电器、汽车电子和工业控制等。 FPGA(现场可编程门阵列)
    的头像 发表于 11-11 14:58 2198次阅读

    ARM开发板与FPGA的结合应用

    、引言 ARM开发板是种基于ARM架构的嵌入式开发平台,具有高性能、低功耗的特点。FPGA
    的头像 发表于 11-05 11:42 1288次阅读

    编写高效Testbench的指南和示例

    Testbench验证HDL设计的主要手段,本文提供了布局和构建高效Testbench的指南以及示例。另外,本文还提供了种示例,可以为任何设计
    的头像 发表于 10-29 16:14 1236次阅读
    编写高效<b class='flag-5'>Testbench</b>的指南和示例

    什么~FPGA可以自行二次开发了?

    什么!FPGA可以自行二次开发了? 目前市场上的标准采集卡通常不支持用户自行开发FPGA。但因为应用环境的需要,不仅仅只需要单的数据采集流
    的头像 发表于 10-14 15:47 499次阅读
    什么~<b class='flag-5'>FPGA</b>可以自行二次<b class='flag-5'>开发</b>了?

    莱迪思Propel工具套件加速FPGA应用开发

    许多嵌入式系统的开发者都对使用基于FPGA的SoC系统感兴趣,但是基于传统HDL硬件描述语言的FPGA开发工具和复杂流程往往会令他们望而却步。为了解决这
    的头像 发表于 08-30 17:23 1249次阅读

    Agilex 7 FPGA和SoC的基准测试

    与同类FPGA相比,Agilex 7 FPGA可为OpenCores公开发布的设计提供超过速度等级的内核性能提升。
    的头像 发表于 08-30 17:07 703次阅读
    Agilex 7 <b class='flag-5'>FPGA</b>和SoC的基准测试

    FPGA开发工具

    学习开发FPGA,需要预先准备好的工具吗?比如示波器‘逻辑分析仪之类的。毕竟侧重于硬件方面的处理。不知道和单片机开发有多少不同,和需要注意的地方。
    发表于 07-29 22:04

    FPGA如何估算分析功耗

    FPGA的功耗由4部分组成:上电功耗、配置功耗、静态功耗和动态功耗。般的FPGA都具有这4种功耗,但是Actel Flash FPGA由于掉电数据不丢失,无需配置芯片,所以上电后不需
    的头像 发表于 07-18 11:11 2318次阅读
    <b class='flag-5'>FPGA</b>如何估算<b class='flag-5'>分析</b>功耗

    FPGA的学习笔记---FPGA开发流程

    与通常的单片机应用开发不同,FPGA有自己的开发流程。但具体上怎样操作,作为初学者,没有点经验。网站奖励的清华FPGA需要的
    发表于 06-23 14:47

    FPGA 高级设计:时序分析和收敛

    结果当然是要求系统时序满足设计者提出的要求。 下面举最简单的例子来说明时序分析的基本概念。 假设信号需要从输入到输出在FPGA 内部经过
    发表于 06-17 17:07

    搭建树莓派网络监控系统:顶级工具与技术终极指南!

    树莓派网络监控系统是一种经济高效且功能多样的解决方案,可用于监控网络性能、流量及整体运行状况。借助树莓派,我们可以搭建一个网络监控系统,实时洞察网络活动,从而帮助识别问题、优化性能并确保网络安全。安装树莓派网络监控系统有诸多益处。树莓派具备以太网接口,还内置了Wi-Fi功能,拥有足够的计算能力和内存,能够在Linux或Windows系统上运行。因此,那些为L

    上海晶珩电子科技有限公司
    1小时前
    109

    STM32驱动SD NAND(贴片式SD卡)全测试:GSR手环生物数据存储的擦写寿命与速度实测

    在智能皮电手环及数据存储技术不断迭代的当下,主控 MCU STM32H750 与存储 SD NAND MKDV4GIL-AST 的强强联合,正引领行业进入全新发展阶段。二者凭借低功耗、高速读写与卓越稳定性的深度融合,以及高容量低成本的突出优势,成为大规模生产场景下极具竞争力的数据存储解决方案。

    MK米客方德
    3小时前
    163

    芯对话 | CBM16AD125Q这款ADC如何让我的性能翻倍?

    综述在当今数字化时代,模数转换器(ADC)作为连接模拟世界与数字系统的关键桥梁,其技术发展对众多行业有着深远影响。从通信领域追求更高的数据传输速率与质量,到医疗影像领域渴望更精准的疾病诊断,再到工业控制领域需要适应复杂恶劣环境的稳定信号处理,ADC的性能提升成为推动这些行业进步的重要因素。行业现状分析在通信行业,5G乃至未来6G的发展,对基站信号处理提出了极

    芯佰微电子
    5小时前
    132

    史上最全面解析:开关电源各功能电路

    01开关电源的电路组成开关电源的主要电路是由输入电磁干扰滤波器(EMI)、整流滤波电路、功率变换电路、PWM控制器电路、输出整流滤波电路组成。辅助电路有输入过欠压保护电路、输出过欠压保护电路、输出过流保护电路、输出短路保护电路等。开关电源的电路组成方框图如下:02输入电路的原理及常见电路1AC输入整流滤波电路原理①防雷电路:当有雷击,产生高压经电网导入电源时

    张飞实战电子官方
    21小时前
    258

    有几种电平转换电路,适用于不同的场景

    一.起因一般在消费电路的元器件之间,不同的器件IO的电压是不同的,常规的有5V,3.3V,1.8V等。当器件的IO电压一样的时候,比如都是5V,都是3.3V,那么其之间可以直接通讯,比如拉中断,I2Cdata/clk脚双方直接通讯等。当器件的IO电压不一样的时候,就需要进行电平转换,不然无法实现高低电平的变化。二.电平转换电路常见的有几种电平转换电路,适用于

    张飞实战电子官方
    1天前
    310

    瑞萨RA8系列教程 | 基于 RASC 生成 Keil 工程

    对于不习惯用 e2 studio 进行开发的同学,可以借助 RASC 生成 Keil 工程,然后在 Keil 环境下愉快的完成开发任务。

    RA生态工作室
    05-01 10:00
    564

    共赴之约 | 第二十七届中国北京国际科技产业博览会圆满落幕

    作为第二十七届北京科博会的参展方,芯佰微有幸与800余家全球科技同仁共赴「科技引领创享未来」之约!文章来源:北京贸促5月11日下午,第二十七届中国北京国际科技产业博览会圆满落幕。本届北京科博会主题为“科技引领创享未来”,由北京市人民政府主办,北京市贸促会,北京市科委、中关村管委会,北京市经济和信息化局,北京市知识产权局和北辰集团共同承办。5万平方米的展览云集

    芯佰微电子
    2天前
    727

    道生物联与巍泰技术联合发布 RTK 无线定位系统:TurMass™ 技术与厘米级高精度定位的深度融合

    道生物联与巍泰技术联合推出全新一代 RTK 无线定位系统——WTS-100(V3.0 RTK)。该系统以巍泰技术自主研发的 RTK(实时动态载波相位差分)高精度定位技术为核心,深度融合道生物联国产新兴窄带高并发 TurMass™ 无线通信技术,为室外大规模定位场景提供厘米级高精度、广覆盖、高并发、低功耗、低成本的一站式解决方案,助力行业智能化升级。

    道生物联
    2天前
    577

    智能家居中的清凉“智”选,310V无刷吊扇驱动方案--其利天下

    炎炎夏日,如何营造出清凉、舒适且节能的室内环境成为了大众关注的焦点。吊扇作为一种经典的家用电器,以其大风量、长寿命、低能耗等优势,依然是众多家庭的首选。而随着智能控制技术与无刷电机技术的不断进步,吊扇正朝着智能化、高效化、低噪化的方向发展。那么接下来小编将结合目前市面上的指标,详细为大家讲解其利天下有限公司推出的无刷吊扇驱动方案。▲其利天下无刷吊扇驱动方案一

    其利天下技术
    05-10 16:29
    1.5k

    电源入口处防反接电路-汽车电子硬件电路设计

    一、为什么要设计防反接电路电源入口处接线及线束制作一般人为操作,有正极和负极接反的可能性,可能会损坏电源和负载电路;汽车电子产品电性能测试标准ISO16750-2的4.7节包含了电压极性反接测试,汽车电子产品须通过该项测试。二、防反接电路设计1.基础版:二极管串联二极管是最简单的防反接电路,因为电源有电源路径(即正极)和返回路径(即负极,GND),那么用二极

    张飞实战电子官方
    05-09 19:34
    984

    半导体芯片需要做哪些测试

    首先我们需要了解芯片制造环节做⼀款芯片最基本的环节是设计->流片->封装->测试,芯片成本构成⼀般为人力成本20%,流片40%,封装35%,测试5%(对于先进工艺,流片成本可能超过60%)。测试其实是芯片各个环节中最“便宜”的一步,在这个每家公司都喊着“CostDown”的激烈市场中,人力成本逐年攀升,晶圆厂和封装厂都在乙方市场中“叱咤风云”,唯独只有测试显

    汉通达
    05-09 10:02
    921

    解决方案 | 芯佰微赋能示波器:高速ADC、USB控制器和RS232芯片——高性能示波器的秘密武器!

    示波器解决方案总述:示波器是电子技术领域中不可或缺的精密测量仪器,通过直观的波形显示,将电信号随时间的变化转化为可视化图形,使复杂的电子现象变得清晰易懂。无论是在科研探索、工业检测还是通信领域,示波器都发挥着不可替代的作用,帮助工程师和技术人员深入剖析电信号的细节,精准定位问题所在,为创新与发展提供坚实的技术支撑。一、技术瓶颈亟待突破性能指标受限:受模拟前端

    芯佰微电子
    05-09 10:36
    1.6k

    硬件设计基础----运算放大器

    1什么是运算放大器运算放大器(运放)用于调节和放大模拟信号,运放是一个内含多级放大电路的集成器件,如图所示:左图为同相位,Vn端接地或稳定的电平,Vp端电平上升,则输出端Vo电平上升,Vp端电平下降,则输出端Vo电平下降;右图为反相位,Vp端接地或稳定的电平,Vn端电平上升,则输出端Vo电平下降,Vn端电平下降,则输出端Vo电平上升2运算放大器的性质理想运算

    张飞实战电子官方
    05-08 19:34
    643

    ElfBoard技术贴|如何调整eMMC存储分区

    ELF 2开发板基于瑞芯微RK3588高性能处理器设计,拥有四核ARM Cortex-A76与四核ARM Cortex-A55的CPU架构,主频高达2.4GHz,内置6TOPS算力的NPU,这一设计让它能够轻松驾驭多种深度学习框架,高效处理各类复杂的AI任务。

    ElfBoard
    05-08 15:01
    1.2k

    米尔基于MYD-YG2LX系统启动时间优化应用笔记

    1.概述MYD-YG2LX采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600/DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、

    米尔电子
    05-08 08:07
    418