VHDL实验报告范本模板.docx

上传人:b****8 文档编号:11319805 上传时间:2023-02-26 格式:DOCX 页数:15 大小:93.56KB
下载 相关 举报
VHDL实验报告范本模板.docx_第1页
第1页 / 共15页
VHDL实验报告范本模板.docx_第2页
第2页 / 共15页
VHDL实验报告范本模板.docx_第3页
第3页 / 共15页
VHDL实验报告范本模板.docx_第4页
第4页 / 共15页
VHDL实验报告范本模板.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

VHDL实验报告范本模板.docx

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

VHDL实验报告范本模板.docx

VHDL实验报告范本模板

 

专用集成电路实验报告

 

13050Z01

1305024237

刘德文

实验一 开发平台软件安装与认知实验

实验内容

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;

——Uncommentthefollowinglinestousethedeclarationsthatare

-—providedforinstantiatingXilinxprimitivecomponents。

--libraryUNISIM;

—-useUNISIM。

VComponents。

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)

VARIABLEcnt:

std_logic_vector(7downto0);

BEGIN

IF(clk'EVENTANDclk=’1')THEN

IF(clear='0')THEN

cnt:

=”00000000”;

-—ELSE

——IF(ld=’0')THEN

——cnt:

=d;

ELSE

IF(enable='1’)THEN

cnt:

=cnt+"00000001”;

if(cnt="00111100")then

cnt:

="00000000”;

endif;

ENDIF;

—-ENDIF;

ENDIF;

ENDIF;

qk〈=cnt;

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)

VARIABLEcnt:

std_logic_vector(7downto0);

BEGIN

IF(clk’EVENTANDclk='1')THEN

IF(clear='0')THEN

cnt:

="00000000";

ELSE

IF(ld=’0’)THEN

cnt:

=d;

ELSE

IF(enable='1’)THEN

cnt:

=cnt+”00000001”;

if(cnt="00111011”)then

Ld:

=1;

endif;

ENDIF;

ENDIF;

ENDIF;

ENDIF;

qk<=cnt;

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;

--Uncommentthefollowinglinestousethedeclarationsthatare

--providedforinstantiatingXilinxprimitivecomponents.

——libraryUNISIM;

-—useUNISIM.VComponents.all;

entityDchuis

Port(CLK:

inSTD_LOGIC;

D:

inSTD_LOGIC;

Q:

outSTD_LOGIC;

CLEAR:

inSTD_LOGIC;

Q_N:

outSTD_LOGIC);

endDchu;

ARCHITECTUREBEHOFDchuIS

SIGNALQ1:

STD_LOGIC;

BEGIN

PROCESS(CLEAR,CLK,Q1)

BEGIN

IFCLEAR='0'

THENQ1<=’0';

ELSIFCLK’EVENTANDCLK='1’

THENQ1<=D;

ENDIF;

ENDPROCESS;

Q<=Q1;

Q_N〈=notQ1;

ENDBEH;

波形图:

D触发器:

八位移位寄存器:

八位移位寄存器原理图:

元件例化:

libraryIEEE;

useIEEE。

STD_LOGIC_1164。

ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE。

STD_LOGIC_UNSIGNED.ALL;

——Uncommentthefollowinglinestousethedeclarationsthatare

——providedforinstantiatingXilinxprimitivecomponents.

——libraryUNISIM;

-—useUNISIM。

VComponents。

all;

entityshift_reg_8_comis

Port(a,clk,rst:

inSTD_LOGIC;

b:

outSTD_LOGIC);

endshift_reg_8_com;

ARCHITECTUREBEHOFshift_reg_8_comIS

Componentdff1

Port(d,clk,rst:

inSTD_LOGIC;

q:

outSTD_LOGIC);

Endcomponent;

Signalq:

STD_LOGIC_VECTOR(8DOWNTO0);

BEGIN

q(0)<=a;

d0:

dff1PORTMAP(q(0),clk,rst,q

(1));

d1:

dff1PORTMAP(q

(1),clk,rst,q

(2));

d2:

dff1PORTMAP(q

(2),clk,rst,q(3));

d3:

dff1PORTMAP(q(3),clk,rst,q(4));

d4:

dff1PORTMAP(q(4),clk,rst,q(5));

d5:

dff1PORTMAP(q(5),clk,rst,q(6));

d6:

dff1PORTMAP(q(6),clk,rst,q(7));

d7:

dff1PORTMAP(q(7),clk,rst,q(8));

b〈=q(4);

Endstr;

生成语句:

libraryIEEE;

useIEEE.STD_LOGIC_1164。

ALL;

useIEEE。

STD_LOGIC_ARITH.ALL;

useIEEE。

STD_LOGIC_UNSIGNED。

ALL;

--Uncommentthefollowinglinestousethedeclarationsthatare

--providedforinstantiatingXilinxprimitivecomponents。

—-libraryUNISIM;

—-useUNISIM.VComponents。

all;

entityshift_reg_8_comis

Port(a,clk,rst:

inSTD_LOGIC;

b:

outSTD_LOGIC);

endshift_reg_8_com;

ARCHITECTUREBEHOFshift_reg_8_comIS

Componentdff1

Port(d,clk,rst:

inSTD_LOGIC;

q:

outSTD_LOGIC);

Endcomponent;

Signalq:

STD_LOGIC_VECTOR(8DOWNTO0);

BEGIN

q(0)〈=a;

g1:

FORIIN0TO7GENERATE

dx:

dff1PORTMAP(q(i),clk,rst,q(i+1));

Endgenerateg1;

b<=q(4);

Endstr;

实验结果(仿真结果)与分析

元件例化语句由两部分组成,元件说明语句和元件例化语句.首先要设计被上层电路调用的电路块,即D触发器模块,八位移位寄存器就是通过程序调用八个D触发器,每个D触发器都相当于一个模块。

生成语句是将已设计好的D触发器的逻辑语句进行复制,从而生成一组结构上完全相同的设计单元的电路结构。

从上面的两个程序可以看出,当所需要的组件比较少时,两种语句的大小差不多,但当所需要的组件比较多时,生成语句的执行效率明显的要变高,而且程序所占内存明显减少。

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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