数字系统设计大作业

合集下载

计算机操作系统课程设计(大作业)

计算机操作系统课程设计(大作业)

摘要银行家算法是一个用来预防系统进入死锁状态的算法,用它可以判断系统的安全性,如果系统当前处于安全状态,则可以为申请资源的进程分配资源,如果不是安全状态,则不能为申请资源的进程分配资源。

银行家算法执行过程中,首先判断申请资源的进程所申请的资源数目是否合法,若是合法的,则可以为其进行试分配,再利用安全性算法求出安全序列,·如果存在安全序列,则说明可以给申请资源的进程分配资源,分配成功,继续为其它进程服务。

如果找不到安全序列,则说明为该进程分配资源后系统会进入不安全状态,所以不能为该进程分配资源,使该进程进入阻塞状态。

若申请资源的进程申请的资源数目不合法,则不需要进行试分配,直接使其进入阻塞状态,处理其他申请资源的进程。

论文首先对算法的设计从总体上进行了分析,然后分析各个细节,再对算法分模块设计,并对各个模块的算法思想通过流程图表示,分块编写代码,并进行调试和测试,最后进行组装测试及系统测试,使其成为一个可以用来判断系统安全状态的程序。

关键词:可用资源最大需求矩阵分配矩阵需求矩阵安全性算法安全序列目录一、绪论 (3)二、需求分析 (4)三、算法分析 (5)四、详细设计 (6)五、程序调试 (9)六、总结 (11)参考文献 (12)附录(源代码) (13)一、绪论Dijkstra (1965)提出了一种能够避免死锁的调度算法,称为银行家算法。

它的模型基于一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,每个客户都有一个贷款额度,银行家知道不可能所有客户同时都需要最大贷款额,所以他只保留一定单位的资金来为客户服务,而不是满足所有客户贷款需求的最大单位。

这里将客户比作进程,贷款比作设备,银行家比作系统。

客户们各自做自己的生意,在某些时刻需要贷款。

在某一时刻,客户已获得的贷款和可用的最大数额贷款称为与资源分配相关的系统状态。

一个状态被称为是安全的,其条件是存在一个状态序列能够使所有的客户均得到其所需的贷款。

数字系统设计夏语闻第十五章例题

数字系统设计夏语闻第十五章例题

数字系统设计夏语闻第十五章例题摘要:一、引言二、数字系统设计概述三、夏语闻第十五章例题解析1.题目一2.题目二3.题目三四、例题解答过程1.题目一1.问题分析2.解答步骤3.答案2.题目二1.问题分析2.解答步骤3.答案3.题目三1.问题分析2.解答步骤3.答案五、总结正文:一、引言数字系统设计是计算机科学与技术领域中的一个重要分支,夏语闻所著的《数字系统设计》一书,以其深入浅出的讲解和丰富的例题,受到了广大读者的欢迎。

本文将对夏语闻第十五章的例题进行解析,以帮助读者更好地理解和掌握数字系统设计的相关知识。

二、数字系统设计概述数字系统设计主要研究数字电路的原理、设计和应用,包括组合逻辑电路、时序逻辑电路、存储器和微处理器等方面的内容。

数字系统设计在计算机科学、通信、控制等领域具有广泛的应用。

三、夏语闻第十五章例题解析本章共包括三道例题,分别为题目一、题目二和题目三。

1.题目一假设有一个4 位全加器,输入为A、B、C、D,求输出。

2.题目二设计一个4 位并行加法器,输入为A、B、C、D,输出为S。

3.题目三设计一个4 位并行乘法器,输入为A、B,输出为P。

四、例题解答过程1.题目一问题分析:题目要求求解4 位全加器的输出。

解答步骤:1) 根据全加器的真值表,列出输入与输出的对应关系;2) 代入题目给定的输入值,计算输出;3) 输出结果为S0、S1、S2、S3。

答案:S0、S1、S2、S3。

2.题目二问题分析:题目要求设计一个4 位并行加法器。

解答步骤:1) 根据加法器的原理,分析输入与输出的关系;2) 设计逻辑电路,实现输入到输出的映射;3) 给出加法器的真值表。

答案:根据设计原理和真值表,可得出加法器的输出。

3.题目三问题分析:题目要求设计一个4 位并行乘法器。

