vhdl实验报告.docx
《vhdl实验报告.docx》由会员分享,可在线阅读,更多相关《vhdl实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
vhdl实验报告
专用集成电路实验报告
13050Z01
1305024237
X德文
实验一 开发平台软件安装与认知实验
实验内容
1、本实验以三线八线译码器〔LS74138〕为例,在XilinxISE9.2软件平台上完成设计电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。
下载芯片选择Xilinx公司的CoolRunnerII系列XC2C256-7PQ208作为目标仿真芯片。
2、用1中所设计的的三线八线译码器〔LS74138〕生成一个LS74138元件,在XilinxISE9.2软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译码器〔LS74138〕,实现编译,仿真,管脚分配和编程下载等操作。
源程序:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Unmentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitiveponents.
--libraryUNISIM;
--useUNISIM.Vponents.all;
entityls74138is
Port(g1:
instd_logic;
g2:
instd_logic;
inp:
instd_logic_vector(2downto0);
y:
outstd_logic_vector(7downto0));
endls74138;
architectureBehavioralofls74138is
begin
process(g1,g2,inp)
begin
if((g1andg2)='1')then
caseinpis
when"000"=>y<="00000001";
when"001"=>y<="00000010";
when"010"=>y<="00000100";
when"011"=>y<="00001000";
when"100"=>y<="00010000";
when"101"=>y<="00100000";
when"110"=>y<="01000000";
when"111"=>y<="10000000";
whenothers=>y<="00000000";
endcase;
else
y<="00000000";
endif;
endprocess;
endBehavioral;
波形文件:
生成元器件及连接电路
思考:
有程序可以看出,定义了三个输入端,一个输出端。
g1,g2为使能输入端,当全为一时,开场执行宽度为三的输入inp,并听过程序实现三八译码器的功能。
通过实验,分别用了原理图和vhdl语言两种方式进展调试。
两种方法各有优缺点。
对于原理图而言,可以清晰直观的看出电路各局部的构造,但却只能在原有的根底上进展而无法随意修改元器件功能;vhdl语言那么可以按照实际的需求进展编写程序,从而可以实现开发者想要实现的功能。
实验二组合逻辑电路的VHDL语言实现
实验内容:
1.用VHDL语言实现优先编码器的设计并实现功能仿真
2.用VHDL语言实现四选一选择器的设计并实现功能仿真。
1.优先编码器源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYpriorityencoderIS
PORT(input:
INSTD_LOGIC_VECTOR(7DOWNTO0);
y:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDpriorityencoder;
ARCHITECTURErtlOFpriorityencoderIS
BEGIN
PROCESS(input)
BEGIN
IF(input(0)='0')THEN
y<="111";
ELSIF(input
(1)='0')THEN
y<="110";
ELSIF(input
(2)='0')THEN
y<="101";
ELSIF(input(3)='0')THEN
y<="100";
ELSIF(input(4)='0')THEN
y<="011";
ELSIF(input(5)='0')THEN
y<="010";
ELSIF(input(6)='0')THEN
y<="001";
ELSE
y<="000";
ENDIF;
ENDPROCESS;
ENDrtl;
波形图
原理图:
2.四选一选择器源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux4IS
PORT(input:
INSTD_LOGIC_VECTOR(3DOWNTO0);
a,b:
INSTD_LOGIC;
y:
OUTSTD_LOGIC);
ENDmux4;
ARCHITECTURErt1OFmux4IS
SIGNALse1:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
se1<=b&a;
PROCESS(input,se1)
BEGIN
IF(se1="00")THEN
y<=input(0);
ELSIF(se1="01")THEN
y<=input
(1);
ELSIF(se1="10")THEN
y<=input
(2);
ELSE
y<=input(3);
ENDIF;
ENDPROCESS;
ENDrt1;
波形图
原理图
思考:
1.优先编码器:
通过程序定义了一个八位的输入端和一个三位的输入端。
首先是通过八位的
输入端的最低位开场判断,如果是0,那么输出为:
111;如果是1,那么判断第
二位,以此类推,直到最后一位,如果都不满足,那么输出:
000。
2.四选一选择器:
一共有三个输入,其中一个是宽度为四的可供选择的输入端,将一个四位宽度的二进制码赋值给input端,通过a与b的输入选择input的输出。
如ab为00时,那么输出为:
input(0),以此类推。
实验三时序逻辑电路的VHDL语言实验
实验内容:
〔3选1〕
(一)、设计一个60进制的计数器
(二)设计一带使能的同步复位清零的递增8位二进制计数器
(三)设计一带使能的异步清零复位的递增8位二进制计数器
六十进制〔异步清零〕源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityycounteris
port(clk,clear,enable:
instd_logic;
--ld:
instd_logic;
--d:
instd_logic_vector(7downto0);
qk:
outstd_logic_vector(7downto0));
endycounter;
architecturea_ycounterofycounteris
begin
PROCESS(clk)
VARIABLEt:
std_logic_vector(7downto0);
BEGIN
IF(clk'EVENTANDclk='1')THEN
IF(clear='0')THEN
t:
="00000000";
--ELSE
--IF(ld='0')THEN
--t:
=d;
ELSE
IF(enable='1')THEN
t:
=t+"00000001";
if(t="00111100")then
t:
="00000000";
endif;
ENDIF;
--ENDIF;
ENDIF;
ENDIF;
qk<=t;
ENDPROCESS;
enda_ycounter;
波形图:
六十进制〔同步置数〕源程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityycounteris
port(clk,clear,enable:
instd_logic;
ld:
instd_logic;
d:
instd_logic_vector(7downto0);
qk:
outstd_logic_vector(7downto0));
endycounter;
architecturea_ycounterofycounteris
begin
PROCESS(clk)
VARIABLEt:
std_logic_vector(7downto0);
BEGIN
IF(clk'EVENTANDclk='1')THEN
IF(clear='0')THEN
t:
="00000000";
ELSE
IF(ld='0')THEN
t:
=d;
ELSE
IF(enable='1')THEN
t:
=t+"00000001";
if(t="00111011")then
Ld:
=1;
endif;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
qk<=t;
ENDPROCESS;
enda_ycounter;
波形图:
思考:
六十进制计数器的实现,1〕异步清零程序的实现:
通过判断最后一个状态,因为该计数器位六十进制,所以最后一个状态为59,用二进制码表示为:
"00111011",即当计数器的状态为六十,即"00111100"状态时,计数器清零,输出00000000。
2〕同步置数程序的实现:
当计数器到达状态,当计数器到达状态"00111011"时,ld被赋值为0,执行置数功能,将d的值赋值给y,计数器从零开场计数。
实验四VHDL层次化设计方法实验
实验内容:
设计一个8位移位存放器。
各个D触发器模块采用VHDL语言编写,分别用原理图、VHDL语言元件例化语句和生成语句的方法实现8位移位存放器的设计。
D触发器源程序:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Unmentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitiveponents.
--libraryUNISIM;
--useUNISIM.Vponents.all;
entityDchuis
Port(CLK:
inST