请选择 进入手机版 | 继续访问电脑版

明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 6067|回复: 0

【FPGA至简设计原理与应用】第一篇 第三章硬件描述语言Verilog第2节仿真和综合

[复制链接]
发表于 2020-9-7 18:28:14 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本案例的编号为:001500000127,如果有疑问,请按编号在下面贴子查找答案:MDY案例交流【汇总贴】_FPGA-明德扬科教 (mdy-edu.com)
本文为明德扬原创及录用文章,转载请注明出处

大家好,近期我们会连载《FPGA至简设计原理与应用》一书,有兴趣的同学可以学习,也希望大家可以对我们的书提出宝贵的意见和建议。


FPGA至简设计原理与应用》书籍连载索引目录

http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=989


读过的朋友可积极在贴后留言,书籍正式出版时,我们会从留言者中挑选20位幸运读者,幸运读者可获潘老师亲笔签名书籍一本。

注:手机浏览可能格式会乱,建议用电脑端进行浏览。





第2节 综合和仿真

本文档编号:001100000036
需要看对应的视频,请点击视频编号:001000000049
1. 本节主要介绍使用综合器对Verilog代码进行解释并将代码转化成实际电路来表示,最终产生实际电路(网表),即综合;为了避免在编写好代码、综合成电路、烧写到FPGA后才发现问题,此时再去定位问题就会非常的地困难,所以,在综合前,设计师可以通过仿真软件对代码进行仿真测试,检测出BUG并将其解决,最后再将程序烧写进FPGA,即仿真;在Veriglog语言中,有些语法结构只是以仿真测试为目的,是不能与实际硬件电路对应起来的,也称之为不可综合语法,本节整理了不可综合或者不推荐使用的代码。
2. ALTERA和VIVADO文档


2.1 综合
    Verilog是硬件描述语言,顾名思义,就是用代码的形式描述硬件的功能,最终在硬件电路上实现该功能。在Verilog描述出硬件功能后需要使用综合器对Verilog代码进行解释并将代码转化成实际的电路来表示,最终产生实际的电路,也被称为网表。这种将Verilog代码转成网表的工具就是综合器。

     上图左上角是一段Verilog代码,该代码实现了一个加法器的功能。在经过综合器解释后该代码被转化成一个加法器电路。QUARTUS、ISE和VIVADO等FPGA开发工具都是综合器,而在集成电路设计领域常用的综合器是DC。

2.2 仿真
  
    在FPGA设计的过程中,不可避免会出现各种BUG。如果在编写好代码、综合成电路、烧写到FPGA后才发现问题,此时再去定位问题就会非常地困难。而在综合前,设计师可以在电脑里通过仿真软件对代码进行仿真测试,检测出BUG并将其解决,最后再将程序烧写进FPGA。一般情况下可以认为没有经过仿真验证的代码,一定是存在BUG的。


    为了模拟真实的情况,需要编写测试文件。该文件也是用Verilog编写的,其描述了仿真对象的输入激励情况。该激励力求模仿最真实的情况,产生最接近的激励信号,将该信号的波形输入给仿真对象,查看仿真对象的输出是否与预期一致。需要注意的是:在仿真过程中没有将代码转成电路,仿真器只是对代码进行仿真验证。至于该代码是否可转成电路,仿真器并不关心。

    由此可见,Verilog的代码不仅可以描述电路,还可以用于测试。事实上,Verilog定义的语法非常之多,但绝大部分都是为了仿真测试来使用的,只有少部分才是用于电路设计,详细可以参考本书的“可综合逻辑设计”一节。Verilog中用于设计的语法是学习的重点,掌握好设计的语法并熟练应用于各种复杂的项目是技能的核心。而其他测试用的语法,在需要时查找和参考就已经足够了。本书旨在方便本科、研究生的教学,因此将重点讲解设计用的语法。

2.3 可综合设计
    Verilog硬件描述语言有类似高级语言的完整语法结构和系统,这些语法结构的应用给设计描述带来很多方便。但是,Verilog是描述硬件电路的,其建立在硬件电路的基础之上。而有些语法结构只是以仿真测试为目的,是不能与实际硬件电路对应起来的。也就是说在使用这些语法时,将一个语言描述的程序映射成实际硬件电路中的结构是不能实现的,也称为不可综合语法。

    综合就是把编写的rtl代码转换成对应的实际电路。比如编写代码assign a=b&cEDA综合工具就会去元件库里调用一个二输入与门,将输入端分别接上bc,输出端接上a
同样地,如果设计师编写了一些如下所示的语句
assign a=b&c;
assign c=e|f;
assign e=x^y;
……

    综合工具就会像搭积木一样把这些“逻辑”电路用一些“门”电路来搭起来。当然,工具会对必要的地方做一些优化,比如编写一个电路assing a=b&~b,工具就会将a恒接为0,而不会去调用一个与门来搭这个电路。
   
    综上所述,“综合”要做的事情有:编译rtl代码,从库里选择用到的门器件,把这些器件按照“逻辑”搭建成“门”电路。

    不可综合,是指找不到对应的“门”器件来实现相应的代码。比如“#100”之类的延时功能,简单的门器件是无法实现延时100个单元的,还有打印语句等,也是门器件无法实现的。在设计的时候要确保所写的代码是可以综合的,这就依赖于设计者的能力,知道什么是可综合的代码,什么是不可综合的代码。对于初学者来说,最好是先记住规则,遵守规则,先按规则来设计电路并在这一过程中逐渐理解,这是最好的学习路径。
下面表格中列出了不可综合或者不推荐使用的代码。

下表是笔者推荐使用的设计。




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-3-28 20:36 , Processed in 0.071885 second(s), 31 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表