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

    文章

    6258

    浏览量

    184148
  • fifo
    +关注

    关注

    3

    文章

    406

    浏览量

    45480
  • CLK
    CLK
    +关注

    关注

    0

    文章

    132

    浏览量

    17930

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    智多晶EDA工具HqFpga软件的主要重大进展

    图、时序分析等。HQ支持Windows、Linux操作系统利用HQ设计套件,设计人员能够实现高效率的FPGA工程开发与调试验证
    的头像 发表于 11-08 10:15 2413次阅读
    智多晶EDA工具Hq<b class='flag-5'>Fpga</b>软件的主要重大进展

    【开源FPGA硬件】硬件黑客集结:开源FPGA开发板测评活动全网火热招募中......

    开源活动简介 近期,小眼睛科技联合紫光同创及电子发烧友发起了 # 拥抱开源!起来做FPGA开发板活动 ,活动经发布,得到了很多开源爱好者
    发表于 10-29 11:37

    硬件黑客集结:开源FPGA开发板测评活动全网火热招募中......

    开源活动简介近期,小眼睛科技联合紫光同创及电子发烧友发起了#拥抱开源!起来做FPGA开发板活动,活动
    的头像 发表于 10-29 08:05 315次阅读
    硬件黑客集结:开源<b class='flag-5'>FPGA</b><b class='flag-5'>开发</b>板测评活动全网火热招募中......

    是否需要买fpga开发板?

    纠结要不要买个 FPGA 开发板?真心建议搞块,尤其是想在数字电路、嵌入式领域扎根的同学,这玩意儿可不是可有可无的摆设。入门级的选择不少,全新的像 Cyclone IV、Artix 7 系列,几百块就能拿下,要是去二手平台淘淘
    的头像 发表于 07-31 10:32 516次阅读
    是否需要买<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>fpga</b><b class='flag-5'>开发</b>板?

    西门子桌面级原型验证系统Veloce proFPGA介绍

    Veloce proFPGA 平台提供三类主板:Uno、Duo 和 Quad。这些主板支持轻松插入和混用不同类型的现场可编程门阵列 (FPGA) 模块以及外围存储器和协议接口板。作为使用案例的
    的头像 发表于 06-30 13:53 1599次阅读

    开源FPGA硬件,核心开发者招募中......

    01背景简介近期,小眼睛科技联合紫光同创及电子发烧友发起了#拥抱开源!起来做FPGA开发板活动,活动经发布,得到了很多开源爱好者的热烈响
    的头像 发表于 06-20 08:03 970次阅读
    开源<b class='flag-5'>FPGA</b>硬件,核心<b class='flag-5'>开发</b>者招募中......

    FPGA与高速ADC接口简介

    本文介绍FPGA与高速ADC接口方式和标准以及JESD204与FPGA高速串行接口。
    的头像 发表于 06-12 14:18 2710次阅读
    <b class='flag-5'>FPGA</b>与高速ADC接口<b class='flag-5'>简介</b>

    FPGA调试方式VIO/ILA的使用

    在Vivado中,VIO(Virtual Input/Output)是种用于调试和测试FPGA设计的IP核,它允许设计者通过JTAG接口实时读取和写入FPGA内部的寄存器,从而检查设计的运行状态并修改其行为。VIO IP核提供
    的头像 发表于 06-09 09:32 3079次阅读
    <b class='flag-5'>FPGA</b>调试方式<b class='flag-5'>之</b>VIO/ILA的使用

    拥抱开源!起来做FPGA开发板啦!

    起来做FPGA开发板啦! 2、第二步:点击前往报名>报名入口 3、第三步:加小助手微信进群,备注 开源FPGA 注:完成上面三
    发表于 06-06 14:05

    FPGA EDA软件的位流验证

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

    FPGA开发任务

    我想请人帮我开发款基于FPGA的产品,把我写好MATLAB代码固化在FPGA中,实现算法加速和加密功能。有兴趣的联系我
    发表于 03-15 10:19

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

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

    芯华章发布FPGA验证系统新品HuaProP3

    近日,国内EDA(电子设计自动化)领域的佼佼者芯华章公司,正式对外宣布其最新研发的FPGA验证系统——HuaProP3已正式面世。这款产品的推出,标志着芯华章在FPGA验证技术上的又
    的头像 发表于 12-13 11:12 1185次阅读