【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

一、 实验要求

1. 编码/译码器的设计与实现;比较器的设计与实现;全加器的设计与实现;

2. 在Quartus II 环境下,运用Verilog HDL 语言进行编程开发,并完成对电路工作情况的仿真模拟;

3. 完成配置程序的下载,并在开发板上对程序进行功能验证。

二、 实验过程步骤

1、设计模块1:四线—二线优先编码器pre_encode4_2

        a.模块功能要求

        编码器通常分为两大类:普通编码器和优先编码器。其中普通编码器就是对某一个给定时刻只能对一个输入信号进行编码的编码器,它的输入端口不允许同一时刻出现两个以上的有效输入信号;优先编码器就是对某一个给定时刻只对优先级最高的输入信号进行编码的编码器,它的输入端口允许多个输入信号同时有效。

        通常,四至二线编码器的真值表如下表所示。该编码器的工作原理为:编码器将对四个输入信号进行编码操作,然后以两位二进制码的形式输出,这里输入信号为低电平有效。 

D3 D2 D1 D0 Q1 Q0
0 × × × 1 1
1 0 × × 1 0
1 1 0 × 0 1
1 1 1 0 0 0

        b.实验步骤

        (1)利用wizard新建项目,所选器件为MAX II 系列型号为EPM1270T144C5N的器件。

        (2)新建Verilog文件,名称与模块名一致,保存为pre_encode4_2.v。程序内容如下:

module pre_encode4_2(d,q);
input [3:0]d;
output [1:0]q;
reg [1:0]q;

always@(*)
if(~d[3])
	q=2'b11;
else if(~d[2])
	q=2'b10;
else if(~d[1])
	q=2'b01;
else
	q=2'b00;

endmodule

        (3)将pre_encode4_2.v设为顶层实体后编译,纠错直至编译成功。

        (4)新建仿真文件Vector Waveform File,保存为pre_encode4_2.vmf。在左侧节点区右击,Insert→Insert Node or Bus→Node Finder,Filter一栏选中“所有管脚”后,点击List,再点击全选,将左侧所有节点全部添加至右侧Selected Nodes窗口中。

        (5)首先根据仿真需求,在Edit→End Time中设置所需仿真时间。本实验中设为5us。然后将D3、D2、D1、D0分别设为周期为3.2us、1.6us、800ns、400ns的clock信号,输入波形如下图所示。

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

         (6)点击Processing→Simulator Tool,打开pre_encode4_2.vmf文件,先点击Start,仿真成功后再点击Report,仿真波形输出如下图所示。

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

2、设计模块2:二线—四线译码器decode2_4

        a.模块功能要求

        输入为二位二进制信号a,输出为四位二进制数y,当s=1时译码器不工作,当s=0时开始译码。译码器真值表如下表所示。

S A1 A0 Y3 Y2 Y1 Y0
1 × × 1 1 1 1
0 0 0 1 1 1 0
0 0 1 1 1 0 1
0 1 0 1 0 1 1
0 1 1 0 1 1 1

        b.实验步骤

        (1)新建Verilog文件,名称与模块名一致,保存为decode2_4.v。程序内容如下:

module decode2_4(s,a,y);
input s;
input [1:0]a;
output [3:0]y;

reg [3:0]y;

always@(*)
if(s)
	y=4'b1111;
else
	case(a)
	2'b00:y=4'b1110;
	2'b01:y=4'b1101;
	2'b10:y=4'b1011;
	2'b11:y=4'b0111;
	default:y=4'bxxxx;
	endcase
	
endmodule

        (2)将decode2_4.v设为顶层实体后编译,纠错直至编译成功。

        (3)新建仿真文件Vector Waveform File,保存为decode2_4.vmf。首先根据仿真需求,在Edit→End Time中设置所需仿真时间。本实验中设为5us。然后将a1、a0分别设为周期为800ns、400ns的clock信号,前3.2us将s设为0,即译码状态,后续设为1。

        (5)点击Processing→Simulator Tool,打开decode2_4.vmf文件,Mode选择Timing。先点击Start,仿真成功后再点击Report,仿真波形输出如下图所示。

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

        (6)管脚分配与实际电路密切相关,分配情况如下图所示。完成后一定要记得编译一下。

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

        (7)下载

        实验电路板接电源,确保其供电正常;连接下载电缆到实验板上的下载口;点击【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA进入下载界面。

        点击Hardware Setup选择所用硬件USB,Mode选项选择JTAG方式。点击Add File...加入下载数据流文件sy2.pof,检查器件名称是否正确,然后进行下载。

        点击Start按钮开始下载,下载完成后不断电调试板子。当选择JTAG下载方式时,数据是直接下载到FPGA芯片中,当断电后数据即消失,下次上电后要重新下载数据。

