FPGA/CPLD应用技术(Verilog语言版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

任务3 基于HDL实现的基本门电路设计

任务分析

在第1章的任务1中,采用原理图输入方式实现了基本门电路设计,这里改用Verilog HDL语言来描述基本门电路,从而完成设计任务。首先用Verilog来描述一个2输入与非门电路,基本门电路的相关说明资料可参考任务1。

任务实现

用Verilog HDL的结构级描述方式描述的2输入与非门电路模块的程序代码nand2_ex1.v如下:

// 2输入与非门电路
//nand2_ex1.v
module nand2_ex1(            //定义2输入与非门电路模块nand2_ex1
a,                           //模块的外部输入/输出端口列表
b,
f
);
input a,b;                   //a、b为输入端口
output f;                    //f为输出端口
nand inst1 (f,a,b);          //调用Verilog内部预定义的门级原语nand
endmodule

上述代码首先定义了模块的名称,也就是2输入与非门顶层模块名 “nand2_ex1”,接下来描述了输入/输出端口列表,定义了两个输入,分别是a和b,一个输出f。

语句“input a,b;”和“output f;”分别定义输入/输出属性和位宽,2输入与非门有2个输入,1个输出,都是1位位宽。

小知识

Verilog中包含有一组用于构成电路设计的最常用逻辑门的功能模型,称为门级原语(gate level primitive)。每个基本门原语都有可与外部电路连接的输入/输出端口,输入/输出端口的关系通过真值表来定义。基本门原语的端口列表放在原语名右边的圆括号中,各个端口用逗号隔开。输出端口信号名必须放在端口列表的最前面,输入端口信号名紧接在后面。例如,nand(f,a,b,c)表示的是一个三输入与非门,f是其输出端口,a、b和c是其三个输入端口。而or(f,a,b)表示的是一个二输入或门,f是其输出端口,a和b是其两个输入端口。表2.1列出了Verilog中预定义的基本门级原语。

表2.1 Verilog中预定义的基本门原语

用Verilog的门级描述方式进行逻辑电路的设计,通常就是通过调用基本门级原语,并编写代码将这些门级原语连接起来构成较大的电路,因此这种描述电路的方式也称为结构描述。门级原语的调用语句是以原语的关键字名称开始的,空格后面紧接着一个引用名以及用圆括号括起来的输入/输出信号端口列表,如上例代码nand2_ex1.v中调用与非门原语nand的语句:“nand inst1 (f,a,b);”,语句中的inst1即为引用名。

用Verilog HDL描述方式进行2输入与非门电路设计可按下面的步骤进行。

1.新建工程

启动Quartus Ⅱ软件,在“File”下拉菜单中选取“New Project Wizard”,新建工程nand2_ex1。

2.设计输入

(1)在“File”下拉菜单中选取“New”选项,出现如图2.1所示的窗口,选择设计文件“Design Files”列表中的“Verilog HDL File”输入类型,单击“OK”按钮便可进入Verilog文本编辑界面。

(2)在Verilog文本编辑器中输入程序代码,输入完成后,选择“File”菜单下的“Save As”命令,将文件保存在所创建的工程目录中,文件名为nand2_ex1.v,如图2.2所示。

图2.1 选择文件输入类型窗口

图2.2 Verilog文本编辑器

小经验

在输入代码时,还可以利用其他环境下的文本编辑器进行源代码编辑,并将文件保存为扩展名为.v的文件。启动Quartus Ⅱ软件并完成新建工程后,选择“Project”菜单下的“Add/Remove Files in Project”命令,弹出如图2.3所示的对话窗口。单击窗口右侧的“”按钮,找到已有的代码文件,单击“Add”按钮,最后再单击“OK”按钮,就可以将已经编辑好的代码文件加入到当前工程中了。

图2.3 将已有的设计文件加入到当前工程

3.工程编译

选择“Processing”菜单下的“Start Compilation”,或者单击位于工具栏的编译按钮,完成工程的编译。

4.设计仿真

(1)建立波形文件。选择“File”菜单下的“New”命令,在弹出的窗口中选择“Other Files”下的“Vector Waveform File”,新建仿真波形文件。在波形文件编辑窗口,单击“File”菜单下的“Save as”选项,将该波形文件另存为“nand2_ex1.vwf”。

(2)添加观察信号。在波形文件编辑窗口的左边空白处单击鼠标右键,选择“Insert”选项下的“Insert Node or Bus”命令,在该窗口下单击“Node Finder”按钮,在“Node Finder”窗口中单击“List”按钮,设计的4个引脚出现在左边的空白窗口处,选中所有引脚,单击窗口中间的“》”按钮,4个引脚出现在窗口的右边空白处,再单击“OK”按钮回到波形编辑窗口。

(3)添加激励。通过拖曳波形,产生想要的激励输入信号。

(4)功能仿真。添加完激励信号后,保存波形文件。选择“Processing”菜单下的“Simulator Tool”选项,在“Simulation mode”选项框中选择“Functional”,再单击“Generate Functional Simulation Netlist”按钮,产生仿真需要的网表文件,然后选中“Overwrite simulation input file with simulation result”,否则不能显示仿真结果,单击“Start”按钮进行仿真。

仿真完成后,单击“Open”按钮打开仿真结果,如图2.4所示,2输入与非门电路模块逻辑功能正确。

(5)时序仿真。在仿真工具对话框中的“Simulation mode”选为“Timing”模式,进行时序仿真,仿真结果如图2.5所示。

图2.4 采用Verilog HDL设计的2输入与非门功能仿真结果

图2.5 采用Verilog HDL设计的2输入与非门时序仿真结果

可以看到,在任务3中采用Verilog HDL方法与任务1中采用原理图设计方法建立的2输入与非门电路模块比较,功能仿真波形和时序仿真波形与任务1中相应的功能仿真波形和时序仿真波形是完全一致的。

任务小结

通过采用Verilog描述一个2输入与非门电路的设计过程,使读者了解在Quartus Ⅱ开发环境中采用Verilog进行数字系统设计的方法和步骤,了解Verilog硬件描述语言的基本结构特点。

自己做

按照任务3中的实现步骤,自行完成用Verilog HDL的结构级描述方式描述的与门、或门、或非门以及异或门电路模块的设计。