EDA实验报告.docx
《EDA实验报告.docx》由会员分享,可在线阅读,更多相关《EDA实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
EDA实验报告
EDA技术实验报告
专业班级:
电子信息工程2010级2班
学生姓名:
学生学号:
指导教师:
钟福如
实验二用图形法设计模为12的同步计数器
一、实验目的:
掌握MAXPLUSⅡ的图形输入法和仿真过程
(1)掌握图形输入法
(2)熟悉仿真方法
(3)理解时序仿真
(4)掌握用图形编辑法实现组合逻辑电路设计思想。
二、实验内容:
用图形法设计模为12的同步计数器
三、实验内容:
1实验原理图:
2实验过程
(1)在File菜单里面选择New打开新建文件类型对话框。
选择WaveformEditorFile项单击OK。
(2)在波形编辑器窗口的Name下单击鼠标右键,出现浮动的菜单,选择EnterNodesfromSNF...可以打开“从SNF文件输入观测点”的对话框。
(3)在Type区选择Input和Output,在默认的情况下是打开的,单击List按钮,可在AvailableNodes&Groups区看到设计文件中使用的输入/输出信号,单击=>按钮可以将这些信号选择到SelectedNodes&Groups区。
单击OK按钮,关闭对话框即可看到波形编辑窗口,将此波形文件保存为默认名。
在此,默认的情况下,模拟的时间长短为1us。
此时在“File”菜单中选择“EndTime”来设置结束时间。
(1)在模为12的计数器中,我们将信号“en”从头到尾,即从
0ns到1000ns赋值为‘1’。
选中信号“en”,单击“Name”区中的“en”信号,可看见“en”信号变为黑色,表示被选中;单击
即可将“en”信号赋为‘1’
(2)采用同样的方式可将信号“clear”从0ns到1000ns赋值为
“1”,为观察其清零的作用,将在240ns到300ns之间将其赋值为“0”(因为该信号低电平有效)
将鼠标移到“clear”信号的240ns处按住鼠标左键并向右拖动鼠标300ns处,松开鼠标左键可以看到这段区域为黑色,被选中,单击工具条中的
即可。
(3)为了将时钟信号“clk”赋周期为40ns的时钟信号。
选中信号“clk”;设置信号周期。
单击工具条中的
就可以打开下面的对话框,单击“OK”关闭就对话框即可生成所需的时钟。
选择“File”中的“Save”存盘。
在此已完成波形输入:
建立好的输入波形图
四、运行仿真器,进行时序仿真
从“MAX+PlusII”菜单中选择“Simulator”,打开仿真器,单击按钮“Start”开始仿真。
仿真完毕之后,单击“OpenSCF”按钮打开刚才编辑的波形文件,就可以对仿真结果进行检查。
为了观测方便,可将计数器输出Q3、Q2、Q1、Q0作为一个组来观测:
(1)将鼠标移到“Name”区的Q3上,按住鼠标的左键并按住向下拖动鼠标之Q0处,松开左键,可选中信号Q3、Q2、Q1、Q0。
(2)在选中区(黑色)上单击鼠标右键,打开一个浮动菜单,选择“EnterGroup”。
(3)单击“Ok”关闭此对话框,可以得到下面的波形图文件。
现在观测就容易了。
仿真图:
十进制
十六进制
二进制
八进制
五、实验心得
本实验利用原理图编辑输入法完成计数器、数字时钟的设计,提高了我的设计的能力。
在指导老师的监督和指导下,通过分析实验要求,自已动手编写实验程序,按实验要求完成了实验任务。
实验三六位环行计数器设计
一、实验目的:
(1)熟悉图形输入编辑实现时序逻辑电路设计的过程。
(2)掌握环行计数器的设计思路。
二、实验内容:
通过分析六位环行计数器设计原理图,试写出该计数器的时钟方程、驱动方程和输出方程,并画出其状态转换图。
通过时序仿真结果验证分析的正确性和原理图设计的合理性。
三、实验内容
1.实验要求
(1)掌握图形逻辑输入法及编译的方法。
(2)理解仿真实现过程并分析仿真结果。
(3)掌握环行计数器的设计方思路。
2.实验原理
环行计数器是由移位寄存器加上一定的反馈电路构成的。
图形中,采用输入输出模块,JK触发器和两个D触发器,连接组成的六位环行计数器。
3.实验电路
四、仿真结果图
五、实验结果分析
本实验利用原理图编辑输入完成六位环行计数器的设计,在连接相关模块后,进行编译,建立工程,导入输入项(CLK时钟信号),再进行仿真,其结果如图所示。
从仿真图,我们可以看出,初始值设定在“000”,然后是“001”,“011”,“111”,“110”,“100”,最后又回到初始值。
继续循环下去。
六、实验心得
在实验过程中,通过查看书本上的相关知识点,及时向同学和老师请教,使我较为全面的了解了EDA这门课的作用。
通过对计数器的设计,学会使用触发器来实现功能的输出,掌握时序逻辑电路的设计方法,并能运用相关的元器件来进行图形的连接。
实验六基于VHDL语言的分频器设计与实现
一、实验目的
1、进一步掌握VHDL语言的基本结构及设计的输入方法。
2、掌握VHDL基本逻辑电路的综合设计应用。
二、实验原理
在数字电路系统中,分频电路应用得十分广泛。
例如,工程人员常常使用分频电路来得到数字通信中的帧头信号、选通信号以及中断信号等。
因此,分频电路在数字电路系统的设计中也应该作为重要的基本电路来掌握,从而给今后的一些设计带来方便。
三、实验内容
1、设计并实现一个6分频的分频电路,要求其输出信号的占空比为50%。
请分析分频电路设计原理并编写VHDL语言程序,利用Max+PlusII开发软件对其进行编译和仿真。
6分频电路实现程序代码如下:
2、仿真波形:
3、仿真结果如下图所示:
四、实验结果分析
利用VHDL语言设计分频电路,目的在于进一步掌握VHDL语言的基本结构及设计的输入方法,掌握VHDL基本逻辑电路的综合设计应用。
从结果分析来看,通过输入的时钟信号来控制输出的信号,通过相关元器件的连接,及程序的编译结果,来实现分频的目的。
五、实验心得
本实验通过VHDL语言与元件的结合实现了分频电路。
这样不仅掌握了VHDL语言而且熟悉了电路图,只是在实现的过程中,在如何将语言和电路图结合起来对我来说还是有一定的难度,甚至都无从下手,不过,在不断的努力下终于将结果做出来了,这让我很开心。
实验九汽车尾灯控制器设计与实现
一、实验目的
1、进一步掌握VHDL语言的基本结构及设计的输入方法。
2、掌握自顶向下设计方法。
3、掌握层次化设计混合编程方法。
二、实验原理
汽车尾灯控制器就是一个状态机的实例。
当汽车正常行驶时所有指示灯都不亮;当汽车向右转弯时,汽车右侧的指示灯RD1亮;当汽车向左侧转弯时,汽车左侧的指示灯LD1亮;当汽车刹车时,汽车右侧的指示灯RD2和汽车左侧的指示灯LD2同时亮;当汽车在夜间行驶时,汽车右侧的指示灯RD3和汽车左侧的指示灯LD3同时一直亮。
通过设置系统的输入信号:
系统时钟信号CLK,汽车左转弯控制信号LEFT,汽车右转弯控制信号RIGHT,刹车信号BRAKE,夜间行驶信号NIGHT和系统的输出信号:
汽车左侧3盏指示灯LD1、LD2、LD3和汽车右侧3盏指示灯RD1、RD2、RD3实现以上功能。
三、实验内容
1、假设汽车尾部左右两侧各有3盏指示灯,其控制功能应包括:
(1)汽车正常行驶时指示灯都不亮。
(2)汽车右转弯时,右侧的一盏指示灯亮。
(3)汽车左转弯时,左侧的一盏指示灯亮。
(4)汽车刹车时,左右两侧的一盏指示灯同时亮。
(5)汽车在夜间行驶时,左右两侧的一盏指示灯同时一直亮,供照明使用。
2、根据系统设计要求,系统设计采用自顶向下的设计方法,顶层设计采用原理图设计方式,它由时钟分频模块、汽车尾灯主控模块、左边灯控制模块和右边灯控制模块四部分组成。
系统设计原理图如下图所示。
系统的输入信号包括:
系统时钟信号CLK,汽车左转弯控制信号LEFT,汽车右转弯控制信号RIGHT,刹车信号BRAKE,夜间行驶信号NIGHT。
系统的输出信号包括:
汽车左侧3盏指示灯LD1、LD2、LD3和汽车右侧3盏指示灯RD1、RD2、RD3。
3、程序代码
Libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
ENTITYqicheIS
PORT(
light_cs:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
--大到小light69686766
fs:
instd_logic_vector(4downto0);
light:
OUTSTD_LOGIC_VECTOR(2DOWNTO0)
--灯70绿71黄72红
);
ENDqiche;
ARCHITECTUREoneOFqicheIS
beginprocess(fs)begin
iffs(0)='1'then
light<="000";
light_cs<="1111";
elsiffs
(1)='1'then
light<="010";
light_cs<="1110";
elsiffs
(2)='1'then
light<="010";
light_cs<="1011";
elsiffs(3)='1'then
light<="001";
light_cs<="1010";
elsiffs(4)='1'then
light<="100";
light_cs<="1010";
endif;
endprocess;
endone
四、汽车尾灯主控模块仿真图
五、实验分析
对时序仿真图进行分析:
RIGHT,LEFT,NIGHT,BRAKE为输入信号,RIGHT为1表示右转,LEFT为1表示左转,NIGHT为1表示夜间行路,BRAKE为1表示刹车。
RP,LP,NIGHT_LED,BRAKE_LED为输出信号。
如图所示:
当RIGHT为1时,产生一个RP为1的信号脉冲输出,当LEFT为1时,产生一个LP为1的信号脉冲输出,当NIGHT为1时,产生一个NIGHT_LED为1的信号脉冲输出。
当BRAKE为1时,产生一个BRAKE_LED为1的信号脉冲输出。
六、实验心得
在这次的实验中我学习到在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。
实验十彩灯控制器设计与实现
一、实验目的
1、进一步掌握VHDL语言的基本结构及设计的输入方法。
2、掌握VHDL语言中状态机的设计与实现。
3、掌握层次化设计混合编程方法和元件例化语句的使用方法。
二、实验内容
1、设计并实现一彩灯控制器,要有多种花型变化(至少设计4种);多种花型可以自动变换,循环往复;彩灯变换的快慢节拍可以选择;彩灯控制器具有清零开关。
2、根据系统设计要求,现设计一个具有6种花型循环变化的彩灯控制器。
系统设计采用自顶向下的设计方法,系统的整体组装设计原理图如图所示,它由时序控制模块和显示控制模块两部分组成。
整个系统有3个输入信号:
系统时钟信号CLK,系统清零信号CLR和控制彩灯节奏快慢的选择开关SPEED。
9个输出信号LED[8..0],分别用于模拟彩灯。
系统整体设计原理图如下图所示,请编写SX、XS程序代码,分析彩灯控制器实现过程,结合现已设计底层文件实现顶层元器件(采用混合编程或VHDL文本编辑输入法)系统的设计,使之组成一个完整系统。
系统顶层设计原理图
三、实验VHDL程序
1、分频器模块
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYfenpinqiIS
PORT
(
clk,rst:
INstd_logic;
clk_10,clk_4,clk_6,clk_8:
OUTstd_logic
);
ENDfenpinqi;
ARCHITECTUREcdOFfenpinqiIS
begin
p1:
process(clk,rst)
variablea:
integerrange0to20;
begin
ifrst='1'then
clk_4<='0';
else
ifclk'eventandclk='1'then
ifa>=3then
a:
=0;
clk_4<='1';
else
a:
=a+1;
clk_4<='0';
endif;
endif;
endif;
endprocessp1;
p2:
process(clk,rst)
variableb:
integerrange0to20;
begin
ifrst='1'then
clk_6<='0';
else
ifclk'eventandclk='1'then
ifb>=5then
b:
=0;
clk_6<='1';
else
b:
=b+1;
clk_6<='0';
endif;
endif;
endif;
endprocessp2;
p3:
process(clk,rst)
variablec:
integerrange0to20;
begin
ifrst='1'then
clk_8<='0';
else
ifclk'eventandclk='1'then
ifc>=7then
c:
=0;
clk_8<='1';
else
c:
=c+1;
clk_8<='0';
endif;
endif;
endif;
endprocessp3;
p4:
process(clk,rst)
variabled:
integerrange0to20;
begin
ifrst='1'then
clk_10<='0';
else
ifclk'eventandclk='1'then
ifd>=9then
d:
=0;
clk_10<='1';
else
d:
=d+1;
clk_10<='0';
endif;
endif;
endif;
endprocessp4;
endcd;
程序仿真结果图:
2、4选1选择器
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYxzq4_1IS
PORT
(
rst:
instd_logic;
inp:
inintegerrange0to3;
in1,in2,in3,in4:
Instd_logic;
output:
OUTstd_logic
);
ENDxzq4_1;
ARCHITECTUREaOFxzq4_1IS
BEGIN
PROCESS(rst,inp)
BEGIN
if(rst='1')thenoutput<='0';
else
caseinpis
when0=>output<=in1;
when1=>output<=in2;
when2=>output<=in3;
when3=>output<=in4;
whenothers=>null;
endcase;
endif;
ENDPROCESS;
ENDa;
仿真结果图:
3、彩灯控制模块
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcaidengIS
PORT
(
input:
ININTEGERRANGE0TO31;
rst:
instd_logic;
output:
OUTstd_logic_vector(7downto0);
sm:
outstd_logic_vector(6downto0)
);
ENDcaideng;
ARCHITECTUREaOFcaidengIS
BEGIN
PROCESS(input)
BEGIN
ifrst='1'thenoutput<="00000000";sm<="0000000";
else
caseinputis
when0=>output<="10000000";sm<="0000110";
when1=>output<="01000000";sm<="0000110";
when2=>output<="00100000";sm<="0000110";
when3=>output<="00010000";sm<="0000110";
when4=>output<="00001000";sm<="0000110";
when5=>output<="00000100";sm<="0000110";
when6=>output<="00000010";sm<="0000110";
when7=>output<="00000001";sm<="0000110";
when8=>output<="00010000";sm<="0011011";
when9=>output<="00110000";sm<="0011011";
when10=>output<="00111000";sm<="0011011";
when11=>output<="01111000";sm<="0011011";
when12=>output<="01111100";sm<="0011011";
when13=>output<="01111110";sm<="0011011";
when14=>output<="11111110";sm<="0011011";
when15=>output<="11111111";sm<="0011011";
when16=>output<="10000001";sm<="1001111";
when17=>output<="11000001";sm<="1001111";
when18=>output<="11000011";sm<="1001111";
when19=>output<="11100011";sm<="0011011";
when20=>output<="11100111";sm<="1001111";
when21=>output<="11110111";sm<="1001111";
when22=>output<="11111111";sm<="1001111";
when23=>output<="00001000";sm<="1001111";
when24=>output<="00000001";sm<="0100110";
when25=>output<="00000010";sm<="0100110";
when26=>output<="00000100";sm<="0100110";
when27=>output<="00001000";sm<="0100110";
when28=>output<="00010000";sm<="0100110";
when29=>output<="00100000";sm<="0100110";
when30=>output<="01000000";sm<="0100110";
when31=>output<="10000000";sm<="0100110";
whenothers=>null;
endcase;
endif;
endprocess;
enda;
仿真结果图:
4、32进制计数器模块
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcounter_32IS
PORT
(
clk,rst:
INstd_logic;
count_out:
OUTintegerrange0to31);
ENDcounter_32;
ARCHITECTUREaOFcounter_32IS
BEGIN
PROCESS(rst,clk)
variabletemp:
integerrange0to32;
BEGIN
IFrst='1'THEN
temp:
=0;
ELSIF(clk'eventandclk='1')THEN
temp:
=temp+1;
if(temp=32)then
temp:
=0;
endif;
ENDIF;
count_out<=temp;
ENDPROCESS;
ENDa;
仿真结果图:
5、4进制计数器模块
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcounter_4IS
PORT
(
clk,rst:
INstd_logic;
count_out:
OUTintegerrange0to3);
ENDcounter_4;
ARCHITECTUREaOFcounter_4IS
BEGIN
PROCESS(rst,clk)
variabletemp:
integerrange0to32;
BEGIN
IFrst='1'THEN
temp:
=0;
ELSIF(clk'eventandclk='1')THEN
temp:
=temp+1;
if(temp=4)then
temp:
=0;
endif;
ENDIF;
count_out<=temp;
ENDPROCESS;
ENDa;
仿真结果图:
四、实验原理图
五、波形图以及实验结果
实验结果
六、实验心得
这次的实验使我更加深刻的了解了VHDL在生活中的应用,通过连接各个模块实验的结果得以实现,不过在连接的过程中也存在许多的问题。
例如,在运行程序时会出现很多错误,而且自己也不知道到底是哪出错了,还好有老师和同学的帮助,实验才可以圆满成功。