锁相环技术原理及FPGA实现(第一章1.3)

1.3 Verilog HDL 语言简介

1.3.1 HDL 语言简介

        PLD(可编程逻辑器件)出现后,需要有一种设计切入点( Design Entry)将设计者的意图表现出来,并最终在具体器件上实现。早期主要有两种设计方式:一种是采取画原理图的方式,就像 PLD 出现之前将分散的 TTL( Transistor-Transistor Logic)芯片组合成电路板一样进行设计,这种方式只是将电路板变成了一颗芯片而已;还有一种设计方式是用逻辑方程式来表现设计者意图,将多条方程式语句组成的文件经过编译器编译后产生相应文件,再由专用工具写到可编程逻辑器件中,从而实现各种逻辑功能。
        随着 PLD 器件技术的发展,开发工具的功能已十分强大。目前设计输入方式在形式上虽然仍有原理图输入方式、状态机输入方式和 HDL 输入方式,但由于 HDL 输入方式具有其他方式无法比拟的系列优点,其他输入方式很少使用。 HDL 设计输入方式,即采用编程语言进行设计输入的方式主要有以下几方面的优点。
        ( 1) HDL 没有固定的目标器件,在进行设计时基本上不需要考虑器件的具体结构。由于不同厂商生产的 PLD 器件虽然功能相似,但器件内部结构上毕竟有不同之处,如采用原理图输入方式,则需要对具体器件的结构、功能部件有一定的了解,从而增加了设计的难度。
        ( 2) HDL 设计通用性、兼容性好,十分便于移植。用 HDL 进行设计在大多数情况下几乎不需要做任何修改就可以在各种设计环境、 PLD 器件之间编译实现,这给项目的升级开发、程序复用、程序交流、程序维护带来很大的便利。
        ( 3)由于 HDL 设计之时不须考虑硬件结构,不须考虑布局布线等问题,只须结合仿真软件对设计结果进行仿真即可得到满意的结果,因此可以大大降低设计的复杂度和难度。目前的 HDL 语言较多,主要有 VHDL( VHSIC Hardware Description Language, VHSIC是 Very High Speed Integrated Circuit 的缩写,超高速集成电路硬件描述语言)、 Verilog HDL、AHDL、 SystemC、 HandelC、 System Verilog、 System VHDL 等,其中主流工具语言为 VHDL和 Verilog HDL,其他 HDL 仍在发展阶段本身不够成熟,或者是公司专为自己产品开发的工具应用面不够广泛。
        VHDL 和 Verilog HDL 各具有优势,在国内的应用情况差不多平分秋色。 VHDL 语法严谨,而正因为其严谨使得描述具体设计时感觉较为烦琐; Verilog HDL 语法宽松,因其宽松导致描述具体设计时更容易产生问题,且对于同一个设计,在应用不同 EDA 工具实现时,可能出现不同的实现结果,给程序交流、复用带来麻烦。虽然两种语言的结构及形式不同,但编程设计的思路是一样的,读者在掌握了其中一种语言后,很容易读懂其他 HDL 语言。本书所有 FPGA 实例均采用 Verilog HDL 语言进行设计。

1.3.2 Verilog HDL 语言特点

        Verilog HDL 是在 1983 年,由 GDA( GateWay Design Automation)公司的 Phil Moorby
首创的。 Phi Moorby 后来成为 Verilog-XL 的主要设计者和 Cadence 公司( Cadence Design
System)的第一个合伙人。在 1984 年至 1985 年, Moorby 设计出了第一个关于 Verilog-XL的仿真器。 1986 年,他对 Verilog HDL 的发展又做出了另一个巨大贡献—提出了用于快速门级仿真的 XL 算法。
        随着 Verilog-XL 算法的成功, Verilog HDL 语言得到迅速发展。 1989 年, Cadence 公司
