电子EDA实验报告.docx
《电子EDA实验报告.docx》由会员分享,可在线阅读,更多相关《电子EDA实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
![电子EDA实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/10/f51c040b-e83a-406d-a052-57ca300953bf/f51c040b-e83a-406d-a052-57ca300953bf1.gif)
电子EDA实验报告
《电子EDA技术》
实验报告
题目:
电子EDA技术实验报告
院(系):
信息科学与技术学院
专业:
电子信息工程
组长:
丁廷祥
成员:
李远波、王帅、常刚刚、魏巍、李近、刘富彬
授课教师:
钟福如
完成日期:
2011年09月24日
实验四基于VHDL的触发器与锁存器描述与设计
一、实验目的:
1.初步掌握VHDL语言的基本结构及设计的初步方法。
2.掌握VHDL语言的时序电路的设计方法。
3.掌握VHDL语言的基本描述语句的使用方法。
二、实验原理:
1.由LIBRARY引导的库的说明部分。
2.使用了另一种数据类型STD_LOGIC。
3.定义了一个内部节点信号SIGNAL。
4.使用一种新的条件判断表达式:
CLK′EVENTANDCLK=′1′
三、实验内容:
1.运用已学知识,设计边沿型D触发器,给出程序设计、软件编译、仿真分析及详细实验过程。
2.设计D触发器(电平型触发时序元件),给出程序设计、软件编译、仿真分析及详细实验过程。
3.分析比较上述两种触发器的仿真的实测结果,说明这两种电路的异同点。
四、实验设计
VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
entitydff1is
port(clk,d1:
instd_logic;
q1:
outstd_logic);
end;
architecturebhvofdff1is
signalqq:
std_logic;
begin
process(clk,d1)
begin
ifclk='1'thenqq<=d1;
endif;
endprocess;
q1<=qq;
end;
五.编译仿真截图
六.心得体会
本次实验我们学会了D触发器的工作原理及结构,在程序编译时出现错误,经过几次反复调试,解决了错误原因。
通过实践,我们了解了边沿D触发器的工作原理。
了解了VHDL语言的时序电路的设计方法,同时也加强了动手操作能力,通过一次次的对仿真图编译,查找错误,我们加深了对eda编程的熟悉度,对后期eda的学习打下了基础
实验五基于VHDL语言的全加器设计与实现
一、实验目的
1、进一步掌握VHDL语言的几本结构及设计的输入方法。
2、掌握VHDL语言的组合逻辑电路的设计方法。
3、掌握全加器原理,并能进行多位加法器的设计。
4、掌握VHDL语言的基本描述语句特别是元件例化语句的使用方法。
二、实验原理
参考《EDA技术教程》
三、实验内容
1、编写VHDL语言程序实现1位加法器设计,给出程序设计、软件编译、仿真分析及详细实验过程。
2、设计并实现由8个1位二进制加法器级联而成的8位二进制加法器。
8位加法器的顶层文件设计要求采用元件例化语句进行实现,并利用Max+PlusII开发软件对其进行编译和仿真。
四、程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityadder8bis
port(cin:
instd_logic;
a,b:
instd_logic_vector(7downto0);
s:
outstd_logic_vector(7downto0);
cout:
outstd_logic);
endadder8b;
architecturebehavofadder8bis
signalsint,aa,bb:
std_logic_vector(8downto0);
begin
aa<='0'&a;bb<='0'&b;sint<=aa+bb+cin;s<=sint(7downto0);
cout<=sint(8);
endbehav;
libraryieee;
useieee.std_logic_1164.all;
entityf_adderis
port(ain,bin,cin:
instd_logic;
cout,sum:
outstd_logic);
endentityf_adder;
architecturefd1off_adderis
componenth_adder
port(a,b:
instd_logic;
co,so:
outstd_logic);
endcomponent;
componentor2a
port(a,b:
instd_logic;
c:
outstd_logic);
endcomponent;
signald,e,f:
std_logic;
begin
u1:
h_adderportmap(a=>ain,b=>bin,co=>d,so=>e);
u2:
h_adderportmap(a=>e,b=>cin,co=>f,so=>sum);
u3:
or2aportmap(a=>d,b=>f,c=>cout);
endarchitecturefd1;
libraryieee;
useieee.std_logic_1164.all;
entityh_adderis
port(a,b:
instd_logic;
co,so:
outstd_logic);
endentityh_adder;
architecturefh1ofh_adderis
begin
so<=not(axor(notb));
co<=aandb;
endarchitecturefh1;
libraryieee;
useieee.std_logic_1164.all;
entityor2ais
port(a,b:
instd_logic;
c:
outstd_logic);
endentityor2a;
architectureoneofor2ais
begin
c<=aorb;
endarchitectureone;
五、仿真图
心得体会:
本次试验让我们掌握了全加器的原理,最重要的是我们掌握了由8个1位二进制加法器级联成8位二进制加法器的方法。
同时学会了VHDL语言的基本描述语句特别是元件例化语句的使用方法。
本次试验还算顺利,中间出了点小问题,最后还是在全组的努力下解决了问题。
让我们更加懂得合作精神。
实验六基于VHDL语言的分频设计与实现
一、实验目的
1、进一步掌握VHDL语言的基本结构及设计的输入方法
2、掌握VHDL基本逻辑电路的综合设计应用
二、实验原理
在数字电路系统中,分频电路应用得到十分广泛。
例如,工程人员常常使用分频电路来得到数字通信中的帧头信号、选通信号以及中断信号等。
因此,分频电路在数字电路系统的设计中也应该作为重要的基本电路来掌握,从而给今后的一些设计带来方便。
3、实验内容
1.设计并实现一个6分频电路,要求其输出信号的占空比为50%。
请分析分频电路设计原理并编写VHDL语言程序,利用Max*Plus2开发软件对其进行编译和仿真。
2.源代码
libraryieee;
useieee.std_logic_1164.all;
--useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityclk_div6is
port(clk:
instd_logic;
clk_out:
outstd_logic);
endclk_div6;
architecturertlofclk_div6is
signalclk_temp:
std_logic;
begin
process(clk)
variablecounter:
integerrange0to15;
constantmd:
integer:
=2;
begin
ifclk'eventandclk='1'then
ifcounter=mdthen
counter:
=0;
clk_temp<=notclk_temp;
else
counter:
=counter+1;
endif;
endif;
endprocess;
clk_out<=clk_temp;
endrtl;
libraryieee;
useieee.std_logic_1164.all;
--useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityclk_div16is
port(clk:
instd_logic;
clk_out:
outstd_logic);
endclk_div16;
architecturertlofclk_div16is
signalclk_temp:
std_logic;
begin
process(clk)
variablecounter:
integerrange0to15;
constantmd:
integer:
=14;
begin
if(clk'eventandclk='1')then
ifcounter=mdorclk_temp='1'then
counter:
=0;
clk_temp<=notclk_temp;
else
counter:
=counter+1;
endif;
endif;
endprocess;
clk_out<=clk_temp;
endrtl;
四、运行结果
五、心得体会
在本实验中,由于我们对课本知识了解的不够透彻,对软件认知度不够强,我们遇到了很多的困难,通过团队协商和老师的帮助指导,最终问题都克服了,本实验我们掌握了vhdl基本逻辑电路的综合设计应用,看这最终做出的成功,加强了我们对这门课学习的兴趣。
实验七时序逻辑移位寄存器的设计与实现
一、实验目的:
1.进一步掌握VHDL语言的基本结构机设计的输入方法。
2.掌握VHDL语言的时序逻辑电路的设计方法。
3.掌握VHDL语言的基本描述语句特别是元件例化语句的使用方法。
二、实验原理:
当CLK的上升沿到来时进程被启动,如果这时预置使能LOAD为高电平,则将输入端口的8位二进制数并行置入移位寄存器中,作为串行右移输出的初始值。
三、实验内容:
1、设计并实现一个带有同步并行预置功能的8位右移移位寄存器。
要求根据移位寄存器的设计原理编写此移位寄存器的VHDL语言程序,并利用Max+PlusII开发软件对其进行编译和仿真。
2、以移位寄存器为底层文件,设计由移位相加原理实现的8位乘法器。
此外,底层文件还应包括选通与门模块、8位加法器模块、16位锁存器模块等。
其顶层文件设计要求采用元件例化语句进行实现,并利用Max+PlusII开发软件对其进行编译和仿真。
四、实验设计
libraryieee;
useieee.std_logic_1164.all;
entitysreg8bis
port(clk,load:
instd_logic;
din:
instd_logic_vector(7downto0);
qb:
outstd_logic);
endsreg8b;
architecturebehavofsreg8bis
signalreg8:
std_logic_vector(7downto0);
begin
process(clk,load)
begin
ifclk'eventandclk='1'then
ifload='1'thenreg8<=din;
elsereg8(6downto0)<=reg8(7downto1);
endif;
endif;
endprocess;
qb<=reg8(0);
endbehav;
五.编译仿真截图
六.心得体会
通过本实验,我们锻炼了上机实践能力,加强了对课本知识的学习认知,掌握了vhdl语言的时序逻辑电路的设计方法,掌握了vhdl语言的基本结构设计的输入方法,通过一次次的修改,我们加深了带有同步并行预置功能的8位右移移位寄存器的工作原理。
实验八汽车尾灯控制器设计与实现
一、实验目的
1、进一步掌握VHDL语言的基本结构及设计的输入方法
2、掌握自顶向下设计方法
3、掌握层次化设计混合编程方法
二、实验原理
1、假设汽车尾部左右两侧各有3盏指示灯,其控制功能应包括:
(1)汽车正常行驶时指示灯都不亮。
(2)汽车右转弯时,右侧的一盏指示灯亮。
(3)汽车左转弯时,左侧的一盏指示灯亮。
(4)汽车刹车时,左右两侧的一盏指示灯同时亮。
(5)汽车在夜间行驶时,左右两侧的一盏指示灯同时一直亮,供照明使用。
三、实验内容
1、根据系统设计要求,系统设计采用自顶向下的设计方法,顶层设计采用原理图设计方式,它由时钟分频模块、汽车尾灯主控模块、左边灯控制模块和右边灯控制模块四部分组成。
系统设计原理图如下图所示:
系统的输入信号包括:
系统时钟信号CLK,汽车左转弯控制信号LEFT,汽车右转弯控制信号RIGHT,刹车信号BRAKE,夜间行驶信号NIGHT。
系统的输出信号包括:
汽车左侧3盏指示灯LD1,LD2,LD3和汽车右侧3盏指示灯RD1,RD2,RD3.
系统工作原理为:
当汽车正常行驶时所有指示灯都不亮;汽车右转弯时,汽车右侧的指示灯RD1亮;汽车左转弯时,左侧的指示灯LD1亮;汽车刹车时,汽车右侧的指示灯RD2和左侧的指示灯LD2同时亮。
当汽车在夜间行驶时,汽车右侧的指示灯RD3和左侧的指示灯LD2同时一直亮。
3、VHDL源代码
(1)时钟分频模块的VHDL源程序(SZ.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSZIS
PORT(CLK:
INSTD_LOGIC;
CP:
OUTSTD_LOGIC);
ENDENTITYSZ;
ARCHITECTUREONEOFSZIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
COUNT<=COUNT+1;
ENDIF;
ENDPROCESS;
CP<=COUNT(3);
ENDARCHITECTUREONE;
(2)汽车尾灯主控模块的VHDL源程序(CTRL.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCTRLIS
PORT(LEFT,RIGHT,BRAKE,NIGHT:
INSTD_LOGIC;
LP,RP,LR,BRAKE_LED,NIGHT_LED:
OUTSTD_LOGIC);
ENDENTITYCTRL;
ARCHITECTUREONEOFCTRLIS
BEGIN
NIGHT_LED<=NIGHT;
BRAKE_LED<=BRAKE;
PROCESS(LEFT,RIGHT)
VARIABLETEMP:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
TEMP:
=LEFT&RIGHT;
CASETEMPIS
WHEN"00"=>LP<='0';RP<='0';LR<='0';
WHEN"01"=>LP<='0';RP<='1';LR<='0';
WHEN"10"=>LP<='1';RP<='0';LR<='0';
WHENOTHERS=>LP<='0';RP<='0';LR<='1';
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREONE;
(3)左边灯控制模块的VHDL源程序(LC.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLCIS
PORT(CLK,LP,LR,BRAKE,NIGHT:
INSTD_LOGIC;
LEDL,LEDB,LEDN:
OUTSTD_LOGIC);
ENDENTITYLC;
ARCHITECTUREONEOFLCIS
BEGIN
LEDB<=BRAKE;
LEDN<=NIGHT;
PROCESS(CLK,LP,LR)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IF(LR='0')THEN
IF(LP='0')THEN
LEDL<='0';
ELSE
LEDL<='1';
ENDIF;
ELSE
LEDL<='0';
ENDIF;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREONE;
(4)左边灯控制模块的VHDL源程序(RC.VHD)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYRCIS
PORT(CLK,RP,LR,BRAKE,NIGHT:
INSTD_LOGIC;
LEDR,LEDB,LEDN:
OUTSTD_LOGIC);
ENDENTITYRC;
ARCHITECTUREONEOFRCIS
BEGIN
LEDB<=BRAKE;
LEDN<=NIGHT;
PROCESS(CLK,RP,LR)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IF(LR='0')THEN
IF(RP='0')THEN
LEDR<='0';
ELSE
LEDR<='1';
ENDIF;
ELSE
LEDR<='0';
ENDIF;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREONE;
(5)“与门”控制模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYAND2AIS
PORT(a,b:
INSTD_LOGIC;
c:
OUTSTD_LOGIC);
ENDENTITYAND2A;
ARCHITECTUREoneOFAND2AIS
BEGIN
c<=aANDb;
ENDARCHITECTUREONE;
(6)输出模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCDIS
PORT(CLK,LEFT,RIGHT,BRAKE,NIGHT:
INSTD_LOGIC;
LD1,LD2,LD3,RD1,RD2,RD3:
OUTSTD_LOGIC);
ENDENTITYCD;
ARCHITECTUREONEOFCDIS
COMPONENTLC
PORT(CLK,LP,LR,BRAKE,NIGHT:
INSTD_LOGIC;
LEDL,LEDB,LEDN:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTRC
PORT(CLK,RP,LR,BRAKE,NIGHT:
INSTD_LOGIC;
LEDR,LEDB,LEDN:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTSZ
PORT(CLK:
INSTD_LOGIC;
CP:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTCTRL
PORT(LEFT,RIGHT,BRAKE,NIGHT:
INSTD_LOGIC;
LP,RP,LR,BRAKE_LED,NIGHT_LED:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTAND2A
PORT(a,b:
INSTD_LOGIC;
c:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALd,e,f,g,h,i,j,k:
STD_LOGIC;
BEGIN
u1:
CTRLPORTMAP(LEFT=>LEFT,RIGHT=>RIGHT,BRAKE=>BRAKE,NIGHT=>NIGHT,LP=>g,RP=>h,LR=>i,BRAKE_LED=>j,NIGHT_LED=>k);
u2:
SZPORTMAP(CLK=>CLK,CP=>d);
u3:
LCPORTMAP(LP=>g,LR=>i,BRAKE=>j,NIGHT=>k,CLK=>CLK,LEDL=>e,LEDB=>LD2,LEDN=>LD3);
u4:
RCPORTMAP(RP=>h,LR=>i,BRAKE=>j,NIGHT=>k,CLK=>CLK,LEDR=>f,LEDB=>RD2,LEDN=>RD3);
u5:
AND2APORTMAP(a=>d,b=>e,c=>LD1);
u6:
AND2APORTMAP(a=>d,b=>f,c=>RD1);
ENDARCHITECTUREONE;
四、运行结果
五、心得体会
本次试验内容较长,在编译的时候遇到很多困难,经常出错,经过反复调试,最后还是得到了结果。
本次试验我们学会了层次化设计混合编程方法,进一步的了解了自顶向下的设计方法。
掌握了在编程时候一些逻辑控制关系。
比如汽车尾灯,在某一时刻,只能有一个逻辑关系。
虽然遇到困难,但是我们还是有信心去解决困难。