77范文网 - 专业文章范例文档资料分享平台

数字电路与逻辑设计实验

来源:网络收集 时间:2018-10-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

数字电路与逻辑设计实验报告

学 院: 班 级: 姓 名: 学 号:

日 期:

一. 实验名称:

实验一:QuartusII 原理图输入法设计与实现

实验二:用 VHDL 设计与实现组合逻辑电路 实验三:用 VHDL 设计与实现时序逻辑电路 实验四:用 VHDL 设计与实现数码管动态扫描控制器

二. 实验所用器件及仪器:

1.计算机 2.直流稳压电源

3.数字系统与逻辑设计实验开发板

三. 实验要求:

实验一:

(1) 用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图

形模块单元。 (2) 用(1)实现的半加器和逻辑门设计实现一个全加器,仿真并验证其功能,

并下载到实验板上测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3) 用3—8线译码器和逻辑门设计实现函数F=/C/B/A+/CB/A+C/B/A+CBA,仿

真验证其功能并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。

注:实验时将三个元器件放在一个new block diagram中实现。

实验二:

(1) 用VHDL语言设计实现一个共阴极7段数码译码器,仿真验证其功能,

并下载到实验板测试。要求用拨码开关设定输入信号,7段数码管显示输出信号。 (2) 用VHDL语言设计实现一个8421码转余三码的代码器,仿真验证其功

能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3) 用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输

出1,否则出0;仿真验证其功能,并下载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 实验三:

(1) 用VHDL语言设计实现一个带异步复位的8421 十进制计数器,仿真验证其

功能,并下载到实验板测试。要求用按键设定输入信号,发光二极管显示输出信号。

(2) 用VHDL语言设计实现一个分频系数为12,输出信号占空比为50%的分频器,

仿真验证其功能。 注:实验时将(1)、(2)和数码管译码器 3 个电路进行链接,并下载到实验板显示计数结果。

实验四:

(1) 用VHDL语言设计实现六个数码管串行扫描电路,要求同时显示

0,1,2,3,4,5这几个不同的数字图形到数码管上,仿真验证其功能,并下载到实验板测试。 (2)

用VHDL语言设计实现六个数码管滚动显示电路:

A. 循环左循环,左进右出。状态为:

012345->123450->234501->345012->450123->501234->012345

B. 向左滚动,状态为(X表示数码管不显示):

012345->12345X->2345XX->345XXX->45XXXX->5XXXXX->XXXXXX->XXXXX0->XXXX01->XXX012->XX0123->X01234->012345

四. 实验原理及设计思路:

实验一:

(1) 半加器是考虑两位二进制数相加,出来的结果有二者加后的一个低位数,和

一个这两位数相加所得的进位数。所以用异或门和与门即可实现双输入双输出的半加器。 (2) 全加器可以以半加器为基础,在考虑两位二进制数相加时也考虑上地位的进

位信号,输出与半加器类似。

(3) 译码器加逻辑门可以实现相应的逻辑函数,将有相应最小项的输出项或即可。

实验二:

(1) 共阴极7段数码译码器:拨码开关的不同状态对应输入信号的0和1,通过

改变拨码开关的状态改变输入值,此时用VHDL语言描述每个输入值下对应的数在数码管中的显示。 (2) 8421码转余三码的代码器:将8421BCD码加上0011即为对应的余三码,通

过通过改变拨码开关的状态改变输入的84212BCD码,由四个LED灯的亮与灭(亮表示该值为1,灭表示0),来表示余三码的码值。 (3) 奇偶校验电路:同理用拨码开关设定输入信号,发光二极管显示输出信号,

输入奇数个1时,对应的发光二极管亮,反之则为熄灭状态。

实验三:

(1) 异步计数器:由于是异步复位,且yibuclear(清零信号)优先级最高,

当它有效时使状态清零。或者当到达第11个状态(1010)时复位,使状态回归到初始状态(0000)。其余时刻,用cp来计数,每按一次键cp=1,状态加1。因此设计2个输入端,一个输出端数组即可。 (2) 分频器:是使cp经过12个周期,输出的信号正好完成一次完整的翻转,

因此需要计数,该计数器模值为12,每六个状态时翻转一次。 (3) 可以使用分频器为异步计数器提供脉冲信号,异步计数器的输出作为数

码管译码管的输入,由数码管译码管显示当前数据。

实验四:

(1) 六个数码管串行扫描电路:由实验板上18号元件提供时钟,每过一个

