Verilog|【Verilog HDL学习之路】第一章 Verilog HDL 数字设计总论

1 Verilog HDL 数字设计总论 1.1 几个重要的概念

  • EDA(Electronic Design Automation)
    电子技术自动化
  • EDA工具
    类似于软件工程中的IDE(集成开发环境),能够使用Verilog HDL语言描述电路设计,并且能够通过逻辑综合工具将用Verilog HDL描述的电路自动转换为门级网表,当然还有其他的一些功能,并且EDA工具的功能越来越强大。
    接下来的章节中,我将使用Vivado 2017.4来进行数字电路设计。
  • RTL(Register Transfer Level):
    寄存器传输级
  • RTL级描述
    即:寄存器传输级描述,一般会使用专业术语RTL级描述,讲这个概念拆分为两部分:寄存器和传输级
    在本概念中,寄存器相当于科技黑箱(也就是你只需要知道它的外部接口,以及如何使用,不必管内部是什么),寄存器在本概念中不是重点 ,重点是对于传输的描述。
    这也就是说,设计者需要
    • 在概念模型的层次描述清楚数据是如何在寄存器之间传输的;
    • 在RTL级描述的层次,使用Verilog HDL语言来“翻译”构建的概念模型(这种概念模型,在数字设计中被称为“行为描述”)。
信息1 信息2 信息3 寄存器1 寄存器2 寄存器3 对于这样的总体结构来说,设计者无需管寄存器或信息内部细节是什么,只需要描述好他们之间的联系,将连线部分内容以及他们的接口描述清楚,并且能够调用信息和寄存器即可进行RTL级描述。
可以将RTL级描述与《数据结构》这门课程进行类比学习,这样你能更轻松明白其含义。
Verilog HDL 数据结构
行为描述 ADT模型
RTL级描述 ADT模型的实现
如果你之前没有学过数据结构这门课程,没有关系,接下来我来解析一下行为描述。
  • 行为描述
    对于一个现实问题,设计者通过分析问题,从抽象的角度,设计出数字电路的总体结构、功能和接口,这也就是行为描述。然后,设计者就可以根据行为描述来进行RTL级描述了。
1.2 典型数字设计流程 先给出当今时代,典型的数字流程设计流程,然后做出解释
设计者分析问题 逻辑综合工具/时序验证 现实问题 设计要求说明 行为描述 RTL级描述 功能验证和测试 门级网表 逻辑验证和测试 其他
  • 对于RTL级描述的后续内容,将会使用Vivado软件进行讲解,在后续内容将会详细提及,目前先了解如下内容即可。
    • 逻辑综合工具:将RTL级描述描述自动转换为门级网表,但是自动转换的门级网表不一定是优化的方案
  • 对于【行为描述】–>【RTL级描述】部分,谈及之前,先来说明一下Verilog HDL的几种描述方式
描述方式 抽象程度 应用 对比学习
门级描述 常嵌套在RTL级描述中 比汇编语言还底层一些
RTL级描述 目前主流都是用它 汇编语言
行为级描述 暂时没有成为主流 高级语言 C/C++
开关级 暂不谈 高级主题先不管
特别注意:在实际数字设计中,RTL级(寄存器传输级)描述通常是指能够被逻辑综合工具接受的行为级描述和数据流级描述的混合描述,这里对于RTL级描述做了概念上的拓展,不再单纯指数据流级描述。
对于行为描述来说,可以使用这三种形式中任意形式来进行实现,并且,对于同一个数字电路模型,这三种形式可以混合使用。
【Verilog|【Verilog HDL学习之路】第一章 Verilog HDL 数字设计总论】目前的主流是使用RTL级描述,行为级描述在更加抽象的程度上来实现了行为描述,行为级综合工具允许直接对电路的算法和行为进行描述,它最符合人类思维方式,基于C/C++描述,但是有些RTL级描述做的事情它并不能完成,目前暂时没有得到主流设计者的认可。
至于门级描述,它就像汇编语言一样,非常繁琐麻烦和恶心,人们很少会直接使用他,但是会在特定的情况下, 为了提高电路的速度,在RTL级描述中嵌套一些必要的门级描述(因为自动生成的门级网表不一定是优化的)。这就好像,软件工程师(比如C++工程师)可能会在他们的程序中直接自定义导入一些由汇编语言编辑的代码一样。
简而言之,数字电路设计者要先分析问题得出行为描述,然后使用RTL级描述来实现行为描述,为了提高电路速度,可以在RTL级描述中嵌套门级描述。
问题1:对于过程“RTL级描述描述–>门级网表”,门级网表等同于门级描述吗?
待解决
问题2:行为级综合工具的出现允许Verilog HDL进行行为级描述,那么它是可以将行为级描述转换为RTL级描述吗?
待解决
问题3:行为级描述与RTL级描述的区别?行为级描述能够完成RTL级描述的所有事情吗?
目前来说,行为级描述只能完成部分工作,以减轻进行RTL级描述的负担,但是有些工作只能用RTL级描述来完成。
至于区别,举一个例子,以Python和C++作比较,对于【输出“你好!”】这件事情。
Python会这样做
print("你好!")

但是C++却需要写这么长的内容
#include int main() { std::cout << "你好!"; return 0; }

显然,对比之下,Python是高效的。不过,有些事情Python做不到,但是C++可以完成,比如对内存的管理。不过整体来说,Python确实比C++高效。
Python与C++的对比,广义上来说,可以相当于行为级描述与RTL级描述的对比,我这样说,你应该明白了,不过这样的比喻可能并不是很严谨,我想通过类比的方法让你更容易理解这件事,不过你也要明白,类比并不能够一 一对照完全相同。
1.3 系统级设计 在这里简单介绍一下系统级设计,它相当于一个大型企业项目,也可以相当于一个图片设计作品。
C++有STL库,程序员可以直接调用别人已经完成的模块,来完成自己的项目;图片设计中,设计师可以直接使用一些已有的素材,将它们进行加工处理来完成自己的设计作品。这样的做法效率会很高。
所以,在系统级设计中,设计者也可以做类似的事情来提高效率,设计者可以使用已有的功能模块来快速搭建自己的系统,然后通过RTL级描述来使他们建立起联系。
我举一个例子来说明这一点
设计一个含有CPU、图形处理芯片、I/O芯片和系统总线的系统
这时候,设计者可以直接使用CPU设计者完成的CPU,图形处理芯片和I/O芯片以及第三方提供的系统总线来快速搭建系。
CPU 图形处理芯片 I/O芯片 系统总线 设计者只需对他们进行RTL级描述,进行系统级仿真等等。这样做效率很高,在工程上大大缩短了开发周期,降低了开发成本。
1.4 小结 将最重要的内容,以最精简的方式呈现出来。
  • EDA与EDA工具:能够帮助硬件开发设计者高效率完成开发工作
  • 行为描述,类似于ADT抽象模型
  • 行为描述的实现(可以互相嵌套)
    • 行为级描述
    • RTL级描述【最常用】
    • 门级描述
    • 开关级描述
  • 自动化功能
    • 行为级综合工具
    • 逻辑综合工具
  • 验证与优化流程
  • 具体实现到物理版图上(不必掌握)
目前来说有个印象记个大概即可,因为这些都是概述,后期不断掌握其细节后,会逐渐加深理解他们!
1.5 章节检测 回顾复习本章的重要内容,如果不能完全掌握,请回顾复习,不要继续往下学!

    推荐阅读