解答步骤:1) 根据乘法器的原理,分析输入与输出的关系;2) 设计逻辑电路,实现输入到输出的映射;3) 给出乘法器的真值表。

答案:根据设计原理和真值表,可得出乘法器的输出。

《 数字系统设计 》试卷含答案

《   数字系统设计   》试卷含答案

,考试作弊将带来严重后果!华南理工大学期末考试《数字系统设计》试卷1. 考前请将密封线内各项信息填写清楚;所有答案请直接答在试卷上(或答题纸上);.考试形式:开(闭)卷;(每小题2分,共16分)大规模可编程器件主要有FPGA、CPLD两类,下列对CPLD结构与工作原理( C )CPLD即是现场可编程逻辑器件的英文简称;CPLD是基于查找表结构的可编程逻辑器件;早期的CPLD是从GAL的结构扩展而来;在Altera公司生产的器件中,FLEX10K 系列属CPLD结构;在VHDL语言中,下列对时钟边沿检测描述中,错误的是( D )then ...;then ...;then ...;在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,正确( A )PROCESS为一无限循环语句;敏感信号发生更新时启动进程,执行完成后,等待下一.敏感信号参数表中,应列出进程中使用的所有输入信号;进程由说明部分、结构体部分、和敏感信号参数表三部分组成;当前进程中声明的信号也可用于其他进程基于EDA软件的FPGA / CPLD设计流程,以下流程中哪个是正确的:( C )原理图/HDL文本输入→适配→综合→时序仿真→编程下载→功能仿真→硬件测试原理图/HDL文本输入→功能仿真→综合→时序仿真→编程下载→适配→硬件测试;原理图/HDL文本输入→功能仿真→综合→适配→时序仿真→编程下载→硬件测试原理图/HDL文本输入→适配→时序仿真→编程下载→功能仿真→综合→硬件测试。

关于综合,从输入设计文件到产生编程文件的顺序正确的是:(B).逻辑综合→高层次综合→物理综合;B. 高层次综合→逻辑综合→物理综合;C. 物理综合→逻辑综合→高层次综合;D. 高层次综合→逻辑综合→时序综合;6. 进程中的信号赋值语句,其信号更新是( C )A. 按顺序完成;B. 比变量更快完成;C. 在进程的挂起时完成;D. 都不对。

数字系统设计大作业

数字系统设计大作业
--signal e:std_logic_vector(3 downto 0);
begin
ba<=b&a; --ba<=e&a;b<=e;
process(a,clk)
begin
-- if rising_edge(clk) then c<=c+1;
--case c is
-- when "00"=>e<="0111";when "01"=>e<="1011";
图6-2(a)时序仿真初始图
图6-2(b)时序仿真结果图
具体分析:
如图6-2(b)所示,
(1)当a=0111,b=1110时,对应输出s=0000,此时对应键盘上的S0,输出信息为1;
(2)当a=0111,b=1101时,对应输出s=0001,此时对应键盘上的S2,输出信息为2;
(3)当a=1101,b=1001时,对应输出s=1001,此时对应键盘上的SA,输出信息为9.
1011
1101
9
1010
0111
1101
#
1011
1110
1110
A
1100
1101
1110
B
1101
1011
1110
C
1110
0111
1110
D
1111
3)译码显示模块
该模块包括输出低电平与LED灯显示。因为实验箱的LED灯是低电平有效,所以需要把输出变量r进行逻辑“非”变换。该部分采用了4个非门,分别将输入的4位扫描模块输出变量取反。LED灯的亮灭表示输出变量r。r为高电平时灯亮,r为低电平时灯灭,这样就能更清晰地显示出实验结果,使人一目了然。

数字系统设计与VHDL课程大作业

数字系统设计与VHDL课程大作业

数字系统设计与VHDL课程大作业霓虹灯电路设计学院: 计算机科学与工程班级:计算机科学与技术一班学号:1305010126姓名:唐艳香组员:郑林升,袁博,唐艳香实验内容:1)使用平台上的8个七段数码管进行显示,即围绕平台上的8个数码管转圈;2)要求同时显示的段数为1、2、3段可选;3)可进行顺向、逆向显示(通过某一开关键进行选择);4)按下复位键后,重新开始旋转;5)多种点亮方式自选,如全亮等。

总体模块划分:1)定义输入输出端;2)由于只有一个主程序,所有模块都直接添加在里面。