周期,亮一个数码管,且该数码管序号也会改变,因此需要两个数组来体现这种改变。设选择一个管亮的数组为xuan(5 downto 0),数码管上控制输出数字形状的数组为guan(6 downto 0),通过输入的时钟改变状态(signal status),由状态定xuan,guan。由于要求“同时显示”,我们知道闪烁发光的二极管闪烁频率较高时,我们将观察到持续点亮的现象,一个数码管要稳定,需要显示频率大于50HZ,现在需要6个数码管同时显示,因而时钟的频率应该大于300HZ。 (2) 六个数码管滚动扫描电路:大致原理同(1),但是需要注意guan

不再只有6个状态,需要用12个状态来配合周期循环使用。需要每轮的管子状态改变一个位移。此时可以把xuan由循环来赋值,实现控制不同时刻数码管的亮与灭。

五. 实验模块端口及连接图:

实验三(3):分频器的时钟信号接外部时钟,异步清零端接外部信号,异步清零信号有效时可以实现分频器内部计数清零。当外部时钟clk=1时,分频器内部计数器的状态加1,每六个状态clk_out实现一次翻转。分频器的输出作为异步计数器的时钟,异步计数器的异步复位端接外部输入,可由实验板上拨码开关实现。这样就将外部时钟12分频后输入给异步计数器,异步计数器将计数输入数码译码器,实现控制数码管的状态,使之显示异步8421十进制计数器的此刻的数。

实验四:

(1) clk是输入信号,接外部时钟信号(location对应实验板18),要求频率

大于300HZ,clear是异步复位信号。guan为输出信号,连接到数码管上对应的7条线,控制这个数码管中每一段线的亮与灭,实现显示数字。xuan是控制6个数码管此时应该亮哪一个。由signal status根据输入信号确定此时对应的状态下的xuan和guan。

(2) 循环左滚动:输入信号为clk,clear。Clear为异步复位信号,Clk接外部

时钟,该时钟共有4种频率(可以通过改变粉红色按钮上的小拨码开关

调整),为了使实验现象符合要求,我们可以选择最高频率并对它进行分频,分出我们所需要的合适的频率,再由分频器输出的信号控制状态变化,每来一个时钟改变一次状态,xuan和guan为输出信号,分别控制该时刻应该亮哪个数码管和这个数码管上每条线的亮与灭状态。故clk接实验板上18,clear可由按键实现,xuan接实验板上cat(0~5)guan接数码管上每条线所对应的数字。小周期计数器控制每位数码的显示,大

周期计数器控制数码的移位。

(3) clk为输入信号,接外部时钟实验板上18,通过循环移位及每来一个cp

对xuan进行一次赋值,选择此时该亮的灯。通过改变输出guan和xuan,从而得出能熄灭能亮的现象。guan接数码管上的每条线所对应位置,xuan接六个数码管的cat端

六. 实验原理图或者VHDL代码:

(1) 实验一(2):

其中半加器ba的原理图如下所示:

(2) 实验三(3)VHDL代码如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY sange IS PORT(

clk:IN STD_LOGIC;

clear,clearyibu:IN STD_LOGIC;

b:OUT STD_LOGIC_VECTOR(6 downto 0); y2,y3,y4,y5,y6,y7:OUT STD_LOGIC ); end sange;

ARCHITECTURE a OF sange IS component fenpin PORT(

clk:IN STD_LOGIC;

clear:IN STD_LOGIC; clk_out:OUT STD_LOGIC );

END component;

component yibu PORT(

cp,clear:IN STD_LOGIC;

q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );

END component; component seg7_1 PORT(

a:IN STD_LOGIC_VECTOR (3 downto 0); b:OUT STD_LOGIC_VECTOR(6 downto 0); c,d,e,f,g,h:OUT STD_LOGIC );

END component; SIGNAL na:STD_LOGIC;

SIGNAL nb:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

u1:fenpin PORT MAP(clk=>clk,clear=>clear,clk_out=>na); u2:yibu PORT MAP(cp=>na,clear=>clearyibu,q=>nb);

u3:seg7_1 PORT MAP(a=>nb,b=>b,c=>y2,d=>y3,e=>y4,f=>y5,g=>y6,h=>y7); END a;

其中fenpin,yibu,seg7_1的VHDL代码如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpin IS PORT(

clk:IN STD_LOGIC; clear:IN STD_LOGIC; clk_out:OUT STD_LOGIC ); END fenpin;

