EDA实验报告1.docx
- 文档编号:27354735
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:17
- 大小:221.39KB
EDA实验报告1.docx
《EDA实验报告1.docx》由会员分享,可在线阅读,更多相关《EDA实验报告1.docx(17页珍藏版)》请在冰豆网上搜索。
EDA实验报告1
EDA实验报告
实验一:
组合电路的设计
Mux21a实体
Mux21a结构体
实验内容是对2选1多路选择器VHDL设计,它的程序如下:
ENTITYmux21aIS
PORT(a,b:
INBIT;
s:
INBIT;
y:
OUTBIT);
ENDENTITYmux21a;
ARCHITECTUREoneOFmux21aIS
SIGNALd,e:
BIT;
BEGIN
d<=aAND(NOTS);
e<=bANDs;
y<=dORe;
ENDARCHITECTUREone;
Mux21a仿真波形图
以上便是2选1多路选择器的VHDL完整描述,即可以看成一个元件mux21a。
mux21a实体是描述对应的逻辑图或者器件图,图中a和b分别是两个数据输入端的端口名,s为通道选择控制信号输入端的端口名,y为输出端的端口名。
Mux21a结构体可以看成是元件的内部电路图。
最后是对仿真得出的mux21a仿真波形图。
实验二:
时序电路的设计
实验内容D触发器的VHDL语言描述,它的程序如下:
LIBRARYIEEE;
D触发器
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDFF1IS
PORT(CLK:
INSTD_LOGIC;
D:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC);
END;
ARCHITECTUREbhvOFDFF1IS
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'
THENQ<=D;
ENDIF;
ENDPROCESS;
ENDbhv;
D触发器的仿真波形图
最简单并最具代表性的时序电路是D触发器,它是现代可编程ASIC设计中最基本的时序元件和底层元件。
D触发器的描述包含了VHDL对时序电路的最基本和典型的表达方式,同时也包含了VHDL中许多最具特色的语言现象。
D触发器元件如上图所示,其在max+plus2的仿真得出上面的波形
实验三:
设计含异步清零和同步时钟使能的加法计数器
实验内容一个带有异步复位和同步时钟使能的十进制加法计数器,它的程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK,RST,EN:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT10;
ARCHITECTUREbehavOFCNT10IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');--计数器异步复位
ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿
IFEN='1'THEN--检测是否允许计算(同步使能)
IFCQI<9THENCQI:
=CQI+1;--允许计数,检测是否小于9
ELSECQI:
=(OTHERS=>'0');--大于9,计数值清零
ENDIF;
ENDIF;
ENDIF;
IFCQI=9THENCOUT<='1';--计数大于9,输出进位信号
ELSECOUT<='0';
ENDIF;
CQ<=CQI;--将计数值向端口输出
ENDPROCESS;
ENDbehav;
加法计数器的工作时序
程序说明RST是异步清信号,高电平有效;CLK是锁存信号;D[3..0]是4位数据输入端。
当EN为'1'时,多路选择器将加1器的输出值加载于锁存器的数据端;当EN为'0'时将"0000"加载于锁存器.
实验四:
七段数码显示译码器设计
实验目的:
学习7段数码显示译码器设计,学习VHDL的CASE语句应用及多层次设计方法。
实验内容:
7段数码的程序和其波形方真,它的程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDecL7SIS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
END;
ARCHITECTUREoneOFDecL7SIS
BEGIN
PROCESS(A)
BEGIN
CASEA(3DOWNTO0)IS
WHEN"0000"=>LED7S<="0111111";--X"3F"'0
WHEN"0001"=>LED7S<="0000110";--X"06"'1
WHEN"0010"=>LED7S<="1011011";--X"5B"'2
WHEN"0011"=>LED7S<="1001111";--X"4F"'3
WHEN"0100"=>LED7S<="1100110";--X"66"'4
WHEN"0101"=>LED7S<="1101101";--X"6D"'5
WHEN"0110"=>LED7S<="1111101";--X"7D"'6
WHEN"0111"=>LED7S<="0000111";--X"07"'7
WHEN"1000"=>LED7S<="1111111";--X"7F"'8
WHEN"1001"=>LED7S<="1101111";--X"6F"'9
WHEN"1010"=>LED7S<="1110111";--X"77"'10
WHEN"1011"=>LED7S<="1111100";--X"7C"'11
WHEN"1100"=>LED7S<="0111001";--X"39"'12
WHEN"1101"=>LED7S<="1011110";--X"5E"'13
WHEN"1110"=>LED7S<="1111001";--X"79"'14
WHEN"1111"=>LED7S<="1110001";--X"71"'15
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
END;
7段译码器仿真波形
实验五:
数控分频器的设计
实验目的:
学习数控分频器的设计、分析和测试方法
实验原理:
数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。
当输入输入不同的CLK时钟频率和预置值D时得不同FOUT电平
它的程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDVFIS
PORT(CLK:
INSTD_LOGIC;
D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
FOUT:
OUTSTD_LOGIC);
END;
ARCHITECTUREoneOFDVFIS
SIGNALFULL:
STD_LOGIC;
BEGIN
P_REG:
PROCESS(CLK)
VARIABLECNT8:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFCNT8="11111111"THEN
CNT8:
=D;--当CNT8计数计满时,D被同步预置给计数器CNT8
FULL<='1';--同时使溢出标志信号FULL输出为高电平
ELSECNT8:
=CNT8+1;--否则继续作加1计数
FULL<='0';--且输出溢出标志信号FULL为低电平
ENDIF;
ENDIF;
ENDPROCESSP_REG;
P_DIV:
PROCESS(FULL)
VARIABLECNT2:
STD_LOGIC;
BEGIN
IFFULL'EVENTANDFULL='1'
THENCNT2:
=NOTCNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反
IFCNT2='1'THENFOUT<='1';
ELSEFOUT<='0';
ENDIF;
ENDIF;
ENDPROCESSP_DIV;
END;
上例的时序波形如下:
当给出不同输入值D时,FOUT输出不同频率(CLK周期=50ns)
数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,本设计中的数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。
实验六:
正弦信号发生器设计
实验目的:
进一步熟悉Max+plusII及其LPM_ROM与FPGA硬件资源的使用方法。
实验内容:
设计一个正弦波发生器,并进行仿真测试,给出仿真波形。
实验原理图:
时序波形仿真图:
信号发生器结构包含两个部分:
ROM的地址信号发生器,由6位计数器担任;一个正弦数据ROM,由LPM_ROM模块构成。
实验七:
序列检测器设计
实验目的:
用状态机实现序列检测器的设计,了解一般状态机的设计与应用。
实验原理:
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则相同,则输出1,否则输出0。
实验内容:
描述的电路完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
它的程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSCHKIS
PORT(DIN,CLK,CLR:
INSTD_LOGIC;--串行输入数据位/工作时钟/复位信号
AB:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));--检测结果输出
ENDSCHK;
ARCHITECTUREbehavOFSCHKIS
SIGNALQ:
INTEGERRANGE0TO8;
SIGNALD:
STD_LOGIC_VECTOR(7DOWNTO0);--8位待检测预置数
BEGIN
D<="11100101";--8位待检测预置数
PROCESS(CLK,CLR)
BEGIN
IFCLR='1'THENQ<=0;
ELSIFCLK'EVENTANDCLK='1'THEN--时钟到来时,判断并处理当前输入的位
CASEQIS
WHEN0=>IFDIN=D(7)THENQ<=1;ELSEQ<=0;ENDIF;
WHEN1=>IFDIN=D(6)THENQ<=2;ELSEQ<=0;ENDIF;
WHEN2=>IFDIN=D(5)THENQ<=3;ELSEQ<=0;ENDIF;
WHEN3=>IFDIN=D(4)THENQ<=4;ELSEQ<=0;ENDIF;
WHEN4=>IFDIN=D(3)THENQ<=5;ELSEQ<=0;ENDIF;
WHEN5=>IFDIN=D
(2)THENQ<=6;ELSEQ<=0;ENDIF;
WHEN6=>IFDIN=D
(1)THENQ<=7;ELSEQ<=0;ENDIF;
WHEN7=>IFDIN=D(0)THENQ<=8;ELSEQ<=0;ENDIF;
WHENOTHERS=>Q<=0;
ENDCASE;
ENDIF;
ENDPROCESS;
PROCESS(Q)--检测结果判断输出
BEGIN
IFQ=8THENAB<="1010";--序列数检测正确,输出"A"
ELSEAB<="1011";--序列数检测错误,输出"B"
ENDIF;
ENDPROCESS;
ENDbehav;
时序波形仿真图:
实验分析:
当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出A,否则输出B。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
本实验描述的电路完成对序列数"11100101"的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
实验八:
乐曲硬件演奏电路设计
实验目的:
学习设计硬件乐曲演奏电路。
实验内容:
主系统由三个模块组成,由顶层设计文件,其内部有三个功能模块:
tonetaba.vhd、notetabs.vhd和speakera.vhd。
实验程序:
硬件演奏电路顶层设计:
libraryieee;
useieee.std_logic_1164.all;
entitysongeris
port(clk12mhz:
instd_logic;
clk8hz:
instd_logic;
code1:
outstd_logic_vector(3downto0);
high1:
outstd_logic;
spkout:
outstd_logic);
end;
architectureoneofsongeris
componentnotetabs
port(clk:
instd_logic;
toneindex:
outstd_logic_vector(3downto0));
endcomponent;
componenttonetaba
port(index:
instd_logic_vector(3downto0);
code:
outstd_logic_vector(3downto0);
high:
outstd_logic;
tone:
outstd_logic_vector(10downto0));
endcomponent;
componentspeakera
port(clk:
instd_logic;
tone:
instd_logic_vector(10downto0);
spks:
outstd_logic);
endcomponent;
signaltone:
std_logic_vector(10downto0);
signaltoneindex:
std_logic_vector(3downto0);
begin
u1:
notetabsportmap(clk=>clk8hz,toneindex=>toneindex);
u2:
tonetabaportmap(index=>toneindex,tone=>tone,code=>code1,high=>high1);
u3:
speakeraportmap(clk=>clk12mhz,tone=>tone,spks=>spkout);
end;
Speakera程序段:
libraryieee;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityspeakerais
port(clk:
instd_logic;
tone:
instd_logic_vector(10downto0);
spks:
outstd_logic);
end;
architectureoneofspeakerais
signalpreclk,fullspks:
std_logic;
begin
divideclk:
process(clk)
variablecount4:
std_logic_vector(3downto0);
begin
preclk<='0';
ifcount4>11thenpreclk<='1';count4:
="0000";
elsifclk'eventandclk='1'thencount4:
=count4+1;
endif;
endprocess;
genspks:
process(preclk,tone)
variablecount11:
std_logic_vector(10downto0);
begin
ifpreclk'eventandpreclk='1'then
ifcount11=16#7ff#thencount11:
=tone;fullspks<='1';
elsecount11:
=count11+1;fullspks<='0';endif;
endif;
endprocess;
delayspks:
process(fullspks)
variablecount2:
std_logic;
begin
iffullspks'eventandfullspks='1'thencount2:
=notcount2;
ifcount2='1'thenspks<='1';
elsespks<='0';endif;
endif;
endprocess;
end;
tonetaba程序段:
libraryieee;
useieee.std_logic_1164.all;
entitytonetabais
port(index:
instd_logic_vector(3downto0);
code:
outstd_logic_vector(3downto0);
high:
outstd_logic;
tone:
outstd_logic_vector(10downto0));
end;
architectureoneoftonetabais
begin
search:
process(index)
begin
caseindexis
when"0000"=>tone<="11111111111";code<="0000";high<='0';--2047;
when"0001"=>tone<="01100000101";code<="0001";high<='0';--773;
when"0010"=>tone<="01110010000";code<="0010";high<='0';--912;
when"0011"=>tone<="10000001100";code<="0011";high<='0';--1036;
when"0101"=>tone<="10010101101";code<="0101";high<='0';--1197;
when"0110"=>tone<="10100001010";code<="0110";high<='0';--1290;
when"0111"=>tone<="10101011100";code<="0111";high<='0';--1372;
when"1000"=>tone<="10110000010";code<="0001";high<='0';--1410;
when"1001"=>tone<="10111001000";code<="0010";high<='0';--1480;
when"1010"=>tone<="11000000110";code<="0011";high<='0';--1542;
when"1100"=>tone<="11001010110";code<="0101";high<='0';--1622;
when"1101"=>tone<="11010000100";code<="0110";high<='0';--1668;
when"1111"=>tone<="11011000000";code<="0001";high<='0';--1728;
whenothers=>null;
endcase;
endprocess;
end;
notetabs的程序段:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitynotetabsis
port(clk:
instd_logic;
toneindex:
outstd_logic_vector(3downto0));
end;
architectureoneofnotetabsis
componentmusic
port(address:
instd_logic_vector(7downto0);
inclock:
instd_logic;
q:
outstd_logic_vector(3downto0));
endcomponent;
signalcounter:
std_logic
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 实验 报告