致谢:本笔记基于龚黎明的系列讲解视频。
1 Verilog简介(Verilog语法学习者可跳过该节)
Verilog是一门类C语言
Verilog是一门类C语言,语法与C接近,但Verilog是硬件设计语言,与C实质不同。
Verilog代码对应硬件实体。比如在Verilog里写的a+b,最后会得到由硬件实现的加法器
Verilog代码到硬件的过程叫综合。综合就是将Verilog代码转化为硬件实现
Verilog并行执行
HDL: Hardware Description Language
Verilog HDL使硬件设计师们得以专注于逻辑,而不需要考虑硬件层面的实现。同样的代码只要经过不同的库综合,就可以在不同的硬件上运行。因此Verilog的代码具有极高的可复用性。
使用Verilog的绝大多数开发都处于寄存器传输级。
软核、固核与硬核
软核(Softcore):功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的Verilog HDL模型。
固核:在某一种现场可编程门阵列(FPGA)器件上实现的,经验证是正确的总门数在5000以上的电路结构编码文件。
硬核:在某一种专用的半导体集成工艺(ASIC)的器件上实现的,经验证是正确的总门数在5000以上的电路结构掩膜
显然,在具体实现手段和工艺技术尚未确定的逻辑设计阶段,软核具有最大的灵活性。因此,发展软核的设计和推广软核的重用技术是非常有必要的。
自顶向下(Top-Down)设计
(对上图的讲解:P2 | 2:55)
2 Verilog基本语法
Verilog语法概述
行为级描述/寄存器传输级(RTL)描述/系统级描述:把module当成黑盒,描述module输入与输出的关系。门级实现由综合工具推断,常常能做到最优。
结构级描述/门级描述:把module作为白盒,而描述组成module的门电路(部件)
module (in1, in2, ..., out1, out2)
input in1, in2, ...;
output out1, out2, ...;
...
endmodule
// 注释1
/* 注释2 */
基本语法
Verilog区分大小写
Verilog的关键字都是小写
module, endmodule定义一个基本模块,两个关键字间的语句是对该模块的描述。定义模块方便复用。
parameter关键字定义一个参数,增强模块的通用性
output, input关键字指定输入输出
always @(posedge/negedge clk)语句,每当clk出现上升/下降沿时,就执行接下来的语句块(