EDA实验报告.docx

上传人:b****7 文档编号:9729548 上传时间:2023-02-06 格式:DOCX 页数:19 大小:367KB
下载 相关 举报
EDA实验报告.docx_第1页
第1页 / 共19页
EDA实验报告.docx_第2页
第2页 / 共19页
EDA实验报告.docx_第3页
第3页 / 共19页
EDA实验报告.docx_第4页
第4页 / 共19页
EDA实验报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

EDA实验报告.docx

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

EDA实验报告.docx

EDA实验报告

题目:

EDA课程设计报告

 

 

专业名称:

班级:

姓名:

指导老师:

年月日

实验一组合逻辑设计

一、实验目的

通过一个简单的3—8译码器的设计,掌握逻辑电路的设计方法,熟悉quartusⅡ软件的操作。

二、硬件要求

1、输入:

DIP拨码开关3位

2、输出:

LED灯

3、主芯片:

CYCLONEⅡEP2C8Q208C8

三、原理图以及三八译码器的程序

程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;--程序包的调用

ENTITYtrans38IS

PORT(T:

INSTD_LOGIC_VECTOR(2DOWNTO0);--输入位是三位,对应三个拨码开关

D:

OUTSTD_LOGIC_Vector(7downto0));--八个输出端口,对应八个LED

ENDENTITYtrans38;

ARCHITECTUREFH1OFtrans38IS

BEGIN

PROCESS(T)

BEGIN

CASETIS

WHEN"000"=>D<="01111111";--真值表(共阳极极0代表灯亮)

WHEN"001"=>D<="10111111";

WHEN"010"=>D<="11011111";

WHEN"011"=>D<="11101111";

WHEN"100"=>D<="11110111";

WHEN"101"=>D<="11111011";

WHEN"110"=>D<="11111101";

WHEN"111"=>D<="11111110";

WHENOTHERS=>NULL;--由于有冗余,其他情况用null表示

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREFH1;

仿真波形

毛刺分析:

仔细观察毛刺出现的位置,可以发现毛刺在“001”到“010”,“011”到“100”,

“101”到“110”以及“111”到“000”出现,从内部结构解释是由于布线长短不同,三个信号如果有两个信号同时发生改变,由于布线的长短问题,两个信号到达终点不是同时到达的,也就是说“001”到“010”两个量中间还经历另外一个值,这个值就是毛刺对应的,分析应该是“011”,要消除毛刺,可以改变真值表也就是说让输入值的变化一位一位的反转,但是这样会导致真值表不够直观。

 

实验二扫描显示电路驱动设计

一、实验目的

实现7段数码管扫描显示的工作模块。

二、实验硬件要求

4、输入:

按键1个

5、输出:

八个7位数码管

6、主芯片:

cycloneⅡEP2C8Q208C8

三、原理图及程序

分频器程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYFENPINIS

PORT(CLKIN:

INSTD_LOGIC;--时钟信号输入

CLKOUT:

OUTSTD_LOGIC);--时钟信号输出

ENDFENPIN;

ARCHITECTUREFENPINOFFENPINIS

SIGNALDATA:

INTEGERRANGE0TO20000000;

SIGNALQ:

STD_LOGIC;

BEGIN

PROCESS(CLKIN)

BEGIN

IFRISING_EDGE(CLKIN)THEN

IF(DATA=10000000)THEN–这里如果设置的data为1则分频比为2,总之为2倍的data

DATA<=0;

Q<=NOTQ;

ELSE

DATA<=DATA+1;

ENDIF;

ENDIF;

CLKOUT<=Q;

ENDPROCESS;

ENDARCHITECTURE;

分频器程序程序说明,时钟上升沿触发加法,加到设置的值的时候,输出一个高频信号(或者低频信号)Q,并保持data值归零;再次加到设置的值的时候,信号Q反转,并保持直到data值加到设置的值,这个设置的值乘以二则为分频比。

由于空间问题,仿真时候將data值改成10,这样可以看出20个周期输入对应1周期输出,由此可见分频比为20.

 

加法器程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNTER16IS

