EDA实验报告.docx
《EDA实验报告.docx》由会员分享,可在线阅读,更多相关《EDA实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
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:
波形出现延迟的原因,我认为是电流传输要时间的,然后是由于逻辑元件的反应时间,导致了输出有延迟。