HEU大二数电组合逻辑电路设计实验

Contents


1 实验目的

2 实验仪器

3 子任务

3.1 四人表决器

  • 实验原理
  • 实验步骤
  • 具体实现
  • 问题解决

3.2 多用户呼叫器

  • 实验原理
  • 实验步骤
  • 具体实现
  • 问题解决

3.3 数值比较器

  • 实验原理
  • 实验步骤
  • 具体实现
  • 问题解决

4 心得体会


1 实验目的

利用 V e r i l o g Verilog Verilog 硬件描述语言、图形描述方式、 I P IP IP 核,结合数字系统设计方法,在 Q u a r t u s Quartus Quartus 开发环境下,对三个子任务进行实现。通过实验,理解组合逻辑的概念,掌握组合逻辑电路的设计方法。

2 实验仪器

  • FPGA开发板( D E 1 − S o C DE1-SoC DE1SoC)

在这里插入图片描述

3 子任务

3.1 四人表决器

实验原理

功能需求分析
  • 4 4 4 人无弃权表决电路,多数赞成则提案通过。
  • 3 3 3 人同意时灯不亮表示未通过,否则灯亮表示通过。

首先,用四个开关分别表示四人各自的投票器,根据开发板信息,开关外低内高。然后通过统计对应低电平状态管脚的个数来判断是否点亮 L E D LED LED (也就是把 L E D LED LED 对应管脚置为高电平)。程序的流程图如下:

RVHL7j.jpg

实验步骤

需求分析
绘制原理图
编写Verilog程序
仿真分析
下载验证

具体实现

Q u a r t u s Quartus Quartus 程序编写
Codes
module vote (a,ok);
input [3:0] a; //用一个四位寄存器表示
output ok;
reg [3:0] cnt;
integer i;
reg ok;
always @ (a)
	begin
		cnt=0; //计数器清零
		for (i=0; i<=3; i=i+1) //循环统计计数器寄存器内1的个数
			if (a[i])
				cnt=cnt+1;
			if (cnt>=3)
				ok=1;
			else 
				ok=0;
	end
endmodule
功能仿真分析

