review josh-verilog-4, change hyperref styles
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user