主程序中可瞧做复位,旋转方向,旋转速度,旋转块数的小程序结合;3)建立波形图,进行仿真;4)绑定引脚,下载程序进行测试;5)修正小bug。

代码实现:library ieee;use ieee、std_logic_1164、all;use ieee、std_logic_arith、all;use ieee、std_logic_unsigned、all;entity water_lamp isgeneric(n:integer:=60000);port(clk_sys:in std_logic;order:in std_logic;k:in std_logic;q:in std_logic;num:in std_logic_vector(2 downto 0);L:out std_logic_vector(7 downto 0);LED:out std_logic_vector(7 downto 0)); end water_lamp;architecture one of water_lamp issignal cnt:integer range 0 to n;signal cnt1:integer range 0 to n;signal cnt2:integer range 0 to n;signal clk_new:std_logic;signal cnm:integer range 19 downto 0;signal cnm0:integer range 19 downto 0;signal clk_new1:std_logic;signal clk_new2:std_logic_vector(0 to 1):="00"; beginp1:process(clk_sys)beginif clk_sys'event and clk_sys='1' thenif cnt<integer(n/2)-1 thencnt<=cnt+1;elsecnt<=0;clk_new<=not clk_new;end if;end if;end process p1;p2:process(clk_new)variable LED_tmp:std_logic_vector(7 downto 0); beginif clk_new'event and clk_new='1' thenif order='0'thenif cnm>0 thencnm<=cnm-1;elsecnm<=19;end if;elseif cnm<19 thencnm<=cnm+1;elsecnm<=0;end if;end if;end if;end process p2;p3:process(cnm,num,clk_sys,cnt1,cnt2,clk_new2) beginif num="001" thencnm0<=cnm;elsif num="011" thenif clk_sys'event and clk_sys='1'thenif cnt1<integer(n/1000) thencnt1<=cnt1+1;elsecnt1<=0;clk_new1<=not clk_new1;end if;end if;if clk_new1='0' thencnm0<=cnm;elseif cnm=19 thencnm0<=0;elsecnm0<=cnm+1;end if;end if;elsif num="111" thenif clk_sys'event and clk_sys='1'thenif cnt2<integer(n/1000) thencnt2<=cnt2+1;elsecnt2<=0;if clk_new2="00" thenclk_new2<="01";cnm0<=cnm;elsif clk_new2="01" thenclk_new2<="10";if cnm=19 thencnm0<=0;elsecnm0<=cnm+1;end if;elsif clk_new2="10" thenclk_new2<="00";if cnm=18 thencnm0<=0;elsif cnm=19 thencnm0<=1;elsecnm0<=cnm+2;end if;end if;end if;end if;end if;end process p3;p4:process(cnm0)beginif k='1' thencase cnm0 iswhen 0 =>L<="01111111";LED<="10000000"; when 1 =>L<="10111111";LED<="10000000"; when 2 =>L<="11011111";LED<="10000000"; when 3 =>L<="11101111";LED<="10000000"; when 4 =>L<="11110111";LED<="10000000"; when 5 =>L<="11111011";LED<="10000000"; when 6 =>L<="11111101";LED<="10000000"; when 7 =>L<="11111110";LED<="10000000"; when 8 =>L<="11111110";LED<="00000100"; when 9 =>L<="11111110";LED<="00001000"; when 10 =>L<="11111110";LED<="00010000"; when 11 =>L<="11111101";LED<="00010000"; when 12 =>L<="11111011";LED<="00010000"; when 13 =>L<="11110111";LED<="00010000"; when 14 =>L<="11101111";LED<="00010000"; when 15 =>L<="11011111";LED<="00010000"; when 16 =>L<="10111111";LED<="00010000"; when 17 =>L<="01111111";LED<="00010000"; when 18 =>L<="01111111";LED<="00100000"; when 19 =>L<="01111111";LED<="01000000"; when others =>LED<= "00000000";end case;else L<="11111111";LED<="00000000";end if;if q='1'then L<="00000000";LED<="11111111"; end if;end process p4;end one;仿真结果:(缩略图)(展开图)设计总结及心得体会:经过将近两周的学习与动手操作,终于将老师所布置的实验完成。

数字系统设计与VHDL课程大作业

数字系统设计与VHDL课程大作业