收购了 GDA 公司, Verilog HDL 语言成为 Cadence 公司的私有财产。 1990 年, Cadence 公
司决定公开 Verilog HDL 语言,于是成立了 OVI( Open Verilog International)组织来负责
Verilog HDL 语言的发展。基于 Verilog HDL 的优越性, IEEE 于 1995 年制定了 Verilog HDL
的 IEEE 标准,即 Verilog HDL 1364—1995。随后 Verilog HDL 不断完善和发展,并先后制
定了 IEEE 1364—2001、 IEEE 1364—2005 两个标准。
        Verilog HDL 是一种用于数字逻辑电路设计的语言。用 Verilog HDL 描述的电路设计就是该路的 Verilog HDL 模型。 Verilog HDL 既是一种行为描述语言,也是一种结构描述语言。这也就说,既可以用电路的功能描述,也可以用元器件和它们之间的连接来建立所设计电路的 Verilog HDL 模型。 Verilog HDL 模型可以是实际电路的不同级别的抽像。这些抽象的级别和它们对应的模型类型共有以下几种。
         系统级( System):用高级语言结构实现设计模块的外部性能的模型。
         算法级( Algorithm):用高级语言结构实现设计算法的模型。
         RTL 级( Register Transfer Level):描述数字在寄存器之间流动,以及如何处理这些数据的模型。
         门级( Switch-Level):描述器件中三极管和存储节点,以及它们之间连接的模型。
        一个复杂电路系统的完整 Verilog HDL 模型是由若干个 Verilog HDL 模块构成的,每一个模块又可以由若干个子模块构成,其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块进行交互的现存电路或激励信号源。 利用 Verilog HDL 语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构,从而描述极其复杂的大型设计,并对所作设计的逻辑进行严格的验证。
        Verilog HDL 行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算
法级和 RTL 级的模型设计,这种行为描述语言具有以下功能。
         可描述顺序执行或并行执行的程序结构。
         用延迟表达式或事件表达式来明确地控制过程的启动时间。
         通过命名的事件来触发其他过程里的激活行为或停止行为。
         提供了条件、 if-else、 case、循环程序结构。
         提供了可带参数且非零延续时间的任务( Task)程序结构。
         提供了可定义新的操作符的函数结构( Function)。

         提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。Verilog HDL 语言作为一种结构化的语言,也非常适合于门级和开关级的模型设计,因其结构化的特点又使它具有以下功能。
         提供了完整的一套组合型原语( Primitive)。
         提供了双向通路和电阻器件的原语。
         可建立 MOS 器件的电荷分享和电荷衰减动态模型。
        Verilog HDL 的构造性语句可以精确地建立信号的模型,这是因为在 Verilog HDL 中,
        提供了延迟和输出强度的原语来建立精确程度很高的信号模型。信号值可以有不同的强度,
可以通过设计宽范围的模糊值来降低不确定条件的影响。
        Verilog HDL 作为一种高级的硬件描述编程语言,有着类似 C 语言的风格,其中有许多语句,如 if 语句、 case 语句等,和 C 语言中的对应语句十分相似。如果读者已经有一定的C 语言编程基础,那么学习 Verilog HDL 并不困难,我们只要对 Verilog HDL 某些语句的特殊方面着重理解,并加强上机练习就能很好地掌握它,利用它的强大功能来设计复杂的数字逻辑电路。

1.3.3 Verilog HDL 程序结构

        Verilog HDL 的基本设计单元是模块( block)。一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的。下面是一段完整的 VerilogHDL 程序代码。

module block (a,b,c,d)
input a,b;
output c,d;
assign c= a | b;
assign d= a & b;
endmodule
        在上面的例子中,模块的第 2、 3 行说明了接口的信号流向,第 4、 5 行说明了模块的
逻辑功能。以上就是设计一个简单的 Verilog HDL 程序模块所需的全部内容。从这个例子可
以看出, Verilog HDL 结构完全嵌在 module 和 endmodule 声明语句之间,每个 Verilog 程序
包括四个主要部分:端口定义、 I/O 说明、内部信号声明和功能定义。
        ( 1)模块的端口定义。模块的端口声明了模块的输入输出接口,其格式如下。
module 模块名(接口 1,接口 2, …)
        ( 2)模块内容。模块的内容包括 I/O 说明、内部信号声明和功能定义。 I/O 说明的格式为

输入口: input 端口名 1,端口名 2, …,端口名 i;
输出口: output 端口名 1,端口名 2, …,端口名 j;
//共有 i 个端口
//共有 j 个端口

        I/O 说明也可以写在端口声明语句里,其格式如下。

module 模块名( input 端口 1, input 端口 2, …output 端口 1, input 端口 2, …) ;
内部信号说明:在模块内用到的与端口有关的 wire 和 reg 变量的声明,例如
reg [width-1: 0] R 变量 1, R 变量 2, …;
wire [width-1: 0] W 变量 1, W 变量 2, …;
功能定义:模块中最重要的部分是逻辑功能定义部分。有三种方法可以在模块中产生
逻辑,即用 assign 声明语句,用实例元件和用 always 块,下面分别是三种方法实现逻辑功
能定义的例子。
//用 assign 声明语句
assign a = b & c;
//用实例元件
and and_inst(q, a, b);
//用 always 块
always @(posedge clk or posedge clr)
begin
if (clr)
q <= 0;
else
if (en)
q <= d;
end
        需要注意的是,如果用 Verilog 模块实现一定的功能,首先应该清楚哪些是同时发生的,