PORT(CLR,CLK:

INSTD_LOGIC;

COUNT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SEL:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDENTITYCOUNTER16;

ARCHITECTUREGDOFCOUNTER16IS

BEGIN

PROCESS(CLK,CLR)

VARIABLECTE:

STD_LOGIC_VECTOR(4DOWNTO0);

BEGIN

IFCLR='0'THENCTE:

="00000";

ELSIFCLK='1'ANDCLK'EVENTTHEN

CTE:

=CTE+1;

ENDIF;

IFCTE=16THENCTE:

="00000";

ENDIF;

COUNT<=CTE(3DOWNTO0);

SEL<=CTE(2DOWNTO0);

ENDPROCESS;

ENDGD;

数码管对应的译码程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYDECDISPIS

PORT(DATAIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

M:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYDECDISP;

ARCHITECTUREHDOFDECDISPIS

BEGIN

PROCESS(DATAIN)

BEGIN

CASEDATAINIS

WHEN"0000"=>M<="1000000";

WHEN"0001"=>M<="1111001";

WHEN"0010"=>M<="0100100";

WHEN"0011"=>M<="0110000";

WHEN"0100"=>M<="0011001";

WHEN"0101"=>M<="0010010";

WHEN"0110"=>M<="0000010";

WHEN"0111"=>M<="1111000";

WHEN"1000"=>M<="0000000";

WHEN"1001"=>M<="0010000";

WHEN"1010"=>M<="0001000";

WHEN"1011"=>M<="0000011";

WHEN"1100"=>M<="1000110";

WHEN"1101"=>M<="0100001";

WHEN"1110"=>M<="0000110";

WHEN"1111"=>M<="0001110";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREHD;

(毛刺分析见实验一)

注释:

实验一已经写了三八译码器(用于控制哪个数码管亮,数码管对应的译码则控制数码管亮哪个数字)

 

顶层程序(用于搭建各个模块,起一个框架作用)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYDIGTRONIS

PORT(CLK,RESET:

INSTD_LOGIC;

LED:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

D:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDENTITYDIGTRON;

ARCHITECTUREFDOFDIGTRONIS

COMPONENTFENPINIS

PORT(CLKIN:

INSTD_LOGIC;

CLKOUT:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTCOUNTER16IS

PORT(CLK,CLR:

INSTD_LOGIC;

COUNT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SEL:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDCOMPONENT;

COMPONENTDECDISPIS

PORT(DATAIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

M:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDCOMPONENT;

COMPONENTTRANS38IS

PORT(T:

INSTD_LOGIC_VECTOR(2DOWNTO0);

D:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDCOMPONENT;

SIGNALCLKON:

STD_LOGIC;

SIGNALCNT:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALSL:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

U1:

FENPINPORTMAP(CLKIN=>CLK,CLKOUT=>CLKON);

U2:

COUNTER16PORTMAP(CLK=>CLKON,CLR=>RESET,COUNT=>CNT,SEL=>SL);

U3:

DECDISPPORTMAP(DATAIN=>CNT,M=>LED);

U4:

TRANS38PORTMAP(T=>SL,D=>D);

ENDARCHITECTUREFD;

 

 

实验三4种方法实现全减器

方法一:

VHDL描述(半加器用布尔方程描述的方法)

半加器描述方法

LibraryIEEE;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityh_suberis

port(a,b:

inbit;

c,d:

outbit);

endentityh_suber;

architecturefdofh_suberis

begin

c<=(axorb)andb;

d<=axorb;

endarchitecturefd;

或门描述

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityor2ais

port(x,y:

inbit;

p:

outbit);

endentityor2a;

architecturefdofor2ais

begin

p<=xory;

endarchitecturefd;

顶层程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitysuberis

port(ain,bin,c1:

inbit;

m,n:

outbit);

endentitysuber;

architecturefsofsuberis

componenth_suber

port(a,b:

inbit;

c,d:

outbit);

endcomponent;

componentor2a

port(x,y:

inbit;

p:

outbit);

endcomponent;

signale,f,g:

bit;

begin

u1:

h_suberportmap(a=>ain,b=>bin,c=>g,d=>e);

u2:

h_suberportmap(a=>e,b=>c1,c=>f,d=>m);

u3:

or2aportmap(x=>f,y=>g,p=>n);

endarchitecturefs;

仿真图:

方法二:

VHDL描述(半减器用真值表描述)

与实验一相比只有半加器描述方法有了改变只写下半减器改变的地方

LibraryIEEE;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityh_suberis

port(a,b:

inbit;

c,d:

outbit);

endentityh_suber;

architecturefdofh_suberis

signalabc:

bit_vector(1downto0);

begin

abc<=a&b;

process(abc)

begin

caseabcis

when"00"=>c<='0';d<='0';

when"01"=>c<='1';d<='1';

when"10"=>c<='0';d<='1';

when"11"=>c<='0';d<='0';

endcase;

endprocess;

endarchitecturefd;

方法三全加器用真值表的形式描述

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitysuberis

port(ain,bin,c1:

inbit;

m,n:

outbit);

endentitysuber;

architecturefsofsuberis

signalD:

bit_vector(2downto0);

begin

D<=ain&bin&c1;

process(D)

begin

caseDis

when"000"=>m<='0';n<='0';

when"001"=>m<='1';n<='1';

when"010"=>m<='1';n<='1';

when"011"=>m<='0';n<='1';

when"100"=>m<='1';n<='0';

when"101"=>m<='0';n<='0';

when"110"=>m<='0';n<='0';

when"111"=>m<='1';n<='1';

whenothers=>null;

endcase;

endprocess;

endarchitecturefs;

方法四原理图法(半减器和或门用图形描述,沿用上面的顶层文件)

顶层文件

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitysuberis

port(ain,bin,c1:

inbit;

m,n:

outbit);

endentitysuber;

architecturefsofsuberis

componenth_suber

port(a,b:

inbit;

c,d:

outbit);

endcomponent;

componentor2a

port(x,y:

inbit;

p:

outbit);

endcomponent;

signale,f,g:

bit;

begin

u1:

h_suberportmap(a=>ain,b=>bin,c=>g,d=>e);

u2:

h_suberportmap(a=>e,b=>c1,c=>f,d=>m);

u3:

or2aportmap(x=>f,y=>g,p=>n);

endarchitecturefs;

或门

半减器

波形仿真

 

方法五原理图(用半减器)

波形仿真

方法六原理图(不用半减器)

真值表

卡诺图化简

m=ain⊕bin⊕c1

n=ain(bin+c1)+binc1--可用布尔方程用VHDL描述全减器,这里用原理图的方式

波形仿真图的分析

Q1:

毛刺的问题,在这里不赘述,与实验一的三八译码器的相同,上面已经分析;

Q2:

波形出现延迟的原因,我认为是电流传输要时间的,然后是由于逻辑元件的反应时间,导致了输出有延迟。

 

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

当前位置:首页 > 人文社科 > 视频讲堂

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

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