ARCHITECTURE a OF fenpin IS

SIGNAL tmp:INTEGER RANGE 0 TO 5; SIGNAL clktmp: STD_LOGIC; BEGIN

PROCESS(clear,clk) BEGIN

IF clear='0' THEN tmp<=0;

ELSIF (clk'event and clk='1') THEN IF tmp=5 THEN

tmp<=0; clktmp<=NOT clktmp; ELSE tmp<=tmp+1; END IF; END IF;

END PROCESS; clk_out<=clktmp; END a;

yibu:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY yibu IS PORT(

cp,clear:IN STD_LOGIC;

q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END yibu;

ARCHITECTURE a OF yibu IS

SIGNAL temp:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(cp) BEGIN IF clear='1' THEN temp<=\

elsIF temp=\ temp<=\ else

IF (cp'event and cp='1') THEN temp<=temp+1; END IF; end if;

END PROCESS; q<=temp; END a;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY seg7_1 IS PORT(

a:IN STD_LOGIC_VECTOR (3 downto 0); b:OUT STD_LOGIC_VECTOR(6 downto 0); c,d,e,f,g,h:OUT STD_LOGIC );

数码管译码器VHDL代码: end seg7_1;

ARCHITECTURE seg7_1_arch OF seg7_1 IS BEGIN

c<='0';d<='1';e<='1';f<='1';g<='1';h<='1'; PROCESS (a) BEGIN CASE a IS

WHEN\ --0 WHEN\ --1 WHEN\ --2 WHEN\ --3 WHEN\ --4 WHEN\ --5 WHEN\ --6 WHEN\ --7 WHEN\ --8 WHEN\ --9

WHEN OTHERS =>B<=\ END CASE; END PROCESS; END;

(3) 实验四

(1) 数据管串行扫描电路:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY chuanxing IS PORT(

clk,clear:IN STD_LOGIC;

guan:out STD_LOGIC_VECTOR (6 downto 0); xuan:OUT STD_LOGIC_VECTOR(5 downto 0) );

end chuanxing;

ARCHITECTURE yu OF chuanxing IS signal status:integer range 0 to 6; BEGIN process(clk) begin

if clear='0' then status<=0; elsif (clk'event and clk='1')then if status=6 then status<=1; else

status<=status+1; end if;

end if; end process;

PROCESS (status) BEGIN

CASE status IS

WHEN 1=>guan<=\ WHEN 2=>guan<=\ WHEN 3=>guan<=\ WHEN 4=>guan<=\ WHEN 5=>guan<=\ WHEN 6=>guan<=\ WHEN OTHERS=>guan<=\ END CASE; END PROCESS; END;

(2) 循环左滚动:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY move IS

PORT( clk,clear:IN STD_LOGIC;

guan:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); xuan:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END move;

ARCHITECTURE zuo OF move is

SIGNAL l:STD_LOGIC_VECTOR(6 DOWNTO 0);

SIGNAL c:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL cnt,cnt1:INTEGER RANGE 0 TO 5; SIGNAL tmp:INTEGER RANGE 0 TO 1999; signal clk1:STD_LOGIC; BEGIN

Fenpin1:PROCESS(clk,clear) BEGIN

IF clear='0' THEN tmp<=0;

ELSIF clk'EVENT AND clk='1' THEN IF tmp=1999 THEN

tmp<=0;

ELSE tmp<=tmp+1; END IF; END IF;

END PROCESS fenpin1; fenpin2:PROCESS(tmp) BEGIN

IF clk'EVENT AND clk='1' THEN IF tmp<1000 THEN clk1<='0'; ELSE clk1<='1'; END IF; END IF;

END PROCESS fenpin2; change:PROCESS(clk)

BEGIN

IF(clk'EVENT AND clk='1')THEN IF(cnt=5)THEN cnt<=0; ELSE cnt<=cnt+1; END IF; END IF;

END PROCESS change; P0:PROCESS(clk1) BEGIN

IF(clk1'EVENT AND clk1='1')THEN IF(cnt1=5)THEN cnt1<=0; ELSE cnt1<=cnt1+1; END IF; END IF; END PROCESS p0; P1:PROCESS(cnt,cnt1) BEGIN

IF(clear='0')THEN l<=\ ELSE

CASE cnt+cnt1 IS

WHEN 0=>l<=\ WHEN 1=>l<=\ WHEN 2=>l<=\ WHEN 3=>l<=\ WHEN 4=>l<=\

WHEN 5=>l<=\ WHEN 6=>l<=\ WHEN 7=>l<=\ WHEN 8=>l<=\ WHEN 9=>l<=\ WHEN 10=>l<=\ WHEN 11=>l<=\ WHEN OTHERS =>l<=\ END CASE; END IF; END PROCESS p1; guan<=q_temp; p2:PROCESS(cnt) BEGIN

IF(clear='0')THEN c<=\ ELSE CASE cnt IS

WHEN 0=>c<=\ WHEN 1=>c<=\ WHEN 2=>c<=\ WHEN 3=>c<=\ WHEN 4=>c<=\ WHEN 5=>c<=\ WHEN OTHERS =>c<=\ END CASE; END IF; END PROCESS p2;

xuan<=count; END zuo;

(3) 亮了又熄灭:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY bianhua IS PORT(

clk,clear:IN STD_LOGIC;

guan:out STD_LOGIC_VECTOR (6 downto 0); xuan:OUT STD_LOGIC_VECTOR(5 downto 0) );

end bianhua;

ARCHITECTURE wei OF bianhua IS signal tmp:integer range 0 to 5; signal w:integer range 0 to 5; signal s:integer range 0 to 10; signal k:integer range 0 to 1; signal o:integer range 0 to 6; signal p:integer range -1 to 1; signal clko:std_logic_vector(0 to 5); BEGIN

process(clear,clk) begin

if clear='0' then tmp<=0; w<=0;

s<=0; k<=0; o<=6; p<=-1;

elsif (clk'event and clk='1')then if tmp=5 then tmp<=0; w<=w+1; else

tmp<=tmp+1; end if; if w=6 then w<=0; end if;

for i in 0 to 5 loop if k=0 then if tmp>=o then clko(i)<='1'; elsif tmp

if (5-tmp)>=o then clko(i)<='1'; elsif tmp

上面的数组依旧是xuan,每个时刻只有一个有效信号保证一个数码管亮。下面的数组是guan,数码管译码器显示的数据。每个时刻xuan和guan都会发生相应的改变。

八. 实验故障及问题分析:

1.画全加器原理图时,编译总是没有通过。 原因:画图时将线连入了半加器的模块里面:

正确连接方式:

反思:认真仔细是实验做好的必要保证。

2.实验一的(3)需要注意的事项:要保证使能端能使译码器正常工作。

3.第二次实验8421BCD转余三码:

概念理解有误,余三码的范围应该是从0011至1100,而不是0011

至1001,所以:

的余三码,应该用VHDL描述如下:

不是完整

4.第三次实验的分频器clear=0时,是指状态又从0开始记,而非立即将输出置零。

5.最初设计实验四的时候没有考虑到clk在实际实验板上工作只有四种频率状态,因此最初没有加分频器,虽然仿真波形没有问题,但是实验板上工作时可能会因为变化过快而看不见需要显示的结果,因此在VHDL编程要加入一个分频器。所以改为了上面最终的代码。

九. 实验总结

一个月前,我们不知道VHDL,不会用Quantus,不清楚数电实验需要做些什么。现在,我们可以用Quantus去实现我们想要的功能,用VHDL通过不同的语句去设计我们的实验,也明白了数电实验的大致内容。每每看着仿真出来一个个符合计算结果的波形,理论和实际的完美结合总会让我们不胜欢喜。 实验是将理论学习知识应用的过程,我们在设计每一个实验之前都应该弄清楚实验原理,预测到应有的结果,如果实验过程中发现偏差,要及时分析调整。而且作为一名工科学生,以后很可能成为一名工程师,细心严谨是我们必须具有的特点,不能粗心毛躁,要静下心认真做实验,这样才能高效完成实验。

耐心,认真,灵活。我们应该对自己的实验负责,让它不断完善,不只是符合要求,更要用我们已有的知识去设计出更好的方案,创新性的完成实验,比如:实验四就可以通过拨码开关输入2个二进制数来做选择,直接将三个实验在一个entity中完成。我通过这一个月的实验学会了熟练使用Quantus,也大概了解了VHDL语言,还发现了一些理论学习中误解的知识点,真的收获很多,非常开心。虽然每次都改了不少错,预习也花了不少时间,但是最后所有实验都运行出了正确的结果,而且实验原理也都深深地留在了我的脑海,有了这些,一切付出都是值得的!

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数字电路与逻辑设计实验在线全文阅读。

数字电路与逻辑设计实验.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/224389.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: