eda实习报告.docx

上传人:b****5 文档编号:6695734 上传时间:2023-01-09 格式:DOCX 页数:25 大小:126.06KB
下载 相关 举报
eda实习报告.docx_第1页
第1页 / 共25页
eda实习报告.docx_第2页
第2页 / 共25页
eda实习报告.docx_第3页
第3页 / 共25页
eda实习报告.docx_第4页
第4页 / 共25页
eda实习报告.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

eda实习报告.docx

《eda实习报告.docx》由会员分享,可在线阅读,更多相关《eda实习报告.docx(25页珍藏版)》请在冰豆网上搜索。

eda实习报告.docx

eda实习报告

 

EDA实习报告

题目

学生姓名:

班号:

学号:

1206

指导老师:

 

中国地质大学(武汉)机械与电子信息学院

2011年12月

实验一、3/8译码器和半加器的实现

一、实验步骤

学习Quartus2软件的用法:

1、在WINDOWS界面双击Quartus2图标进入Quartus2环境;

2、单击file菜单下的NewProjectWizard:

Introduction按照向导里面的介绍新建一个工程并把它保存到自己的路径下面。

3、单击file菜单下的New,选择VHDLFile,后单击OK,就能创建一个后缀为.vhd(*.bdf)的文件。

4、输入完成后检查并保存,编译。

5、改错并重新编译;

6、建立仿真波形文件并进行仿真。

7、选择器件及分配引脚,重新编译;根据引脚分配在试验箱上进行连线,使用LED进行显示;

8、程序下载,观察实验结果并记录。

2、源程序

1、3/8译码器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYDECODE38IS

