资讯详情

EDA技术试验二:组合逻辑电路设计、仿真与实现实验

实验目的

  1. 掌握常用组合逻辑电路 EDA 设计方法;
  2. 掌握基础 QuartusII 逻辑电路设计过程集成开发环境;
  3. 加深对 VerilogHDL 语言理解;
  4. 熟练掌握 DE2-115 使用开发板的方法;
  5. 掌握多层电路 QuartusII 实现综合开发环境;

实验任务及要求

  1. 任务一:BCD 编码器设计/模拟/实现 要求:用 DE2-115 开发板上的四个拨动开关(从板上 18 中间拨动开关 选 4 个)输入 BCD 码,用 DE2-115 开发板上的七段数字管(从 8 个七段数 在码管中选择一个)显示译码结果。
  2. 任务2:译码器设计/模拟/实现 要求:选用 DE2-115 开发板上的 3 个拨开关(从板上 18 个拨动开关 中任选 4 输入,选择 DE2-115 开发板上的 8 个 LED 灯(从 18 个 led 红灯中 任选 8 显示译码结果。
  3. 任务三:4 设计、模拟和实现位全加器 要求:(1)显示两个输入数据和运算结果 DE2-115 在开发板的七段数字管上;用拨号开关输入数据。(2)实现两个模块:操作模块和显示模块。操作模块为主模块,调用显示器 模块实现输入和结果显示。

实验原理和步骤

原理:

  1. 任务一:用 DE2-115 输入开发板上的四个拨动开关(从板上的18个拨动开关中选择4个) BCD 码,用 DE2-115 开发板上的七段数字管(从(从8个七段数字管中选择一个)显示了解码结果。请注意,教科书中的七段数字管是共阴极连接,实验室的数字管是共阳极连接,因此逻辑1和0灯应取相反的值。 第一个实验的4-7BCD编码器,由于输入的数字可以在7段数字管上显示相应的数字功能,因此需要逐一输出每个输入。DE2-115开发板上的7段数字管是共阳极,所以当这段数字管的输入是低电平时,管就会发光。 DE2-115的7段数字管已经分配好了标签,可以直接设置。输入的4位二进制数可以直接转化为十进制数,便于设计。例如,当输入为0000时,输出端应按从高到低的顺序依次为1万,输入为1001时,输出端应为001万;其他类比可以实现。

  2. 任务二: 使能端值、输入值、输出值LED如下图所示: 使能端 3-8翻译3位输入 3-8翻译器的8位输出 8个LED灯的状态 1 000 8’b00000001 灭灭灭灭灭灭亮 1 001 8’b00000010 灭灭灭灭灭灭亮灭 1 010 8’b00000100 灭灭,灭,灭,灭,灭,灭 1 011 8’b00001000 灭灭灭灭亮灭灭灭 1 100 8’b00010000 灭灭灭亮灭灭灭灭 1 101 8’b00100000 灭灭亮灭灭灭灭灭灭灭灭 1 110 8’b01000000 灭亮灭灭灭灭灭灭灭灭灭灭 1 111 8’b10000000 亮灭灭灭灭灭灭灭灭灭灭 0 灭灭灭灭灭灭灭灭灭 在这里插入图片描述

3-8译码器简化示意图 在第二个实验中,3-8译码器的设计思路与第一个实验大致相同。输出端应根据每次输入逐一赋值。这个问题的细微区别是增加了使能端。当使能端为高电平时,译码器工作,否则不工作。当使能端为低电平时,所有LED灯都不亮。当使能端为高电平时,根据输入的三位二进制码确定哪个LED灯亮。比如输入000时,第一盏灯(标号为0)亮,即赋值为0万;输入111时,第8盏灯(序号为7)亮,即赋值为1万;其他的可以以此类推。

  1. 任务三: 第三个实验4位全加器的设计原理非常简单,可以直接使用assign语句赋值输出。难点在于调用显示。调用任务显示此次。首先,考虑到四位二进制数将超过9,因此应分配两个7段数字管,一个显示个位,一个显示十位。此外,在任务中分配数字管的值时,可以通过取整和取余操作分别获得十位和个位值,从而赋值。考虑到输入和结果需要调用任务,在任务中声明输入端时,可以声明为5位。此外,不设置进位输出,以实现共享。显示功能可以通过在主模块中单独调用任务来实现。

步骤:

  1. 任务一: (1) 打开开始菜单 quartusII10.0 软件; (2)在 D 盘新建文件夹,命名为 sy21; (3) 在 quartusII10.0软件中新建一个工程,工程路径为D:/sy21,工程名为sy21; (4)新建文本文件; (5)输入程序。并分配管脚; (6)保存文件; (7)编译; (8)编译成功后,下载程序; (9)在线测试。程序下载到开发板后,观察程序运行结果是否与预期相同。 需要修改不同的程序。
  2. 任务二: (1) 打开开始菜单 quartusII10.0 软件; (2)在 D 盘新建文件夹,命名为 sy22; (3) 在 quartusII10.0软件中新建一个工程,工程路径为D:/sy22,工程名为sy22; (4)新建文本文件; (5)输入程序。并分配管脚; (6)保存文件; (7)编译; (8)编译成功后,下载程序; (9)在线测试。程序下载到开发板后,观察程序运行结果是否与预期相同。 不一样则需要修改程序。
  3. 任务三: (1) 打开开始菜单 quartusII10.0 软件; (2)在 D 盘新建一个文件夹,命名为 sy23; (3) 在 quartusII10.0软件中新建一个工程,工程路径为D:/sy23,工程名为sy23; (4)新建文本文件; (5)输入程序。并分配管脚; (6)保存文件; (7)编译; (8)编译成功后,下载程序; (9)在线测试。程序下载到开发板后,观察程序运行结果是否与预期相同。 需要修改不同的程序。

源程序清单及注释:

  1. 任务一:
module sy21(decodeout,indec); //定义了sy21模块 (*chip_pin="G18,F22,E17,L26,L25,J22,H22"*)output reg[6:0] decodeout;//7管脚在一起 ,H22,J22,L25,L26,E17,F22,G18分别为HEX6、5、4、3、2、1、0引脚号 (*chip_pin="AB28,AC28,AC27,AD27"*)input[3:0] indec;//4管脚一起分配,AD27,AC27,AC28,AB28分别为SW3、2、1、0引脚号 Always@(indec)  Begin      Case(indec)    4’d0:decodeout = 7’b0000001; //显示0     4’d1:decodeout 
       
        = 
        7’b1001111
        ;//显示1 
        4’d2:decodeout 
        = 
        7’b0010010
        ;//显示2 
        4’d3:decodeout 
        = 
        7’b0000110
        ;//显示3 
        4’d4:decodeout 
        = 
        7’b1001100
        ;//显示4 
        4’d5:decodeout 
        = 
        7’b0100100
        ;//显示5 
        4’d6:decodeout 
        = 
        7’b0100000
        ;//显示6 
        4’d7:decodeout 
        = 
        7’b0001111//显示7 
        4’d8:decodeout 
        = 
        7’b0000000
        ;//显示8 
        4’d9:decodeout 
        = 
        7’b0000100
        ;//显示9 Default: decodeout 
        = 
        7’b1111111
        ; // 默认不亮 Endcase End Endmodule//模块描述结束 
       
  1. 任务二:
module sy22(in,out); //定义了sy22模块
(*chip_pin="AB28,AC28,AC27,AD27"*)input[3:0] in;    //4个管脚一起分配,AD27,AC27,AC28,AB28分别为SW3、2、1、0的引脚号
(*chip_pin="G19,F19,E19,F21,E18,J19,H19"*)output reg[7:0] out; //8个管脚一起分配,H19,J19,E18,F18,F21,E19,F19,G19分别为LED7、6、5、4、3、2、1、0的引脚号
Always(*)
Begin
If(in[3])//最高位为使能端,使能端有效的情况
begin
Case(in[2:0])
3’d0:out =8’b00000001;//序号为0的灯亮
3’d1:out =8’b00000010;//序号为1的灯亮
3’d2:out =8’b00000100;//序号为2的灯亮
3’d3:out =8’b00001000;//序号为3的灯亮
3’d4:out =8’b00010000;//序号为4的灯亮
3’d5:out =8’b00100000;//序号为5的灯亮
3’d6:out =8’b01000000;//序号为6的灯亮
3’d7:out =8’b10000000;//序号为7的灯亮
Endcase
End
Else//使能端无效
out=8'b00000000;				//都不亮
Endmodule
  1. 任务三:
module sy23(a,b,cin,da,db,dout);
(*chip_pin="Y23,Y24,AA22,AA23"*) input [3:0]a;
(*chip_pin="AA24,AB23,AB24,AC24"*) input [3:0]b;
(*chip_pin="AB25"*) input cin;
(*chip_pin="AD17,AE17,AG17,AH17,AF17,AG18,AA14,AA17,AB16,AA16,AB17,AB15,AA15,AC17"*) output [13:0]da;
(*chip_pin="AD18,AC18,AB18,AH19,AG19,AF18,AH18,AB19,AA19,AG21,AH21,AE19,AF19,AE18"*) output [13:0]db;
(*chip_pin="V21,U21,AB20,AA21,AD24,AF23,Y19,AA25,AA26,Y25,W26,Y26,W27,W28"*) output  [13:0]dout;
wire [4:0]out;
assign
		out=a+b+cin; // 相加结果
		display m1 (a,da); // 显示第一个数
		display m2 (b,db); // 显示第二个数
		display m3 (out,dout);// 显示结果
endmodule

module display(din,Dout);
input [4:0] din;
output reg [13:0]Dout;
always@(*)
	begin
		case(din)
			5'd0: Dout=14'b00000010000001; //显示0
			5'd1: Dout=14'b00000011001111; //显示1
			5'd2: Dout=14'b00000010010010; //显示2
			5'd3: Dout=14'b00000010000110; //显示3
			5'd4: Dout=14'b00000011001100; //显示4
			5'd5: Dout=14'b00000010100100; //显示5
			5'd6: Dout=14'b00000010100000; //显示6
			5'd7: Dout=14'b00000010001111; //显示7
			5'd8: Dout=14'b00000010000000; //显示8
			5'd9: Dout=14'b00000010000100; //显示9
			5'd10: Dout=14'b10011110000001; //显示10
			5'd11: Dout=14'b10011111001111; //显示11
			5'd12: Dout=14'b10011110010010; //显示12
			5'd13: Dout=14'b10011110000110; //显示13
			5'd14: Dout=14'b10011111001100; //显示14
			5'd15: Dout=14'b10011110100100; //显示15
			5'd16: Dout=14'b10011110100100; //显示16
			5'd17: Dout=14'b10011110100100; //显示17
			5'd18: Dout=14'b10011110100100; //显示18
			5'd19: Dout=14'b10011110100100; //显示19
			5'd20: Dout=14'b00100100000001; //显示20
			5'd21: Dout=14'b00100101001111; //显示21
			5'd22: Dout=14'b00100100010010; //显示22
			5'd23: Dout=14'b00100100000110; //显示23
			5'd24: Dout=14'b00100101001100; //显示24
			5'd25: Dout=14'b00100100100100; //显示25
			5'd26: Dout=14'b00100100100000; //显示26
			5'd27: Dout=14'b00100100001111; //显示27
			5'd28: Dout=14'b00100100000000; //显示28
			5'd29: Dout=14'b00100100000100; //显示29
			5'd30: Dout=14'b00001100000001; //显示30
			5'd31: Dout=14'b00001101001111; //显示31
		endcase
	end
endmodule

实验结果与分析

实验结果

  1. 任务一:
  2. 任务二:
  3. 任务三:

实验结果分析

任务一: 代码编译通过。七段数码管成功呈现出1~9位数字。 任务二: 代码编译通过。能够通过拨动开关来体现结果。 任务三: 代码编译通过。全加器的结果能够成功显示、

标签: 电连接器y24

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司