哪些是顺序发生的。上面三个例子分别采用了 assign 语句、实例元件和 always 块,这三个
例子描述的逻辑功能是同时执行的。也就是说,如果把这三项写到一个 Verilog 模块文件中
去,它们的次序不会影响逻辑实现的功能。这三项是同时执行的,也就是并发的。
然而,在 always 模块内,逻辑是按照指定的顺序执行的。 always 块中的语句称为顺序
语句,因为它们是顺序执行的。请注意,两个或多个 always 模块也是同时执行的,但是模
块内部的语句是顺序执行的。看一下 always 内的语句,你就会明白它是如何实现功能的。
if…else…if 必须顺序执行,否则其功能就没有任何意义。如果 else 语句在 if 语句之前执行,
功能就不符合要求。为了能实现上述描述的功能, always 模块内部的语句将按照书写的顺
序执行。

1.4 Quartus II 开发套件

1.4.1 Quartus II 开发套件简介

        Quartus II 是 Altera 公司的综合性 PLD/FPGA 开发软件,支持原理图、 VHDL、 Verilog HDL
和 AHDL( Altera Hardware Description Language)等多种设计输入形式,内嵌自带的综合器和仿真器,可以完成从设计输入到硬件配置的完整 PLD 设计流程。
        Quartus II 可以在 XP、 Linux 和 UNIX 上使用,除了可以使用 Tcl 脚本完成设计流程外,
还提供了完善的用户图形界面设计方式,具有运行速度快、界面统一、功能集中、易学易
用等特点。 Quartus II 支持 Altera 的 IP 核,包含了 LPM/MegaFunction 宏功能模块库,用户
可以充分利用成熟的模块,简化设计的复杂性、加快设计速度。对第三方 EDA 工具的良好
支持也使用户可以在设计流程的各个阶段使用熟悉的第三方 EDA 工具。
        此外, Quartus II 通过和 DSP Builder 工具与 MATLAB/Simulink 相结合,可以方便地实
现各种 DSP 应用系统;支持 Altera 的片上可编程系统( SoPC)开发,集系统级设计、嵌入
式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
Maxplus II 作为 Altera 的上一代 PLD 设计软件,由于其出色的易用性而得到了广泛的
应用。目前 Altera 已经停止了对 Maxplus II 的更新支持, Quartus II 与之相比不仅仅是支持
器件类型的丰富和图形界面的改变, Altera 在 Quartus II 中包含了许多诸如 SignalTap II、 Chip
Editor 和 RTL Viewer 的设计辅助工具,集成了 SoPC 和 HardCopy 设计流程,并且继承了
Maxplus II 友好的图形界面及简便的使用方法。
        Quartus II 提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部
特性,包括:
         可利用原理图、结构框图、 Verilog HDL、 AHDL 和 VHDL 完成电路描述,并将其保
存为设计实体文件;
         芯片(电路)平面布局连线编辑;
         LogicLock 增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响
较小或无影响的后续模块;
         功能强大的逻辑综合工具;
         完备的电路功能仿真与时序逻辑仿真工具;
         定时/时序分析与关键路径延时分析;
         可使用 SignalTap II 逻辑分析工具进行嵌入式的逻辑分析;
         支持软件源文件的添加和创建,并将它们链接起来生成编程文件;
         使用组合编译方式可一次完成整体设计流程;
         自动定位编译错误;
         高效的编程与验证工具;
         可读入标准的 EDIF 网表文件、 VHDL 网表文件和 Verilog 网表文件;
         能生成第三方 EDA 软件使用的 VHDL 网表文件和 Verilog 网表文件。

1.4.2 Quartus II 软件的用户界面

        启动 Quartus II 软件后,其默认界面如图 1-8 所示,主要由标题栏、菜单栏、工具栏、资源管理窗、编译状态显示窗、信息显示窗和工程工作区等部分组成。
( 1)标题栏。标题栏显示当前工程的路径和程序名称。

猜你喜欢

转载自blog.csdn.net/qq_43416206/article/details/135277574