数字系统设计与VHDL课程大作业霓虹灯电路设计学院:计算机科学与工程班级:计算机科学与技术一班学号:1305010126姓名:唐艳香组员:郑林升,袁博,唐艳香实验内容:1)使用平台上的8个七段数码管进行显示,即围绕平台上的8个数码管转圈;2)要求同时显示的段数为1、2、3段可选;3)可进行顺向、逆向显示(通过某一开关键进行选择);4)按下复位键后,重新开始旋转;5)多种点亮方式自选,如全亮等。

总体模块划分:1)定义输入输出端;2)由于只有一个主程序,所有模块都直接添加在里面。

主程序中可看做复位,旋转方向,旋转速度,旋转块数的小程序结合;3)建立波形图,进行仿真;4)绑定引脚,下载程序进行测试;5)修正小bug。

代码实现:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity water_lamp isgeneric(n:integer:=60000);port(clk_sys:in std_logic;order:in std_logic;k:in std_logic;q:in std_logic;num:in std_logic_vector(2 downto 0);L:out std_logic_vector(7 downto 0);LED:out std_logic_vector(7 downto 0)); end water_lamp;architecture one of water_lamp issignal cnt:integer range 0 to n;signal cnt1:integer range 0 to n;signal cnt2:integer range 0 to n;signal clk_new:std_logic;signal cnm:integer range 19 downto 0;signal cnm0:integer range 19 downto 0;signal clk_new1:std_logic;signal clk_new2:std_logic_vector(0 to 1):="00"; beginp1:process(clk_sys)beginif clk_sys'event and clk_sys='1' thenif cnt<integer(n/2)-1 thencnt<=cnt+1;elsecnt<=0;clk_new<=not clk_new;end if;end if;end process p1;p2:process(clk_new)variable LED_tmp:std_logic_vector(7 downto 0); beginif clk_new'event and clk_new='1' thenif order='0'thenif cnm>0 thencnm<=cnm-1;elsecnm<=19;end if;elseif cnm<19 thencnm<=cnm+1;elsecnm<=0;end if;end if;end if;end process p2;p3:process(cnm,num,clk_sys,cnt1,cnt2,clk_new2) beginif num="001" thencnm0<=cnm;elsif num="011" thenif clk_sys'event and clk_sys='1'thenif cnt1<integer(n/1000) thencnt1<=cnt1+1;elsecnt1<=0;clk_new1<=not clk_new1;end if;end if;if clk_new1='0' thenelseif cnm=19 thencnm0<=0;elsecnm0<=cnm+1;end if;end if;elsif num="111" thenif clk_sys'event and clk_sys='1'then if cnt2<integer(n/1000) thencnt2<=cnt2+1;elsecnt2<=0;if clk_new2="00" thenclk_new2<="01";cnm0<=cnm;elsif clk_new2="01" thenclk_new2<="10";if cnm=19 thencnm0<=0;elseend if;elsif clk_new2="10" thenclk_new2<="00";if cnm=18 thencnm0<=0;elsif cnm=19 thencnm0<=1;elsecnm0<=cnm+2;end if;end if;end if;end if;end if;end process p3;p4:process(cnm0)beginif k='1' thencase cnm0 iswhen 0 =>L<="01111111";LED<="10000000";when 1 =>L<="10111111";LED<="10000000";when 2 =>L<="11011111";LED<="10000000";when 3 =>L<="11101111";LED<="10000000";when 4 =>L<="11110111";LED<="10000000";when 5 =>L<="11111011";LED<="10000000";when 6 =>L<="11111101";LED<="10000000";when 7 =>L<="11111110";LED<="10000000";when 8 =>L<="11111110";LED<="00000100";when 9 =>L<="11111110";LED<="00001000";when 10 =>L<="11111110";LED<="00010000";when 11 =>L<="11111101";LED<="00010000";when 12 =>L<="11111011";LED<="00010000";when 13 =>L<="11110111";LED<="00010000";when 14 =>L<="11101111";LED<="00010000";when 15 =>L<="11011111";LED<="00010000";when 16 =>L<="10111111";LED<="00010000";when 17 =>L<="01111111";LED<="00010000";when 18 =>L<="01111111";LED<="00100000";when 19 =>L<="01111111";LED<="01000000";when others =>LED<= "00000000";end case;else L<="11111111";LED<="00000000";end if;if q='1'then L<="00000000";LED<="11111111";end if;end process p4;end one;仿真结果:(缩略图)(展开图)设计总结及心得体会:经过将近两周的学习与动手操作,终于将老师所布置的实验完成。

数字系统设计综合实验报告

数字系统设计综合实验报告

数字系统设计综合实验报告实验名称:1、加法器设计2、编码器设计3、译码器设计4、数据选择器设计5、计数器设计6、累加器设计7、交通灯控制器设计班级:姓名:学号:指导老师:实验1 加法器设计1)实验目的(1)复习加法器的分类及工作原理。

(2)掌握用图形法设计半加器的方法。

(3)掌握用元件例化法设计全加器的方法。

(4)掌握用元件例化法设计多位加法器的方法。

(5)掌握用Verilog HDL语言设计多位加法器的方法。

(6)学习运用波形仿真验证程序的正确性。

(7)学习定时分析工具的使用方法。

2)实验原理加法器是能够实现二进制加法运算的电路,是构成计算机中算术运算电路的基本单元。

目前,在数字计算机中,无论加、减、乘、除法运算,都是化为若干步加法运算来完成的。

加法器可分为1位加法器和多位加法器两大类。

1位加法器有可分为半加器和全加器两种,多位加法器可分为串行进位加法器和超前进位加法器两种。

(1)半加器如果不考虑来自低位的进位而将两个1位二进制数相加,称半加。

实现半加运算的电路则称为半加器。

若设A和B是两个1位的加数,S 是两者相加的和,C是向高位的进位。

则由二进制加法运算规则可以得到。

(2)全加器在将两个1位二进制数相加时,除了最低位以外,每一位都应该考虑来自低位的进位,即将两个对应位的加数和来自低位的进位三个数相加,这种运算称全加。

实现全加运算的电路则称为全加器。

若设A、B、CI分别是两个1位的加数、来自低位的进位,S是相加的和,C是向高位的进位。

则由二进制加法运算规则可以得到:3)实验内容及步骤(1)用图形法设计半加器,仿真设计结果。

(2)用原件例化的方法设计全加器,仿真设计结果(3)用原件例化的方法设计一个4为二进制加法器,仿真设计结果,进行定时分析。

(4)用Verilog HDL语言设计一个4为二进制加法器,仿真设计结果,进行定时分析。

(5)分别下载用上述两种方法设计4为加法器,并进行在线测试。

4)设计1)用图形法设计的半加器,如下图1所示,由其生成的符号如图2所示。

数字系统设计题目

数字系统设计题目

