minor update to post josh-verilog
This commit is contained in:
@@ -20,7 +20,7 @@ toc:
|
||||
expand_all: true
|
||||
max_depth: 4
|
||||
abbrlink: 460433dd
|
||||
description: 本文阐述了 HDL 语言/设计方法的基本概念。主要介绍了数字系统建模方法的演变,引入了 HDL 语言的基本概念,对 Verilog HDL 和 VHDL、Verilog HDL 和 C 的联系与区别进行了说明,在最后引入了 HDL 的设计和验证流程,并对各个流程进行了简单介绍。
|
||||
description: 本文阐述了 HDL 语言/设计方法的基本概念。主要介绍了数字系统建模方法的演变,引入了 HDL 语言的基本概念,对 Verilog HDL 和 VHDL、Verilog HDL 和 C 的联系与区别进行了说明,最后引入了 HDL 的设计和验证流程,并对各个流程进行了简单介绍。
|
||||
---
|
||||
|
||||
# 1. 设计方法的变迁<a id="toc.1"></a>
|
||||
@@ -29,19 +29,19 @@ description: 本文阐述了 HDL 语言/设计方法的基本概念。主要介
|
||||
|
||||
<!-- more -->
|
||||
|
||||
随着数字电路系统的不断发展,系统的逻辑复杂度与规模日益增加,数字系统的设计方法也随之不断演进。早期简单的门逻辑设计阶段,EDA 工具应用范围十分有限,工程师们习惯于使用**{% label prime@卡诺图 %}**简化设计,然后通过面包板等实验系统验证设计;系统相对复杂后,工程师们借助 EDA 工具通过原理图描述数字系统。
|
||||
随着数字电路系统的不断发展,系统的逻辑复杂度与规模日益增加,数字系统的设计方法也随之不断演进。在早期简单的门逻辑设计阶段,EDA(Electronic Design Automation,电子设计自动化)工具应用范围十分有限,工程师们习惯于使用**{% label prime@卡诺图 %}**简化设计,然后通过面包板等实验系统验证设计;系统相对复杂后,工程师们借助 EDA 工具通过原理图描述数字系统。
|
||||
|
||||
{% note default %}
|
||||
|
||||
原理图由元件库中的元件构成,使用 EDA(Electronic Design Automation,电子设计自动化)工具可以对原理图进行仿真并分析其性能。
|
||||
原理图由元件库中的元件构成,使用 EDA 工具可以对原理图进行仿真并分析其性能。
|
||||
|
||||
{% endnote %}
|
||||
|
||||
当数字系统发展到 ASIC 与 PLD(Programmable Logic Device,可编程逻辑器件) 设计阶段后,原理图不利于移植、维护费时费力等缺点逐步显现,这时需要抽象度更高、更灵活的设计方式 —— HDL(Hardware Description Language,硬件描述语言)。
|
||||
当数字系统发展到 ASIC 与 PLD(Programmable Logic Device,可编程逻辑器件)设计阶段后,原理图不利于移植、维护费时费力等缺点逐步显现,这时需要抽象度更高、更灵活的设计方式 —— HDL(Hardware Description Language,硬件描述语言)。
|
||||
|
||||
使用 HDL 语言,可以从算法、系统级(System Level)、功能模块级(Functional Model Level)、行为级(Behavioral Level)、寄存器传输级(RTL, Register Transfer Level)、门级(Gate Level)到开关级(Switch Level)等不同层次描述数字电路系统,然后通过 EDA 工具综合、仿真并实现该系统。可以说 HDL 语言的出现是数字系统设计方法的一个重大飞跃。
|
||||
|
||||
数字电路系统设计方法的另一个重大飞跃是随着 EDA 工具的不断推陈出新发生的。早期 ASIC 和 PLD 设计时,人们需要直接描述 CMOS 的开关电路或门级电路,其设计量庞大,仿真速度也非常慢,像当今系统门数量为千万门级的 FPGA 用开关级或门级方法描述在当时是不可想象的。这时人们就希望能够使用 HDL 直接从更高的层次描述电路,然后使用 EDA 工具自动将高层次的 HDL 电路描述解析到门级,这些将大大节约设计与仿真时间,这个**{% label prime@从高层次的电路描述通过 EDA 工具解析到门级等低层次的电路描述的过程就叫“综合”(Synthesize),或者逻辑综合 %}**。
|
||||
数字电路系统设计方法的另一个重大飞跃是随着 EDA 工具的不断推陈出新发生的。早期 ASIC 和 PLD 设计时,需要直接描述 CMOS 的开关电路或门级电路,其设计量庞大,仿真速度也非常慢,用开关级或门级方法描述如当今门数量为千万门级的 FPGA 在当时是不可想象的。这时人们就希望能够使用 HDL 直接从更高的层次描述电路,然后使用 EDA 工具自动将高层次的 HDL 电路描述解析到门级,这些将大大节约设计与仿真时间,这个**{% label prime@从高层次的电路描述通过 EDA 工具解析到门级等低层次的电路描述的过程就叫“综合”(Synthesize),或者逻辑综合 %}**。
|
||||
|
||||
{% note default %}
|
||||
|
||||
@@ -85,27 +85,27 @@ Verilog 语言是根据 C 语言发明而来的,因此 Verilog 具备了 C 语
|
||||
|
||||
1. C 语言与 Verilog 的最大区别
|
||||
|
||||
C 语言与 Verilog 的最大区别在于 C 缺乏硬件描述的 3 个基本概念:
|
||||
C 语言与 Verilog 的最大区别在于 C 缺乏硬件描述的 3 个基本概念:
|
||||
|
||||
- **{% label primary @互连(connectivity) %}**:硬件系统中,互连是非常重要的组成部分,而在 C 语言中并没有直接可以用来表示模块间互连的变量;而 Verilog 的 `wire` 型变量配合一些驱动结构能有效地描述网线的互连。
|
||||
- **{% label primary @互连(connectivity) %}**:硬件系统中,互连是非常重要的组成部分,而在 C 语言中并没有直接可以用来表示模块间互连的变量;而 Verilog 的 `wire` 型变量配合一些驱动结构能有效地描述网线的互连。
|
||||
|
||||
- **{% label primary @并发(concurrency) %}**:C 语言天生是**串行**的,不能描述硬件之间并发的特性,C 语言编译后,其机器指令在 CPU 的高速缓冲队列中基本是顺序执行;而 Verilog 可以有效地描述并行的硬件系统,硬件系统比软件系统速度快、实时性高的一个重要原因就是硬件系统中**各个单元的运算是独立的,信号流是并行的**。
|
||||
- **{% label primary @并发(concurrency) %}**:C 语言天生是**串行**的,不能描述硬件之间并发的特性,C 语言编译后,其机器指令在 CPU 的高速缓冲队列中基本是顺序执行;而 Verilog 可以有效地描述并行的硬件系统,硬件系统比软件系统速度快、实时性高的一个重要原因就是硬件系统中**各个单元的运算是独立的,信号流是并行的**。
|
||||
|
||||
- **{% label primary @时间(time) %}**:C 程序运行的时候,没有一个严格的时间概念,程序运行的时间长短取决于处理器本身的性能;而 Verilog 语言本身定义了绝对和相对的时间度量,在仿真时可以通过时间度量与周期关系描述信号直接的时间关系。
|
||||
- **{% label primary @时间(time) %}**:C 程序运行的时候,没有一个严格的时间概念,程序运行的时间长短取决于处理器本身的性能;而 Verilog 语言本身定义了绝对和相对的时间度量,在仿真时可以通过时间度量与周期关系描述信号直接的时间关系。
|
||||
|
||||
2. HDL 语言的本质
|
||||
|
||||
硬件描述语言(HDL)同软件语言(如 C、C++ 等)是有本质区别的。Verilog 作为硬件描述语言,**它的本质作用在于描述硬件**。Verilog 虽然采用了 C 语言形式,但是它的最终描述结果是芯片内部的实际电路。所以评判一段 HDL 代码优劣的最终标准是其描述并实现的硬件电路的性能(包括面积和速度两个方面)。评价一个设计的代码水平较高,仅仅是说这个设计由硬件向 HDL 代码这种表现形式转换得更流畅、合理。而一个设计的最终性能更大程度上取决于设计工程师所构想的硬件实现方案的效率以及合理性。
|
||||
硬件描述语言(HDL)同软件语言(如 C、C++ 等)是有本质区别的。Verilog 作为硬件描述语言,**它的本质作用在于描述硬件**。Verilog 虽然采用了 C 语言形式,但是它的最终描述结果是芯片内部的实际电路。所以评判一段 HDL 代码优劣的最终标准是其描述并实现的硬件电路的性能(包括**面积**和**速度**两个方面)。评价一个设计的代码水平较高,仅仅是说这个设计由硬件向 HDL 代码这种表现形式转换得更流畅、合理。而一个设计的最终性能更大程度上取决于设计工程师所构想的硬件实现方案的效率以及合理性。
|
||||
|
||||
{% note warning %}
|
||||
{% note warning %}
|
||||
|
||||
初学者,特别是由软件转行的初学者,片面追求代码的整洁、简短,这是错误的,是与评价 HDL 的标准背道而驰的。正确的编写代码的方法是,首先要做到对所需实现的硬件电路“胸有成竹”,对该部分硬件的结构与连接十分清晰,然后再用适当的 HDL 语句表达出来即可。
|
||||
初学者,特别是由软件转行的初学者,片面追求代码的整洁、简短,这是错误的,是与评价 HDL 的标准背道而驰的。正确的编写代码的方法是,首先要做到对所需实现的硬件电路“胸有成竹”,对该部分硬件的结构与连接十分清晰,然后再用适当的 HDL 语句表达出来即可。
|
||||
|
||||
{% endnote %}
|
||||
{% endnote %}
|
||||
|
||||
3. Verilog 与 C 的结合
|
||||
|
||||
Verilog 毕竟是硬件描述语言,在抽象层次上比 C 语言要差一些,语法不如 C 灵活,例如文件输入和输出方面,Verilog 的功能显然不如 C。为了克服 Verilog 高级抽象的缺陷,Verilog 的设计者们发明了 PLI。PLI 可以在仿真器中将 C 语言的程序和 Verilog 的程序互相通信,或者在 Verilog 中调用 C 语言的函数库,这样就大大扩展了 Verilog 语言的灵活性和高层次抽象的能力。开发时,一方面,硬件设计者使用 Verilog 进行硬件建模;另一方面,验证工程师却常常使用 C 来编写测试向量,然后通过 Verilog 的 PLI 将 Verilog 和 C 联系起来。这样,C 语言就很好地弥补了 Verilog 高层次建模的缺陷。
|
||||
Verilog 毕竟是硬件描述语言,在抽象层次上比 C 语言要差一些,语法不如 C 灵活,例如文件输入和输出方面,Verilog 的功能显然不如 C。为了克服 Verilog 高级抽象的缺陷,Verilog 的设计者们发明了 PLI(Programming Language Interface)。PLI 可以在仿真器中将 C 语言的程序和 Verilog 的程序互相通信,或者在 Verilog 中调用 C 语言的函数库,这样就大大扩展了 Verilog 语言的灵活性和高层次抽象的能力。开发时,一方面,硬件设计者使用 Verilog 进行硬件建模;另一方面,验证工程师却常常使用 C 来编写测试向量,然后通过 Verilog 的 PLI 将 Verilog 和 C 联系起来。这样,C 语言就很好地弥补了 Verilog 高层次建模的缺陷。
|
||||
|
||||
# 3. HDL 的设计与验证流程<a id="toc.3"></a>
|
||||
|
||||
@@ -155,8 +155,8 @@ RTL 级综合指 **{% label prime@将 RTL 级 HDL 语言翻译成由与、或、
|
||||
|
||||
# 参考文献
|
||||
|
||||
EDA 先锋工作室. *轻松成为设计高手——Verilog HDL 实用精解.* 北京航空航天大学出版社, 2012.
|
||||
EDA 先锋工作室. _轻松成为设计高手——Verilog HDL 实用精解._ 北京航空航天大学出版社, 2012.
|
||||
|
||||
[Part 3——描述方式和设计层次的 5. 设计层次]: https://josh-gao.top/posts/fd117896.html#toc.5
|
||||
|
||||
[^1]: 最新的 Verilog HDL标准为 IEEE 1364-2005。
|
||||
[^1]: 最新的 Verilog HDL标准为 [IEEE 1364-2005](https://ieeexplore.ieee.org/document/1620780)。
|
||||
|
||||
Reference in New Issue
Block a user