第2节 综合和仿真

2.1 综合

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

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

2.2 仿真

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

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

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

2.3 可综合设计

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

综合就是把编写的 rtl 代码转换成对应的实际电路。比如编写代码 assign a=b&c; EDA 综合工具就会去元件库里调用一个二输入与门, 将输入端分别接上 b 和 c,输出端接上 a。

同样地,如果设计师编写了一些如下所示的语句:

综合工具就会像搭积木一样把这些“逻辑”电路用一些“门”电路来搭起来。当然,工具会对必要的地方做一些优化,比如编写一个电路 assing a=b&~b,工具就会将 a 恒接为 0,而不会去调用一个与门来搭这个电路。

综述所述,“综合”要做的事情有:编译 rtl 代码,从库里选择用到的门器件,把这些器件按照“逻辑”搭建成“门”电路。

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

下面表格中列出了**不可综合或者不推荐使用的代码**。

代码 要求
initial 严禁在设计中使用,只能在测试文件中使用。
task/function 不推荐在设计中使用,在测试文件中可用。
for 在设计中、测试文件中均可以使用。但在设计中多数会将其用错, 所以建议在初期设计时不使用,熟练后按规范使用
while/repeat/forev er 严禁在设计中使用,只能在测试文件中使用
integer 不推荐在设计中使用
三态门 内部模块不能有三态接口,三态门只有顶层文件才使用。三态门 目的是为了节省管脚, FPGA 内部完全没有必要使用。关于三态门的 介绍,请看后续三态门章节内容
casex/casez 设计代码内部不能有 X 态和 Z 态,因此 casez、 casex 设计时不 使用。
force/wait/fork 严禁在设计中使用,只能在测试文件中使用
#n 严禁在设计中使用,只能在测试文件中使用

下表为**推荐使用的设计代码**。

代码 备注
reg/wire 设计中所有的信号类型定义,只有 reg 和 wire 两种
parameter 设计代码中所有的位宽、长度、状态机命名等,建议都用参数表 示,阅读方便并且修改容易。
assign/always 程序块主要部分, 至简设计法对 always 使用有严格规范。 组合逻辑格式为: always@(*) begin 代码语句; end 或者用 assign 时序逻辑格式为: always@(posedge clk or negedgerst_n) begin if(rst_n==1’b0)begin 代码语句; end else begin 代码语句; end end 时序逻辑中,敏感列表一定是 clk 的上升沿和复位的下降沿、最 开始必须判断复位。详细见本章组合逻辑和时序逻辑一节。
if else 和 case always 里面的语句,使用 if else 和 case 两种方法用来作选择判断,可以完成全部设计。
算术运算符 (+,-, ×, /,%) 可以直接综合出相对应的电路。但除法和求余运算的电路面积一 般比较大,不建议直接使用除法和求余。
赋值运算符(=, <=) 时序逻辑用“<=” ,组合逻辑用“=” ;其他情况不存在。
关系运算符( ==,! =, >, <, >=, <=, ) 详细见本章组合逻辑一节
逻辑运算符(&&, | |, !)
位运算符(~, |, ^, &)
移 位 运 算 符 ( < <, >>)
拼接运算符({ })

