VHDL语言与数字系统设计西电.docx

上传人:b****1 文档编号:1784136 上传时间:2022-10-24 格式:DOCX 页数:29 大小:857.18KB
下载 相关 举报
VHDL语言与数字系统设计西电.docx_第1页
第1页 / 共29页
VHDL语言与数字系统设计西电.docx_第2页
第2页 / 共29页
VHDL语言与数字系统设计西电.docx_第3页
第3页 / 共29页
VHDL语言与数字系统设计西电.docx_第4页
第4页 / 共29页
VHDL语言与数字系统设计西电.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

VHDL语言与数字系统设计西电.docx

《VHDL语言与数字系统设计西电.docx》由会员分享,可在线阅读,更多相关《VHDL语言与数字系统设计西电.docx(29页珍藏版)》请在冰豆网上搜索。

VHDL语言与数字系统设计西电.docx

VHDL语言与数字系统设计西电

(此文档为word格式,下载后您可任意编辑修改!

 

 

科目:

VHDL语言与数字系统EDA设计

专业:

微电子与固体电子学

学生姓名:

陈庆宇

提交日期:

2011年5月26号

实验一······································1

实验二······································5

实验三······································9

实验四······································11

实验五······································17

作业········································27

Ø实验一

1.实验内容

1.用IF语句设计一个四-十六译码器;

2.用CASE语句设计一个四-十六译码器;

3.用GENERATE语句构造一个串行的十六进制计数器。

2.实验目的

会用VHDL语言实现一些简单的组合逻辑和时序逻辑,学会使用相关EDA软件进行VHDL代码的输入、仿真。

3.实验方案

本实验有三个小实验组成,先分别将方案分别列出:

a:

用IF语句设计一个四-十六译码器

接口信号的定义如图--1:

g1,g2a,g2b为片选信号,sel为输入

编码,y为译码输出

图-1

b:

用CASE语句设计一个四-十六译码器

接口定义同样的如图-1:

g1,g2a,g2b为片选信号,sel为输入编码,y为译码输出

c:

用GENERATE语句构造一个串行的十六进制计数器

先用行为描述设计一个D触发器,然后用结构描述的方法将四个D触发器用特定的接法连接起来。

其中clk、clr为时钟和清零输入,q为计数输出。

图-2即综合器生成的RTL框图。

图-2十六进制计数器的RTL框图

4.仿真结果(仿真软件:

QuartusII7.2)

a:

用IF语句实现的四-十六译码器的仿真结果

上图为:

片选信号无效的时候的仿真波形,输出为高电平。

上图为:

片选信号有效的时候的仿真波形。

b:

用CASE语句实现的一个四-十六译码器的仿真结果(直接让片选有效)

c:

用GENERATE语句构造的串行的十六进制计数器的仿真波形

注:

当clr为0时对计数结果清零,时钟上升沿计数器加1.

5.关键部分代码

a:

用IF语句设计一个四-十六译码器

PROCESS(G1,g2a,g2b,sel)

begin

if(g1='1'andg2a='0'andg2b='0')then

elsey<="XXXXXXXXXXXXXXXX";

endif;

endif;

endprocess;

b:

用CASE语句设计一个四-十六译码器

caseselis

whenothers=>y<="XXXXXXXXXXXXXXXX";

endcase;

c:

用GENERATE语句构造一个串行的十六进制计数器

architecturecount16erofcount16is

componentdfipis

port(

d:

instd_logic;

clr:

instd_logic;

ck:

instd_logic;

q:

outstd_logic;

qb:

outstd_logic

);

endcomponent;

signalclk_in:

std_logic_vector(4downto0);

begin

clk_in(0)<=clk;

G1:

foriin0to3generate

U0:

dfipportmap(d=>clk_in(i+1),ck=>clk_in(i),clr=>clr,q=>q(i),qb=>clk_in(i+1));

endgenerate;

endcount16er;

Ø

实验二

6.实验内容

1.设计一个两位二进制的加法器

2.设计一个两位的BCD计数器

7.实验目的

会用VHDL语言的多种描述方式实现典型的组合逻辑和时序逻辑,学会使用相关EDA软件进行VHDL代码的输入、仿真。

明确典型的组合逻辑和时序逻辑的基本构成。

练习层次化设计。

8.实验方案

本实验有两个小实验组成,先分别将方案分别列出:

a:

设计一个二位二进制加法器

接口信号的定义如右图:

a、b为两位的二进制输入,ci为进入输入,

s为全家和,co为进入输出。

设计方案:

先用行为描述设计一位全加器,然后再把一位全加器用结构描述的方法,通过引用已设计好的元件组成。

其RTL框图如下:

其中full_add为一位全加器。

b:

用设计一个两位的BCD计数器

接口信号的定义如右图:

g1为使能信号,当其有效时才可以计数;

clk为时钟输入,clr为清零,异步清零。

cout为进位输出。

设计方案

先设计一位BCD计数器,采用两个BCD计数器串联的方式完成最终设计,为了严格同步,使用前一个计数器的进位输出做为后一个的使能信号。

其RTL框图如下:

9.仿真结果(仿真软件:

QuartusII7.2)

a:

二位二进制加法器的仿真结果

b:

两位的BCD计数器的仿真结果

上图中,cout为进位输出,当计数到99时产生进位。

q0为个位BCD计数,q1为十位BCD计数。

下图即计数到99时cout产生进位的情况,仿真完全正确。

10.关键部分代码

a:

设计一个二位二进制加法器的核心代码

一位全加器部分

architecturedata_flowoffull_addis

signals:

std_logic;

begin

s<=xxory;

sum<=sxorcin;

cout<=(xandy)or(sandcin);

enddata_flow;

二位二进制加法器

U0:

full_addportmap(a(0),b(0),ci,s(0),m);

U1:

full_addportmap(a

(1),b

(1),m,s

(1),co);

b:

设计一个两位的BCD计数器的核心代码

一位BCD计数器

architecturertlofBCD_counteris

signalin_q0:

integer:

=0;

begin

process(clk,clr,g1)

begin

if(g1='1')then

if(clr='0')then

in_q0<=0;

elsif(clk'eventandclk='1')then

if(in_q0=9)then

in_q0<=0;

co<='1';

else

in_q0<=in_q0+1;

co<='0';

endif;

endif;

endif;

endprocess;

q0<=conv_std_logic_vector(in_q0,4);

endrtl;

两位BCD计数器

UO:

BCD_counterportmap(clk,clr,g1,m,q0);

U1:

BCD_counterportmap(clk,clr,m,cout,q1);

Ø

实验三

11.实验内容

利用数组形式描述256x8bits的RAM,并利用测试床完成对其读写操作。

12.实验目的

明确RAM的工作原理及过程,学会简单随机存储器的读写操作,并利用测试台对其进行测试。

13.实验方案

接口信号的定义如右图:

对于256x8bits的RAM,它有八条地址

线adr(0)~adr(7),八条数据输入线din(0)~din(7)、八

条数据输出线dout(0)~dout(7),wr为写控制线,rd

为读控制线。

当片选信号cs=1,wr信号上升沿时,

din上的数据写入由adr所指定的单元;当cs=1、

rd=0时,由adr所指定的单元的内容将从dout上

输出。

设计方案

分别由相应的进程控制RAM的读写过程,并且对建立及保持时间进行检测,让不符合要求时输出waring。

14.仿真结果(仿真软件:

QuartusII7.2)

如上图:

初始化RAM所有单元为0。

当片选信号无效时,输出高祖。

当当片选信号cs=1,wr信号上升沿时,din上的数据写入由adr所指定的单元;当cs=1、rd=0时,由adr所指定的单元的内容将从dout上输出。

仿真结果符合预期。

15.关键部分代码

adr_in<=conv_integer(adr);

process(wr)

begin

if(wr'eventandwr='1')then

wr_rise<=now;

if(cs='1')then

sram(adr_in)<=dinafter2ns;

endif;

endif;

assert(wr_rise-din_change>=800ps)report"writesramsetuptimeviolation"severityWARNING;

endprocess;

process(rd,cs,adr_in,wr)

begin

if(rd='0'andcs='1')then

dout<=sram(adr_in)after3ns;

else

dout<=(others=>'Z')after4ns;

endif;

endprocess;

process(din)

begin

din_change<=now;

assert(din_change-wr_rise>300ps)report"readsramholdtimeviolation"severityWARNING;

endprocess;

Ø

实验四

16.实验内容

采用VHDL语言设计实现UART串行通信的发送、接收模块。

17.实验目的

了解UART的基本原理,掌握串行异步通信实现同步的方法。

同时,学会用VHDL语言设计复杂电路的技巧及对复杂电路的仿真分析。

同时培养相关方面的能力。

18.实验方案

通用异步收发器UART是最常见的一种串行接口电路,广泛应用于微机与外设的通信。

其主要由发送器、接收器、波特率发生器、同步先进先出缓存、Modem控制模块、接口模块等组成。

本设计主要设计UART中最重要的发送部分和接收部分,其他部分设计不在赘述。

收发双方实现同步的方法是在字符格式中设置起始位和停止位。

其数据帧的各位为下图:

其中奇偶效验位可有可无。

在本次设计中,没有使用效验。

波特率因子为16.

下面就发送部分和接收部分的设计做一个叙述:

发送模块:

发送模块的主要功能是从CPU接收要发送的并行数据,将之转换成串行数据,按照约定的数据格式和波特率,在发送时钟clk16x的作用下,从端口tx端输出。

由此可以得出发送模块的主要功能为发送缓冲器(thr)、发送移位寄存器(tsr)、帧产生、并转串。

其工作过程为微处理器给出wr信号,发送器根据此信号将并行数据data[7..0]锁存进发送缓冲器thr[7..0],并通过发送

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

当前位置:首页 > 自然科学 > 天文地理

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

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