4.1 多功能数字钟的设计
设置状态显示信号(发光管):LD_alert指示是 否设置了闹铃功能;LD_h指示当前调整的是小时 信号;LD_m指示当前调整的是分钟信号。 当闹铃功能设置后(LD_alert=1),系统应启动 一比较电路,当计时与预设闹铃时间相等时,启动 闹铃声,直到关闭闹铃信号有效。 整点报时由分和秒计时同时为0(或60)启动,与 闹铃声共用一个扬声器驱动信号out。 系统计时时钟为clk=1Hz,选择另一时钟 clk_1k=1024Hz作为产生闹铃声、报时音的时钟 信号。
4.2数字式竞赛抢答器
硬件系统示意图
图4-2-2 数字抢答器硬件系统示意图
4.3数字频率计
4.3.1设计要求 设计一个能测量方波信号频率的频率计,测量结果 用十进制数显示,测量的频率范围是1∼100KHz, 分成两个频段,即1∼999Hz,1KHz∼100KHz, 用三位数码管显示测量频率,用LED显示表示单位, 如亮绿灯表示Hz,亮红灯表示KHz。 具有自动校验和测量两种功能,即能用标准时钟校 验测量精度。 具有超量程报警功能,在超出目前量程档的测量范 围时,发出灯光和音响信号。
4.5洗衣机控制器
设置洗涤开始信号start,start有效则洗涤 时间计数器进行倒计数,并用数码管显示, 同时启动时序电路工作。 时序电路中含有20秒定时信号,10秒定时 信号,设为A、B,A、B为“0”表示定时时 间未到,A、B为“1”表示定时时间到。
4.5洗衣机控制器
时序电路状态表
4.1 多功能数字钟的设计
4.1.1设计要求 设计一个能进行时、分、秒计时的十二小时 制或二十四小时制的数字钟,并具有定时与 闹钟功能,能在设定的时间发出闹铃音,能 非常方便地对小时、分钟和秒进行手动调节 以校准时间,每逢整点,产生报时音报时。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3、实验原理
4×4阵列键盘十分常用,如下图是此键盘电路的原理图,10芯接口也如下。通常,此类按键的识别法有两种:扫描法和反转法。扫描法,即当按下某键后,为了辨别和读取键信息,向A口扫描输入一组分别只含一个0的4位数据,如1110,1101,1011等。若有键按下,则B口一定会输出对应的数据,这时,只要结合A、B口的数据,就能判断出键的位置。如当键S0按下,对于输入的A=1110时,那么B=0111.于是{B,A}=0111_1110就成了S0的代码。
1011
1101
9
1010
0111
1101
#
1011
1110
1110
A
1100
1101
1110
B
1101
1011
1110
C
1110
0111
1110
D
1111
3)译码显示模块
该模块包括输出低电平与LED灯显示。因为实验箱的LED灯是低电平有效,所以需要把输出变量r进行逻辑“非”变换。该部分采用了4个非门,分别将输入的4位扫描模块输出变量取反。LED灯的亮灭表示输出变量r。r为高电平时灯亮,r为低电平时灯灭,这样就能更清晰地显示出实验结果,使人一目了然。
反转法中,A、B口都必须接双向口。首先将A口设定为输出,B口设定为输入。然后向A口输出全0,接着读B口。若读入的数据中有一位是0,则表明与该位对应的列线上有某键被按下,存储此值(否则循环检测);然后反过来,将A口设定为输入,B口设定为输出。向B口输出全0,读A口,其中必有一位为0.将此4位数与刚才从B口读得的数据组合即得被按键的特征码。最后通过查表即得所按键的码。
图6-2(a)时序仿真初始图
图6-2(b)时序仿真结果图
具体分析:
如图6-2(b)所示,
(1)当a=0111,b=1110时,对应输出s=0000,此时对应键盘上的S0,输出信息为1;
(2)当a=0111,b=1101时,对应输出s=0001,此时对应键盘上的S2,输出信息为2;
(3)当a=1101,b=1001时,对应输出s=1001,此时对应键盘上的SA,输出信息为9.
4.2设计思路
本设计采用方案二,主要由三个功能模块组成:键盘消抖模块、键盘扫描模块、译码显示模块。
(1)键盘消抖模块
因为普通的按键都是接触式的,当按键闭合或释放时,上下接触面都会产生一个很短暂的抖动,这个抖动时间一般都会持续5-10ms,虽然这个抖动时间很短,但对于FPGA工作在50M的高频率上的器件来说,还是可以捕捉的到的。为了使CPU对于一次按键操作只处理一次,在软件中必须加入消除抖动处理。
5.3VHDL部分程序
library ieee;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_1164.all;
entity k44 is
port (clk : in std_logic;--1khz以下
b,a : in std_logic_vector(3 downto 0);
r : out std_logic_vector(3 downto 0));
end;
architecture one of k44 is
--signal c:std_logic_vector(1 downto 0);
signal ba:std_logic_vector(7 downto 0);
本模块是由四个上升沿触发型D触发器和一个四输入的与门构成的。四个D触发器用同步时序方式连接,即:将它们的时钟输入端都连在一起。在工作时四个D触发器与clk时钟信号同步,输入信号以移位串行方式向前传递。
(2)键盘扫描模块
阵列式键盘又叫做行列式键盘,用带有I/O口的线组成行列结构,按键设置在行列的交点上。此模块所用键盘是表1所示的4×4阵列键盘。按键设置在行列交叉点,行列线分别接到按键开关的两端,每个键的按下与否由这个键的行电平和列电平共同决定,当按下时为低电平“0”,没有按下时为高电平“1”。
综上所分析,实验仿真结果显然满足课题要求,故该实验方案Байду номын сангаас立。
-- when "10"=>e<="1101";when "11"=>e<="1110";
--when others=>null;
--end case;
case ba is
when "01111110"=>r<="0000";when "01111101"=>r<="0001";
when "01111011"=>r<="0010";when "01110111"=>r<="0011";
when others=>null;
end case;
--end if;
end process;
end;
6、实验结果
6.1综合电路图
图6-1(a)电路原理图
图6-1(b)RTL电路
6.2时序仿真
对源程序进行操作,生成tbw文件后,继续对.tbw进行操作,点击Simulate Behavioral Model出现如下时序图,并对输入与输出进行赋值,如下:
表2、键盘参数
行扫描a
列读取b
键盘按键
按键编码
1110
0111
1
0000
1101
0111
4
0001
1011
0111
7
0010
0111
0111
*
0011
1110
1011
2
0100
1101
1011
5
0101
1011
1011
8
0110
0111
1011
0
0111
1110
1101
3
1000
1101
1101
6
1001
表1、4×4阵列键盘
1
2
3
A
4
5
6
B
7
8
9
C
*
0
#
D
本模块设计采用扫描的方法来实现对键盘上每个键的识别,即当进行行扫描时,扫描信号由行线进入键盘,以“1110”、“1101”、“1011”、“0111”的顺序每次扫描不同的一行。之后,读取列线的电平信号,判断是哪个键按下了,如果列线全为高电平,则代表该列没有按键按下,如果列线有输入低电平,则低电平信号所在的行和出现低电平的列的交点处有按键按下。假设行线为a,列线为b,长度都为4。将输入行扫描值a与列读取值b并置形成组合值作为按键的输入值,并对每一个键进行编码(如表2键盘参数所示),使其送入输出变量r(定义为4位),即可判断出按键按下的位置。
2014 ~ 2015学年第1学期
《数字系统设计》
大作业
题 目:4×4阵列键盘键信号检测电路设计
专 业:电子信息工程
班 级:
姓 名:
指导教师:
电气工程学院
2015年12月
摘 要
人类文明已进入到高度发达的信息化社会。信息化社会的发展离不开电子信息产品开发技术、产品品质的提高和进步。电子信息产品随着科学技术的进步,其电子器件和设计方法更新换代的速度日新月异。实现这种进步的主要原因就是电子设计技术和电子制造技术的发展,其核心就是电子设计自动化(EDA,Electronic Design Automation)技术,EDA技术的发展和推广应用又极大地推动了电子信息产业的发展。为保证电子系统设计的速度和质量,适应“第一时间推出产品”的设计要求,EDA技术正逐渐成为不可缺少的一项先进技术和重要工具。目前,在国内电子技术教学和产业界的技术推广中已形成“EDA热”,完全可以说,掌握EDA技术是电子信息类专业学生、工程技术人员所必备的基本能力和技能。
5、功能模块介绍
5.1键盘消抖模块
图5-1消抖动模块
图4为消抖模块的逻辑符号,其中D(3:0)输入按键按下时带抖动的信号,经过消抖之后,Q(3:0)输出消除抖动之后的信号,使得CPU可以只对一次按键处理一次信号。
5.2键盘模块
图5-2键盘模块
图5-2为扫描模块的逻辑符号,其中a[3:0]是4位的行扫描信号,b[3:0]是4位的列读取信号,r[3:0]是4位的按键编码输出。
1、实验目的
(1)通过常见基本组合逻辑电路的设计,熟悉EDA设计流程;
(2)熟悉文本输入及仿真步骤;
(3)掌握VHDL设计实体的基本结构及文字规则;
(4)理解硬件描述语言和具体电路的映射关系;
(5)用VHDL设计一个能识别4×4阵列键盘的实用电路。
2、实验要求
要求通过查阅相关书籍资料,熟悉和初步掌握VHDL语言的语法及其功能,深入分析4×4键盘扫描电路的原理,然后运用VHDL硬件描述语言和图形设计综合方法,实现4×4键盘扫描电路的程序设计,通过运用xilinx.ise.7.1i软件设置输入端口,实现模拟仿真,得到仿真波形图后,并记录结果。
4×4按键电路
4、总体框图
4.1.1方案一
上图为方案一的设计框图,键盘按键按下后,经过键盘扫描电路后,直接输出显示。本方案优点在于简单易懂,缺点在于无法消除按键按下时和之后弹起时的抖动对扫描电路的干扰。
4.1.2方案二
上图为方案二的设计框图,键盘按键按下后,先经过消除抖动电路之后,再进入键盘扫描电路,这样就可以使CPU只处理一次按键操作,避免了按键按下时和之后弹起时的抖动对扫描电路的干扰。另外,LED灯显示可以更直观地看到实验结果。
相关文档
最新文档