FPGA基础知识----第三章 第2节 综合和仿真相关推荐

  1. 计算机基础知识第三章答案,2011年河北省职称计算机模拟习题(基础知识第三章+标准答案)...

    2011年河北省职称计算机模拟习题(基础知识第三章+标准答案) 基础知识第三章 下列关于控制面板不正确的叙述是________. A.控制面板是一组系统管理程序 B.可以安装或删除系统的软件.硬件 C ...

  2. 计算机基础知识第三章测试,计计算机应用基础第三章测试题

    22.Word2000提供了哪几种视图方式? 23.Word的段落对齐方式有哪几种? 24.在Word中的创建表格有哪些方法? 三.应用题(每小题10分,共2题,计20分) 25.对以下素材按要求排版 ...

  3. 超详细的计算机网络基础知识总结 第一章:概述

    本文基于:王道计算机考研-计算机网络 顺便提一嘴,王道计算机网络的小姐姐声音真滴好听 相关文章 超详细的计算机网络基础知识 第二章-物理层 超详细的计算机网络基础知识 第三章:数据链路层 超详细的计算 ...

  4. FPGA基础知识----第二章 FPGA 开发流程

    第二章 FPGA 开发流程 FPGA 的设计流程就是利用 EDA 开发软件和编程工具对 FPGA 芯片进行开发的过程.原理图和HDL(Hardware description language,硬件描 ...

  5. 大学计算机知识考试题,大学计算机基础理论知识前三章测试题

    <大学计算机基础理论知识前三章测试题>由会员分享,可在线阅读,更多相关<大学计算机基础理论知识前三章测试题(8页珍藏版)>请在装配图网上搜索. 1.第一章引论选择题1. 工资管 ...

  6. 前端基础知识第四章---CSS

    前言 ❤️ 生活中总有一些惊喜值得期待,只要我们一直保持着热爱 ❤️ 前端基础知识第四章---CSS 一.CSS 第四章 (1)浮动(float) 1.1 传统网页布局的三种方式 1.2 标准流(普通 ...

  7. 初学者必须要知道的FPGA基础知识

    初学者必须要知道的FPGA基础知识 一.FPGA是什么? 在<FPGA至简设计原理与应用>一书里是这样描述的:『FPGA的全称为Field-Programmable Gate Array, ...

  8. 大学计算机考试基础理论试题,大学计算机基础理论知识前三章测试题

    <大学计算机基础理论知识前三章测试题>由会员分享,可在线阅读,更多相关<大学计算机基础理论知识前三章测试题(8页珍藏版)>请在人人文库网上搜索. 1.第一章引论选择题1. 工资 ...

  9. FPGA基础知识|芯片设计基础知识

    FPGA 基础知识 可查看原文:FPGA基础知识 1.查找表 LUT 和编程方式第一部分: 查找表 LUT FPGA 是在 PAL.GAL.EPLD.CPLD 等可编程器件的基础上进一步发展的产物.它 ...

最新文章

  1. 物体的三维识别与6D位姿估计:PPF系列论文介绍(三)
  2. Ubuntu 使用记录
  3. 二元矩阵峰值搜索_好斗的牛(二元搜索)
  4. 自定义SeekBar 实时显示百分比进度
  5. adb remount overlayfs的说明
  6. java ide下载_jGRASP|轻量级Java IDE(jGRASP)下载v2.0.4.03官方版 - 欧普软件下载
  7. mysql replace 只替换第一个_MySQL:replace函数的几种实用场景
  8. 使用vb.net调用bartender并打印标签
  9. 【CSS】background各属性一览汇总
  10. linux文本三剑客演讲稿,Linux文本三剑客总结
  11. ELK ILM 策略实现冷热数据分离 持续更新
  12. CAD/CASS依据等高线等距或随机加高程点插件(等高线等距加高程点、等高线随机加高程点、等高线手动加高程点)
  13. 大卫艾克~雄狮醒来2:实相的本质(中字)
  14. 系统设计和数据库设计答辩问题汇总
  15. 星际密码(编程题解)
  16. Hauppague 哈帕克 PCIe 视频采集卡 ImpactVCB-e花屏问题解决和SDK集成
  17. 南邮离散数学试卷2023(含答案)
  18. 第一次机房收费系统总结
  19. 在国内考是考CISP还是CISSP呢?
  20. Arduino小音响

热门文章

  1. 响应式设计的三个步骤
  2. AlexNet网络的搭建
  3. springboot 配置文件 date-format 失效
  4. 针对Excel表格文件操作的编程实现
  5. 写交织(AXI4不在支持写交织功能)
  6. 企业级docker安装kong,konga实战
  7. 运用 Elasticsearch 8.1.x 实现智能问答系统
  8. unity 适配iPhone X底部横条
  9. Android实现关机代码
  10. 矩阵“特征值”要表示什么“特征”