西电EDA满分大作业Word格式文档下载.docx

上传人:b****1 文档编号:15398128 上传时间:2022-10-30 格式:DOCX 页数:18 大小:167.70KB
下载 相关 举报
西电EDA满分大作业Word格式文档下载.docx_第1页
第1页 / 共18页
西电EDA满分大作业Word格式文档下载.docx_第2页
第2页 / 共18页
西电EDA满分大作业Word格式文档下载.docx_第3页
第3页 / 共18页
西电EDA满分大作业Word格式文档下载.docx_第4页
第4页 / 共18页
西电EDA满分大作业Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

西电EDA满分大作业Word格式文档下载.docx

《西电EDA满分大作业Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《西电EDA满分大作业Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

西电EDA满分大作业Word格式文档下载.docx

clk:

instd_logic;

clk_out:

outstd_logic

);

enddevide;

我们可以从程序中看到,输入时clk(外部主频时钟),输出是clk_out(分频后的时钟)。

(这是实体的器件图)

分频器的结构体:

process;

用进程语言描述

begin

waituntilclk'

eventandclk='

1'

if(count<

3999999)then

count<

=count+1;

clk_out<

='

0'

;

else

=(others=>

'

);

我们可以从程序中看到waituntilclk'

这句是时钟来到意思,当count计数小于3999999时,count自加1,且输出为零,只有当大于3999999时,产生一个高电平脉冲。

接下来是对分频器的波形仿真:

从波形中我们可以看到分频器的工作.

第二部分:

模8计数器

我们需要一个计数器来输出计数电频,作为下一步38译码器的输入信号,首先我们来看这个器件的实体:

port(clk:

dout:

outstd_logic_vector(2downto0)

(这是器件的实体图)

输入端口是clk,是接入分频器的时钟信号,输出就是计数电平了。

计数器的结构体:

architecturearc_mofmis

signalcount:

std_logic_vector(2downto0);

begin

process(clk)

ifrising_edge(clk)then

ifcount<

7then

elsifcount=7then

="

000"

endif;

a<

=count(0);

b<

=count

(1);

c<

=count

(2);

endprocess;

以上是模8计数器的结构体,我们可以看到,但时钟来到时,在count小于7时count加一,当count=7时,count清零。

接下来是对计数器波形的仿真:

dout输出000,001,010,011,100,101,110,111,000,001…这符合我们的要求。

第三部分:

38译码器

因为我们使用是共阴极二极管,38译码器每接受一个来自计数器的点平时,对应的Yn就输出低电平,点亮此二极管。

我们就可以看到二极管依次点亮好似流水一般。

译码器的实体:

port(a,b,c:

y:

outstd_logic_vector(7downto0));

输入是a,b,c从低到高的三个,输出是y对应的译码电平。

(这是译码器的原件图)

译码器的结构体:

architecturearc_yima38ofyima38is

signalcomb:

comb<

=x;

process(comb)

casecombis

when"

=>

y<

="

11111110"

001"

11111101"

010"

11111011"

011"

11110111"

100"

11101111"

101"

11011111"

110"

10111111"

111"

01111111"

whenothers=>

=null;

endcase;

endprocess;

我们可以看到如下的波形:

在y的输出波形中,“0”循环右移,这是我们想要的结果。

第四部分:

总体效果

3、遇到的问题和解决方法

我使用的是原理图连接,在下到片子后我编译失败,经过同学和我的检查,终于发现我的原理图连接有问题,如上图所示,我将y[2..0]连接到译码器的输入端(a,b,c),这是不正确的,因为y[2..0]是(vector)矢量,而(a,b,c)是位,我错误的以为用线连起来就可以使用,但事实是矢量必须配对矢量,位配对位。

第二章习题部分

(Ex-1)画出下例实体描述对应的原理图符号元件:

ENTITYbuf3sIS--实体1:

三态缓冲器

PORT(input:

INSTD_LOGIC;

--输入端

enable:

--使能端

output:

OUTSTD_LOGIC);

--输出端

ENDbuf3x;

答:

ENTITYmux21IS--实体2:

2选1多路选择器

PORT(in0,in1,sel:

INSTD_LOGIC;

OUTSTD_LOGIC);

ENDENTITYmux21;

(Ex-2)图中所示的是4选1多路选择器,试分别用IF_THEN语句和CASE语句的表达方式写出此电路的VHDL程序。

(选择控制的信号s1和s0为STD_LOGIC_VECTOR类型;

当s1='

,s0='

s1='

和s1='

分别执行y<

=a、y<

=b、y<

=c、y<

=d。

首先为用IFTHEN语句实现

程序如下:

libraryIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

entitymux41is

port(a,b,c,d:

s1,s0:

instd_logic_vector(1downto0);

y:

outstd_logic);

endentitymux41;

architectureoneofmux41is

begin

process(a,b,c,d,s1,s0)

ifs1='

ands0='

then

y<

=a;

elseifs1='

=b;

=c;

=d;

endarchitectureone;

用case语句

程序如下:

--这里s1s0没有定义成2位矢量

signall1:

std_logic_vector(1downto0);

--中间信号为两位矢量,为了使用&

l1<

=s1&

s0;

casel1is

00"

=>

01"

10"

11"

(Ex-3)图中所示的是双2选1多路选择器构成的电路MUXK,对于其中MUX21A,当s='

和'

时,分别有y<

a'

和y<

b'

试在一个结构体中用两个进程来表达此电路,每个进程中用CASE语句描述一个2选1多路选择器MUX21A。

libraryieee;

useieee.std_logic_1164.all;

entitymuxkis

port(a1,a2,a3:

--待选择变量

temp:

bufferstd_logic;

--中间信号

--控制端

output:

outstd_logic);

--输出结果

endmuxk;

architecturepr1ofmuxkis

process(a2,a3,s0)--process1

cases0is--使用case语句

when'

temp<

=a2;

=a3;

endcase;

process(a1,temp,s1)--process2

cases1is

output<

=a1;

=temp;

endpr1;

(Ex-4)图中是一个含有上升沿触发的D触发器的时序电路,试写出此电路的VHDL设计文件。

entitydffis

port(cl,clk0:

out1:

endentitydff;

architectureoneofdffis

signalq1,q2:

std_logic

process(clk)

ifrisingedge(clk)then

q2=notq1;

q1=not(clandq2);

out<

=q2;

endone;

(Ex-5)给出1位全减器的VHDL描述。

要求:

(1)首先设计1

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

当前位置:首页 > 考试认证 > 其它考试

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

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