任务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的结构级描述方式描述的与门、或门、或非门以及异或门电路模块的设计。