PORT(A:

INSTD_LOGIC_VECTOR(2DOWNTO0);

DECODE38:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

END;

ARCHITECTUREoneOFDECODE38IS

BEGIN

PROCESS(A)

BEGIN

CASEAIS

WHEN"000"=>DECODE38<="10000000";

WHEN"001"=>DECODE38<="01000000";

WHEN"010"=>DECODE38<="00100000";

WHEN"011"=>DECODE38<="00010000";

WHEN"100"=>DECODE38<="00001000";

WHEN"101"=>DECODE38<="00000100";

WHEN"110"=>DECODE38<="00000010";

WHEN"111"=>DECODE38<="00000001";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

END;

2、半加器

半加器是通过画出它的电路图来实现的,电路图为:

三、仿真波形

1、3/8译码器

2、半加器

4、心得体会

通过这个实验我初步了解了Quartus2软件的用法,并能够用它编译程序、仿真及下载到试验箱上。

在画波形图时,由于时间没有设置好,所以使波形有些时延,但大体还是可以的。

在本次试验中,我感觉自己获益匪浅,在设计3/8译码器时,由于粗心打错了一些字母,导致在检查过程中出现了错误,所以在以后写程序时我会更加注意下,尽量减少这类错误的发生。

半加器的设计是通过画电路图实现的,这个在实验时没有出现错误,做完这个后,我还将半加器保存到库里面,从而画出了全加器的电路图,并下载到试验箱上面,也没有出现错误。

总的来说,我学会了运用这个软件来实现3/8译码器和半加器。

实验二、BCD七段显示译码器实验

1、BCD七段显示译码器

2、源程序

1、BCD七段显示译码器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYDECL7SIS

PORT(A:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DECL7S:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

END;

ARCHITECTUREoneOFDECL7SIS

BEGIN

PROCESS(A)

BEGIN

CASEAIS

WHEN"0000"=>DECL7S<="1111110";

WHEN"0001"=>DECL7S<="0110000";

WHEN"0010"=>DECL7S<="1101101";

WHEN"0011"=>DECL7S<="1111001";

WHEN"0100"=>DECL7S<="0110011";

WHEN"0101"=>DECL7S<="1011011";

WHEN"0110"=>DECL7S<="1011111";

WHEN"0111"=>DECL7S<="1110000";

WHEN"1000"=>DECL7S<="1111111";

WHEN"1001"=>DECL7S<="1111011";

WHEN"1010"=>DECL7S<="1110111";

WHEN"1011"=>DECL7S<="0011111";

WHEN"1100"=>DECL7S<="1001110";

WHEN"1101"=>DECL7S<="0111101";

WHEN"1110"=>DECL7S<="1001111";

WHEN"1111"=>DECL7S<="1000111";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

END;

仿真波形:

2、动态七段译码显示器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYSHENGRIIS

PORT(CLK:

INSTD_LOGIC;

SG:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

BT:

BUFFERintegerrange7downto0);

ENDENTITYSHENGRI;

ARCHITECTUREoneOFSHENGRIIS

BEGIN

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THENBT<=BT+1;

ENDIF;

CASEBTIS

WHEN0=>SG<="0110000";

WHEN1=>SG<="1110011";

WHEN2=>SG<="1111111";

WHEN3=>SG<="1110011";

WHEN4=>SG<="1111110";

WHEN5=>SG<="1111001";

WHEN6=>SG<="1111110";

WHEN7=>SG<="1110011";

ENDCASE;

ENDPROCESS;

END;

3、心得体会

经过第一次实验的锻炼,第二次实验做的顺利了好多。

在写程序过程中,也没有出现打错字的错误了,同时速度也比上次提高了好多。

这次是做BCD七段显示译码器的实验,程序比第一次实验麻烦了一点,用了一些when...else语句,不过这是静态显示的。

做完这个以后,还做了动态七段译码显示器实验,写程序时把显示器部分的显示设置成为自己的生日。

在下载程序时出现了问题,一直不能下载好,后来换了一条下载线才好。

不过这次试验也是顺利做了出来,收获很大。

实验三、电子时钟

一、电子时钟实验心得

这次实验分成了几个模块,感觉比较的难。

首先是电子钟的实体部分,用元件例化语句连接起来。

有key_debounce、div_freq、control、counter、ring、display等。

首先是消抖部分,这个模块我一直不是很清楚,没有搞懂,所以程序在这个部分没能写好,在实验时消抖效果也不好,扳动开关后有可能状态没什么变化。

接下来是分频部分,我原先是给了它一个1024Hz的脉冲,然后再给其他几个部分进行分频,即:

clk_time<=Q(9);-----1Hz

ringtone2<=Q(11);----0.25Hz

clk_change<=Q(8);----2Hz

ringtone1<=Q(9);----1Hz

clk_key<=Q

(2);----128Hz

clk_control<=Q

(2);-----128Hz

clk_dis<=Q(0);----512Hz

接下来是控制模块,利用setup来改变状态,同时将计时的小时和分钟、闹钟的小时和分钟分别用不同的状态控制,利用setup和ajust来调整。

接着是计时模块,计时的分钟小时秒都分别进行考虑,具体在程序中体现出来。

再就是响铃部分,响铃分为整点报时和闹钟响铃两个部分,分别用不同的状态进行控制。

然后就是显示管扫描部分。

这个实验我做了好久,在实验课上没能做好,在课下也花了好多时间,有些地方总是出现错误,所以再改了好久,也和同学商量了好多才能够做出来,但消抖部分仍然存在很大的问题,而且是在考试过后才验收的,不过收获还是很大。

二、源程序

1、代码

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_unsigned.all;

ENTITYdigital_clock1IS

PORT

(setup_k:

INSTD_LOGIC;

adjust_k:

INSTD_LOGIC;

clk:

INSTD_LOGIC;

clr:

INSTD_LOGIC;

LEDout:

OUTSTD_LOGIC_VECTOR(6downto0);

SCAN:

OUTSTD_LOGIC_VECTOR(2downto0);

mode:

bufferstd_logic_vector(3downto0);

ringtone:

OUTSTD_LOGIC);

endentitydigital_clock1;

architecturebehofdigital_clock1is

componentkey_debounce

PORT(

clk_key:

INSTD_LOGIC;

setup_k:

INSTD_LOGIc;

adjust_k:

INSTD_LOGIC;

k_setup,k_adjust:

OUTSTD_LOGIC);

ENDcomponent;

componentdiv_freq

PORT

(clk:

INSTD_LOGIC;

clr:

INSTD_LOGIC;

clk_key:

OUTSTD_LOGIC;

clk_control:

OUTSTD_LOGIC;

clk_time:

OUTSTD_LOGIC;

clk_change:

OUTSTD_LOGIC;

ringtone1:

OUTSTD_LOGIC;

ringtone2:

OUTSTD_LOGIC;

clk_dis:

OUTSTD_LOGIC);

ENDcomponent;

componentcontrol

port(k_adjust:

instd_logic;

k_setup:

instd_logic;

clr:

instd_logic;

clk_control:

instd_logic;

mode:

outstd_logic_vector(3downto0));

endcomponent;

componentcounter

port(

clk_time,clk_change,clr:

instd_logic;

mode:

instd_logic_vector(3downto0);

h1,h0:

outstd_logic_vector(3downto0);

min1,min0:

outstd_logic_vector(3downto0);

sec1,sec0:

outstd_logic_vector(3downto0));

endcomponent;

componentring

port(

h1,h0,min1,min0,sec1,sec0:

instd_logic_vector(3downto0);

clk_change:

instd_logic;

mode:

instd_logic_vector(3downto0);

ringtone1:

inSTD_LOGIC;

ringtone2:

inSTD_LOGIC;

ringtone:

outstd_logic;

a_h1,a_h0,a_min1,a_min0:

outstd_logic_vector(3downto0));

endcomponent;

componentdisplay

port(

c_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0:

instd_logic_vector(3downto0);

a_h1,a_h0,a_min1,a_min0:

instd_logic_vector(3downto0);

clk_dis:

instd_logic;

mode:

instd_logic_vector(3downto0);

sel:

outstd_logic_vector(2downto0);

y:

outstd_logic_vector(6downto0)

);

endcomponent;

signalclk_change,k_setup,k_adjust,clk_control,clk_time,clk_key,ringtone1,ringtone2,clk_dis:

std_logic;

signalc_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0:

std_logic_vector(3downto0);

signala_h1,a_h0,a_min1,a_min0:

std_logic_vector(3downto0);

begin

u1:

key_debounceportmap(clk_key,setup_k,adjust_k,k_setup,k_adjust);

u2:

controlportmap(k_adjust,k_setup,clr,clk_control,mode);

u3:

div_freqportmap(clk,clr,clk_key,clk_control,clk_time,clk_change,ringtone1,ringtone2,clk_dis);

u4:

counterportmap(clk_time,clk_change,clr,mode,c_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0);

u5:

ringportmap(c_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0,clk_change,mode,ringtone1,ringtone2,ringtone,a_h1,a_h0,a_min1,a_min0);

u6:

displayportmap(c_h1,c_h0,c_min1,c_min0,c_sec1,c_sec0,a_h1,a_h0,a_min1,a_min0,clk_dis,mode,SCAN,LEDout);

endarchitecturebeh;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_Arith.ALL;

USEIEEE.STD_LOGIC_Unsigned.ALL;

ENTITYkey_debounceIS

PORT(

clk_key:

INSTD_LOGIC;

setup_k:

INSTD_LOGIc;

adjust_k:

INSTD_LOGIC;

k_setup,k_adjust:

OUTSTD_LOGIC);

ENDkey_debounce;

ARCHITECTUREoneOFkey_debounceIS

SIGNALdout1,dout2,dout3,dout4,dout5,dout6:

STD_LOGIC;

BEGIN

k_setup<=dout1ORdout2ORdout3;

k_adjust<=dout4ORdout5ORdout6;

PROCESS(clk_key)

BEGIN

IFRISING_EDGE(clk_key)THEN

dout1<=setup_k;dout2<=dout1;dout3<=dout2;

dout4<=adjust_k;dout5<=dout4;dout6<=dout5;

ENDIF;

ENDPROCESS;

ENDone;

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_unsigned.all;

ENTITYdiv_freqIS

PORT

clk:

INSTD_LOGIC;

clr:

INSTD_LOGIC;

clk_key:

OUTSTD_LOGIC;

clk_control:

OUTSTD_LOGIC;

clk_time:

OUTSTD_LOGIC;

clk_change:

OUTSTD_LOGIC;

ringtone1:

OUTSTD_LOGIC;

ringtone2:

OUTSTD_LOGIC;

clk_dis:

OUTSTD_LOGIC

);

ENDdiv_freq;

ARCHITECTUREdiv_freq_architectureOFdiv_freqIS

BEGIN

process(clk,clr)

variableQ:

std_logic_vector(11downto0);

begin

ifclr='1'thenQ:

="000000000000";

elsifclk'eventandclk='1'then

ifQ="111111111111"thenQ:

="000000000000";

elseQ:

=Q+1;

endif;

endif;

clk_time<=Q(9);-----1Hz

ringtone2<=Q(11);----0.25Hz

clk_change<=Q(8);----2Hz

ringtone1<=Q(9);----1Hz

clk_key<=Q

(2);----128Hz

clk_control<=Q

(2);-----128Hz

clk_dis<=Q(0);----512Hz

endprocess;

ENDdiv_freq_architecture;

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_unsigned.all;

entitycontrolis

port(k_adjust:

instd_logic;

k_setup:

instd_logic;

clr:

instd_logic;

clk_control:

instd_logic;

mode:

outstd_logic_vector(3downto0)

);

endentitycontrol;

ARCHITECTUREcontrol_architectureOFcontrolIS

typestatesis(timing,changehour,changemin,setalarmh,setalarmm);

signalcurrent_state,next_state:

states;

BEGIN

reg:

process(clr,clk_control)

begin

ifclr='1'thencurrent_state<=timing;

elsifclk_control'eventandclk_control='1'thencurrent_state<=next_state;

endif;

endprocess;

com:

process(current_state,k_setup)

begin

casecurrent_stateis

whentiming=>ifk_setup='1'thennext_state<=changehour;elsenext_state<=timing;

endif;

whenchangehour=>ifk_setup='1'thennext_state<=changemin;elsenext_state<=changehour;

endif;

whenchangemin=>ifk_setup='1'thennext_state<=setalarmh;elsenext_state<=changemin;

endif;

whensetalarmh=>ifk_setup='1'thennext_state<=setalarmm;elsenext_state<=setalarmh;

endif;

whensetalarmm=>ifk_setup='1'thennext_state<=timing;elsenext_state<=setalarmm;

endif;

endcase;

endprocess;

output:

process(current_state,k_adjust)

begin

casecurrent_stateis

whentiming=>mode<="0000";

whenchangehour=>ifk_adjust='1'thenmode<="0001";elsemode<="0010";

endif;

whenchangemin=>ifk_adjust='1'thenmode<="0011";elsemode<="0100";

endif;

whensetalarmh=>ifk_adjust='1'thenmode<="0101";elsemode<="0110";

endif;

whensetalarmm=>ifk_adjust='1'thenmode<="0111";elsemode<="1000";

endif;

endcase;

endprocess;

ENDcontrol_architecture;

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_unsigned.all;

entitycounteris

port(

clk_time,clk_change,clr:

instd_logic;

mode:

instd_logic_vector(3downto0);

h1,h0:

outstd

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1