通过给四个输入设置不同频率的时钟信号激励实现四人投票的组合变化,如图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ljbhVDFb-1625282402353)(https://z3.ax1x.com/2021/06/22/RZ4jiV.jpg)]

下面给出三组测试数据

A A A B B B C C C D D D期望输出
1 1 1 1 1 1 0 0 0 0 0 0不亮
1 1 1 1 1 1 0 0 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
Case 1

RZ5j0A.jpg

Case 2

在这里插入图片描述

Case 3

RZo7se.jpg

仿真结果证明程序逻辑正确。

四人表决器引脚分配

在这里插入图片描述

下载验证
Case 1:仅两人投票时不亮

在这里插入图片描述

Case 2:三人投票时 L E D LED LED

在这里插入图片描述

Case 3:四人投票时 L E D LED LED

在这里插入图片描述

### 问题解决 这个实验在做的时候确实没遇到任何问题。

3.2 多用户呼叫器

实验原理

功能需求分析
  • 具有优先级的六用户呼叫器,显示用户编号并蜂鸣提示,当多用户同时呼叫时只显示优先级高的用户。
  • 6 6 6 个开关模拟用户呼叫信号,用1个数码管显示用户编号。

首先,用六个开关分别表示六人各自的呼叫器,根据开发板信息,开关外低内高。然后从最高优先级用户( 6 6 6 号用户)开始逐一检查是否有用户呼叫,直到找到为止。程序的流程图如下:

RVjK7F.jpg

实验步骤

需求分析
绘制原理图
编写Verilog程序
仿真分析
下载验证

具体实现

Q u a r t u s Quartus Quartus 程序编写
逻辑关系图

RZTJW6.jpg

Codes
module call (user,ans);
input [7:0] user;
output reg [7:0] ans;
integer i;
reg [7:0] c;
//reg [7:0] ans;
always @ (user)
	begin
		c=0;
		for (i=7; i>=2; i=i-1)
			if (user[i])
				if (i>=c)
					c=i;
	end
//seg(c);
always @ (c)
	begin
	//data,address,mode,ans1,ans2,ans3,ans4
		ans[0]=1;
		ans[1]=1;
		ans[2]=1;
		ans[3]=1;
		ans[4]=1;
		ans[5]=1;
		ans[6]=1;
		ans[7]=1;
		case (c)
			8'b0000_0010:begin
				ans[1]=0;
				ans[2]=0; 
				end
			8'b0000_0011:begin
				ans[0]=0;
				ans[1]=0;
				ans[6]=0;
				ans[3]=0;
				ans[4]=0;
				end
			8'b0000_0100:begin
				ans[0]=0;
				ans[1]=0;
				ans[6]=0;
				ans[3]=0;
				ans[2]=0;
				end
			8'b0000_0101:begin
				ans[1]=0;
				ans[6]=0;
				ans[5]=0;
				ans[2]=0;
				end
			8'b0000_0110:begin
				ans[0]=0;
				ans[5]=0;
				ans[6]=0;
				ans[3]=0;
				ans[2]=0;
				end
			8'b0000_0111:begin
				ans[0]=0;
				ans[5]=0;
				ans[6]=0;
				ans[3]=0;
				ans[2]=0;
				ans[4]=0;
				end
				default ans[1]=1;
		endcase
	end
	//choice=c;
endmodule
功能仿真分析

在这里插入图片描述

仿真结果证明程序逻辑正确。

多用户呼叫器引脚分配方案

在这里插入图片描述

下载验证

在这里插入图片描述

样例解释:用户 5 5 5 和用户 3 3 3 , 2 2 2 , 1 1 1 同时呼叫,用户 5 5 5 优先级最高因此数码管显示 5 5 5

问题解决

一开始没注意这是共阴数码管,后面调成整为低电平有效就一切正常了。

3.3 数值比较器

实验原理

功能需求分析
  • 用最少的与非门设计一个两位无符号二进制数比较器。
  • 用四个开关作为两个两位二进制数的数据输入,比较结果分别用一组彩灯中的红、黄、绿色发光二极管显示。

首先,分别令这两个二进制数为 A 1 B 1 A_1B_1 A1B1 A 2 B 2 A_2B_2 A2B2 ,先比较两个二进制位的高位,如果 A 1 > A 2 A_1>A_2 A1>A2 则输出 Y 1 Y_1 Y1 (点亮红灯),否则如果 A 1 < A 2 A_1<A_2 A1<A2 则输出 Y 3 Y_3 Y3 (点亮绿灯),若 A 1 = A 2 A_1=A_2 A1=A2 ,则按上述方法比较 B 1 B_1 B1 B 2 B_2 B2 ,若两数相等,则输出 Y 2 Y_2 Y2 (点亮黄灯)。程序的流程图如下:

RZ6LOP.jpg

实验步骤

需求分析
绘制原理图
编写Verilog程序
仿真分析
下载验证

具体实现

Q u a r t u s Quartus Quartus 程序编写
逻辑关系图

在这里插入图片描述

Codes
module lx3(A1,B1,A2,B2,Y1,Y2,Y3);
input A1,B1,A2,B2;
output Y1,Y2,Y3;
wire T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11;
nand NA1 (T1,A1,A2),
NA2 (T5,B1,B2);
nor NO1 (T4,T2,T3),
NO2 (T8,T6,T7);
and AA1 (T2,T1,A1),
AA2 (T3,T1,A2),
AA3 (T6,T5,B1),
AA4 (T7,T5,B2),
AA5 (T9,T4,T6),
AA6 (Y2,T4,T8),
AA7 (T11,T4,T7);
or O1 (Y1,T2,T9),
O2 (Y3,T3,T11);
endmodule
功能仿真分析

通过给四个输入设置不同频率的时钟信号激励实现两个两位二进制数的组合变化,如图所示。

在这里插入图片描述

下面给出三组测试数据

A 1 A_1 A1 B 1 B_1 B1 A 2 A_2 A2 B 2 B_2 B2期望输出
1 1 1 1 1 1 0 0 0 1 1 1 Y 1 Y_1 Y1
1 1 1 1 1 1 1 1 1 1 1 1 Y 2 Y_2 Y2
1 1 1 0 0 0 1 1 1 1 1 1 Y 3 Y_3 Y3
Case 1

RZRCSH.jpg

Case 2

RZfezQ.jpg

Case 3

RZfLOs.jpg

仿真结果证明程序逻辑正确。

数值比较器引脚分配方案

在这里插入图片描述

下载验证
Case 1: ( 10 ) 2 = = ( 10 ) 2 (10)_2==(10)_2 (10)2==(10)2 , 中间的 L E D LED LED 灯亮

在这里插入图片描述

Case 2: ( 10 ) 2 < ( 11 ) 2 (10)_2<(11)_2 (10)2<(11)2, 左边的 L E D LED LED 灯亮

在这里插入图片描述

Case 3: ( 01 ) 2 > ( 00 ) 2 (01)_2>(00)_2 (01)2>(00)2,右边的 L E D LED LED 灯亮

在这里插入图片描述

问题解决

难点主要是两位数值比较器的逻辑实现,这个分析清楚了代码实现没难度。

4 心得体会

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值