3、设计模块3:二输入数值比较器comp_2

        a.模块功能要求

        数值比较器的设计,通常依据两组二进制数码的数值大小来进行比较,即a>b、a=b或a<b,这三种情况有一种值为真,A、B皆为二位信号。

         b.实验步骤

        (1)新建Verilog文件,名称与模块名一致,保存为comp_2.v。程序内容如下:

module comp_2(a,b,yg,ye,yl);
input [1:0]a,b;
output yg,ye,yl;

assign yg=(a>b) ? 1'b1:1'b0;
assign ye=(a==b) ? 1'b1:1'b0;
assign yl=~(yg | ye);

endmodule

        (2)将comp_2.v设为顶层实体后编译,纠错直至编译成功。

        (3)新建仿真文件Vector Waveform File,保存为comp_2.vmf。

        首先根据仿真需求,在Edit→End Time中设置所需仿真时间。本实验中设为5us。然后将a1、a0、b1、b0分别设为周期为800ns、400ns、3.2us、1.6us的clock信号,输入波形如下图所示。

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA
        (4)点击Processing→Simulator Tool,打开comp_2.vmf文件,Mode选择Timing。先点击Start,仿真成功后再点击Report,仿真波形输出如下图所示。 【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

4、设计模块4:全加器full_add

        a.模块功能要求

        全加器其实就是考虑到进位的加法器。一位全加器的电路符号如下图所示,真值表如下表所示。

全加器输入 全加器输出
A B Ci S Co
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

        b.实验步骤

        (1)新建Verilog文件,名称与模块名一致,保存为full_add.v。程序内容如下:

module full_add(A,B,CI,S,CO);
input A,B,CI;
output S,CO;
wire c_tmp;

assign c_tmp=~( A & B | (A | B) & CI);
assign CO =~c_tmp;
assign S =( c_tmp & (A | B | CI)) | (A & B & CI);

endmodule

        (2)将full_add.v设为顶层实体后编译,纠错直至编译成功。

        (3)新建仿真文件Vector Waveform File,保存为full_add.vmf。首先根据仿真需求,在Edit→End Time中设置所需仿真时间。本实验中设为5us。然后将A、B、CI分别设为周期为1.6us、800ns、400ns的clock信号,输入波形如下图所示。【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

        (4)点击Processing→Simulator Tool,打开full_add.vmf文件,Mode选择Functional。先点击Start,仿真成功后再点击Report,仿真波形输出如下图所示。

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

三、 实验结果分析总结

1、模块功能仿真结果分析总结

        (1)模块3数值比较器的输出波形响应延迟约为10ns,在仿真误差的可接受范围之内。当仿真模式选择的是Timing时,输入波形产生阶跃时对输出有干扰,产生了一些无效的短暂高电平信号,如下图所示。

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

         将仿真模式改为Functional,发现输出波形中干扰消失。

        (2)模块2译码器中,若s的上升沿设在输入信号a的一个周期结束处,会对y[0]的输出产生干扰,如下第一张图所示。若s的上升沿设在稍后输入信号稳定区间内,则无干扰产生,如下第二张图所示。 

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA

2、模块功能测试记录与分析总结

         模块2二线—四线译码器实验结果记录表如下所示:

拨动开关1脚(A1) 拨动开关2脚(A0) 拨动开关3脚(S) LED D1(Y3) LED D2(Y2) LED D3(Y1) LED D4(Y0)
× × 1
0 0 0
0 1
1 0
1 1

【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA 【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA 【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA  【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA 【数字系统】组合逻辑电路设计:4-2线优先编码器/2-4线译码器/比较器/全加器 Quartus II 环境/Verilog HDL语言/编程+仿真+开发板/FPGA/CPLD/EDA    

         以上五张下载板图分别对应译码器实验结果记录表的每一行,全部核验成功。


往期数字系统设计专栏文章:

上一篇:组合逻辑电路设计入门 ——Verilog HDL语言


下一篇:【Sublime】Ubuntu下为 Sublime 配置 Verilog 语法检查插件