review josh-verilog-4, change hyperref styles

This commit is contained in:
2023-04-17 19:46:59 +08:00
parent 5f2488bfa9
commit e50c0bcfcc
6 changed files with 302 additions and 265 deletions
+14 -14
View File
@@ -199,7 +199,7 @@ endmodule
这种**在模块中实例化其他功能模块**的描述方式被称之为**结构化描述**。
## 2.2. 3 种描述方法
## 2.2. 3 种描述方法<a id="toc.2.2"></a>
从以上的描述可以看出 Verilog 语言的 3 种基本的描述方法(基本上所有的 Verilog 功能模块都是由这 3 种方式来描述):
@@ -215,9 +215,9 @@ endmodule
- 用户定义原语(UDP)实例化:实例化用户定义的原语。
在[《Part 3——描述方式和设计层次》][]中会详细介绍 Verilog 语言中的这 3 种描述方式。
在 [Part 3——描述方式和设计层次][]中会详细介绍 Verilog 语言中的这 3 种描述方式。
# 3. Verilog 的基本词法
# 3. Verilog 的基本词法<>
1. Verilog HDL 是一种**大小写敏感**的语言,这一点与 VHDL 不同,因此在书写的时候要格外注意。在 Verilog 语言中,**所有的关键字(又叫保留字)都为小写**。Verilog 的内部信号名(或称为标识符)使用大写和小写都可以。标识符可以是字母、数字、`$`(美元符号)和 `_`(下划线)任意组合,只要**第一个字符是字母或者下划线**即可。
@@ -419,7 +419,7 @@ Verilog 语言中的编译指令不止这几条,其他不常用的指令这里
- `Z` 表示高阻状态,也就是**没有任何驱动**,通常用来对**三态总线**进行建模。
在[第 7 节](#7)将提到 Verilog 语言中的变量类型。通常 `net` 型变量如果没有初始化,其值为 `Z`,`register` 型变量如果没有初始化,其值为 `X` 。这一点在仿真时显得比较有意义。
在[第 7 节](#toc.7)将提到 Verilog 语言中的变量类型。通常 `net` 型变量如果没有初始化,其值为 `Z`,`register` 型变量如果没有初始化,其值为 `X` 。这一点在仿真时显得比较有意义。
{% note warning %}
@@ -487,7 +487,7 @@ Message = "Hello World";
这样就将字符串常量存入到 `Message` 变量中。
# 7. 变量类型<a id=7></a>
# 7. 变量类型<a id="toc.7"></a>
在 Verilog 语言中,有两大变量类型:
@@ -518,7 +518,7 @@ Message = "Hello World";
线网类型主要用在连续赋值语句中,以及作为模块之间的互连信号。
在[《Part 3——描述方式和设计层次》][]中会详细阐述常用线网类型的使用方法。
在 [Part 3——描述方式和设计层次][]中会详细阐述常用线网类型的使用方法。
## 7.2. 寄存器类型
@@ -566,7 +566,7 @@ Message = "Hello World";
同时,在 Verilog 中,**不存可以对整个存储器赋值的语句**,必须对每个单元独立赋值。除非使用 `$readmemb` 或 `$readmemh` 系统任务从文件中读入整个或者部分存储器的数据。
> 在[《Part 7—— 逻辑验证与 testbench 编写》][]中将讨论如何从文件中读入数据给存储器赋值。
> 在 [Part 7—— 逻辑验证与 testbench 编写][]中将讨论如何从文件中读入数据给存储器赋值。
### 7.2.2. `integer` 类型
@@ -593,7 +593,7 @@ end
在下一小节中,将引入“驱动”和“赋值”两个概念,深入探讨两种变量的含义。
## 7.4. 驱动和赋值
## 7.4. 驱动和赋值<a id>="toc.7.4"</a>
为了更清楚地描述寄存器和线网变量的概念,将以上述[实例代码](#HelloVlogCode)中的语句来说明。首先,引入 Verilog 语言中两个重要的概念:驱动(Driving)和赋值(Assigning)。
@@ -637,7 +637,7 @@ reg A_xor_wire
不管采用哪种方式,所描述的是一样的组合逻辑电路。尤其是第二种描述,虽然其在语言中被定义为 `reg` 型,但并不是对应硬件上的触发器(flip-flop),而是 Verilog 语言仿真语义上的寄存器概念。
但是,在对实际电路中 D 触发器建模的时候,必须采用 `reg` 型的变量。[图 2-3](#fig.2-3)是 D 触发器的模型。
但是,在对实际电路中 D 触发器建模的时候,必须采用 `reg` 型的变量。[图 2-3](#fig.2-3) 是 D 触发器的模型。
<a id="fig.2-3"></a>
@@ -672,7 +672,7 @@ parameter xor_delay = 4;
前面介绍的 `` `define`` 是一种全局的定义,而 `parameter` 是出现在模块内部的**局部定义**,而且可以被**灵活改变**,这是 `parameter` 的一个重要特征。
在[《Part 3——描述方式和设计层次》的 4.2 小节][]中会详细探讨改变模块参数的方法。
在 [Part 3——描述方式和设计层次的 4.2 参数][]小节会详细探讨改变模块参数的方法。
# 9. Verilog 中的并发与顺序
@@ -695,7 +695,7 @@ Verilog 仿真器用来模拟硬件的并行行为的方式类似于软件中的
后续将会重点介绍 Verilog 语言中的这一并行特性,同时阐述 Verilog 的高级仿真原理,希望能帮助大家领会 Verilog 的语义精髓。
# 10. 操作数、操作符和表达式
# 10. 操作数、操作符和表达式<a id="toc.10"></a>
## 10.1. 操作符
@@ -984,7 +984,7 @@ $readmemh ("Read_In_File.txt", DataSource);
EDA 先锋工作室. *轻松成为设计高手——Verilog HDL 实用精解.* 北京航空航天大学出版社, 2012.
[Part 1——初识 HDL 设计方法]: https://josh-gao.top/posts/460433dd.html
[《Part 3——描述方式和设计层次》]: https://josh-gao.top/posts/fd117896.html
[Part 3——描述方式和设计层次]: https://josh-gao.top/posts/fd117896.html
[IEEE Std. 1364-2005]: https://standards.ieee.org/standard/1364-2005.html
[《Part 7—— 逻辑验证与 testbench 编写》]: https://josh-gao.top/posts/e060f513.html
[《Part 3——描述方式和设计层次》的 4.2 小节]: https://josh-gao.top/posts/fd117896.html#%E5%8F%82%E6%95%B0
[Part 7—— 逻辑验证与 testbench 编写]: https://josh-gao.top/posts/e060f513.html
[Part 3——描述方式和设计层次的 4.2 参数]: https://josh-gao.top/posts/fd117896.html#toc.4.2