中国科学院数字集成系统设计第四次作业解答Word文档格式.docx

上传人:b****7 文档编号:22356437 上传时间:2023-02-03 格式:DOCX 页数:17 大小:213.27KB
下载 相关 举报
中国科学院数字集成系统设计第四次作业解答Word文档格式.docx_第1页
第1页 / 共17页
中国科学院数字集成系统设计第四次作业解答Word文档格式.docx_第2页
第2页 / 共17页
中国科学院数字集成系统设计第四次作业解答Word文档格式.docx_第3页
第3页 / 共17页
中国科学院数字集成系统设计第四次作业解答Word文档格式.docx_第4页
第4页 / 共17页
中国科学院数字集成系统设计第四次作业解答Word文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

中国科学院数字集成系统设计第四次作业解答Word文档格式.docx

《中国科学院数字集成系统设计第四次作业解答Word文档格式.docx》由会员分享,可在线阅读,更多相关《中国科学院数字集成系统设计第四次作业解答Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

中国科学院数字集成系统设计第四次作业解答Word文档格式.docx

=uorv;

w<

=uandv;

v<

=cord;

u<

=aandb;

endar_delta;

Code2:

=notyafter10ns;

=worxafter10ns;

=uorvafter10ns;

=uandvafter10ns;

=cordafter10ns;

=aandbafter10ns;

Answer:

1、bit类型分析

1.1、code1的bit类型分析

1.1.1、TestBench文件

图1输入信号

根据给定的输入信号的波形情况,可以很容易的写出TestBench文件,下面指出其中需要注意的点,代码如下:

由于code1中的所有信号都是定义的bit类型,而TestBench中默认的是

std_logic的类型,所以需要修改为bit类型的,并且output改为buffer类型。

根据图1的输入情况,输入信号的

初值应该分别为1、0、1、0

信号的变化情况:

1.1.2、POW(ProjectedOutputWaveform)

我们将code1的代码在ISE13.2中建立工程,同时给其添加测试文件TsetBench文件,得到的输出波形如下:

图2code1的bit类型仿真波形

从波形图可以看出,TestBench中每隔一定时间(100ns)把输入信号赋为高电平,而输出信号随即发生相应的变化。

为了精确的观察信号变化之间的延时,需要观察它的OL图。

1.1.3、OL(OutputList)

为了得到更加精确的延时,我们将信号加入到list中加以观察。

下图是code1在bit类型时候的list输出结果和相应的RTL图。

对照RTL图可以分析list表。

图3code1的bit类型list表图4code1的bit类型RTL

分析:

0:

a、b、c、d分别被赋值为1、0、1、0.

0+

a和b经过一个与门赋值给了u=0,c和d经过一个或门赋值

给了v=1,Y经过一个非门赋值给了z=1;

0+2

x的动作发生在u和v的变化之后,所以2

延时之后,x才发生

变化,0->

1.

0+3

y的动作发生在w、x之后,所以在w、x中有一个发生变化,那

么下一个

延时之后,y才动作:

0->

0+4

z的动作发生在y之后,所以在y:

1之后,下一个

延时之后,

z才动作:

1->

0.

此时,在输入没有新的变化情况下,所有的输出信号都已经更新完毕。

此后的时间,信号的更新分析方法同上面的分析。

其中值得注意的一点就是,在每次输入信号变化的时候,这个变化在ModelSim中是有一个

延时的。

如下图所示:

下面就以300ns时的情况为例说明一下。

在300ns时,d的信号变为1,a、b、c的信号保持在0,那么此后,d的变化经过一个

延时,使v变化:

1;

由于v的变化,在一个

延时之后,由于与门的作用,w保持为0,而由于或门的作用,x:

由于x的变化,一个

延时之后,y:

由于y的变化,一个

延时之后,z:

0。

至此,由于d的变化导致的所有输出信号都已更新完毕!

结论:

输出的改变在输入的值改变之后发生,且延时

决定于电路。

本电路的输

出与输入信号之间的

延时关系:

①u比a、b延时一个

.②v比c、d延时一个

.③w比u、v延时一个

.

④x比u、v延时一个

.⑤y比w、x延时一个

.⑥z比y延时一个

1.2、code2的bit类型分析

code2的TestBench和code1的一样。

1.2.1、POW(ProjectedOutputWaveform)

图5code2的bit类型仿真波形

说明:

code2的描述属于StandardTimeUnitDelay(STUD)。

该段代码与code1

的主要区别就是在每条赋值语句之后添加一个固定的延时10ns,这样便

可以更清楚地观察信号之间的延时关系。

譬如u在a或者b改变之后10ns

作出反应,而w则在u改变10ns后作出跳变,也就是a,b变化20ns之后

作出变化,关于这一点可以参考综合后的电路和对code1的分析。

即w

决定于a,b,c,d四个信号,而对于这几个信号的反应延时均为20ns。

1.2.2OL(OutputList)

图6code2的bit类型list表图7code2的bit类型RTL

比较code2和code1的list表可以看出:

除了输入信号变化的时候,需

要经过

延时,而由于输入信号的变化引起的输出信号的每一次变化

都需要10ns的延时。

具体的分析方法同code1的分析一样。

2、std_logic类型分析

2.1、code1的std_logic类型分析

我们将code1中的数据类型加以更换,即将bit类型更换为std_logic型。

建立

工程并对其加以仿真,得到如下的结果:

图8code1的std_logic类型仿真波形

说明:

我们可以看到,这和前面bit类型数据时候的仿真结果一样,没有什么

变化出现。

我们在modelsim中将工程的输出list加以分析,其list输出结果如下图所示:

图9code1的std_logic类型list表图10code1的std_logic类型RTL

对比bit和std_logic两种类型的list表,我们发现,它们的

延时效果是一样的。

2.2、code2的std_logic类型分析

我们将code2中的数据类型加以改变,即将bit类型转换为std_logic类型,观

察在有延时操作的时候不同数据类型仿真的结果的差异,我们得到了以下的波形文件:

图11code2的std_logic类型仿真波形

和bit数据类型最大的不同就是在a,b,c,d的数据值确定之前,u,v

等数据为红色表示,即不确定状态U。

图12code2的std_logic类型list表v图13code2的std_logic类型RTL

在输入的a,b等值确定之前,x,y,z等数值不能确定,根据std_logic的

九值逻辑原则,此时的输出值为U。

但是,每过一个10ns的延时,就会

有一个输出从U状态变化为其他状态。

其他情况下,输出随输入信号的变

化和前面分析的一样。

3、总结

通过code1和code2的比较以及将代码中的bit数据类型转化为std_logic类

型后比较可以得到以下结论:

1、数据类型std_logic是九值逻辑,相对bit数据类型多了U、X等数据类型,

在信号被赋值以前,std_logic和bit数据类型的不同就表现出来了;

2、仿真延时单元

是硬件描述中的基本时间单位,每一个延时以及反应过程都

是以

为单位进行的。

譬如赋值语句后,在没有延时操作的情况下,系统至

少经过一个

才能将值传给信号;

3、在前仿真中,当使用标准时间单元延时(StandardTimeUnitDelay),即“after

10ns”等操作存在时,

将被忽略,因为经过了一个大的延时之后,系统反

应时间已经足够。

2.(Optional)Interestingcasesconcerningdeltacycleandprocess

注:

这是一位同学曾经提的问题,很有趣,供分析解答。

欢迎到课程网站的“答疑”栏目讨论。

题目如下:

首先给出程序,然后是仿真结果和问题。

程序1(变量)

程序2(信号)

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

port(

a,b,c:

x,y:

outbit);

enddelta;

architectureBehavioralofdeltais

begin

process(a,b,c)

variabled:

bit;

d:

=a;

x<

=bord;

=c;

y<

endprocess;

endBehavioral;

signald:

d<

(1)程序1的仿真

问题:

为何在第一次“d:

”赋值时,仿真中d的值未变,而x却变化了(x<

)?

我的解答:

进程中的语句是顺序语句,在进入进程中之后,首先把a赋给了d,使得:

d=1;

之后“x<

=bord”,所以x=1;

然后是“d:

=c”,从而d=0;

所以在执行完一遍进程之后,显示的波形是:

d没有变化,而x变化了。

(2)程序2的仿真

问题:

Process中的语句应该是顺序执行的,程序中语句顺序如下:

那么在300ns以后,c变化为’1’时,为何x还能变为’1’?

不知是否可以这样理解:

因为必须在敏感表中的某一个信号重新发生变化,即进程重新起动以后,上一次的信号赋值语句才会执行,所以直到400ns时,即c重新发生变化时,才会执行上一次的进程的赋值,所以就有了400ns后的仿真。

可是如果这样,为什么c变化为’1’时,d只经过1ns就可以变化了,而x和y却需要到下一个进程?

因为在200ns时,c=0,而在300ns时,c=1;

这样就导致了在300ns时,敏感表发生了变化,那么经过一个

延时之后,d会从0变化为1。

此时虽然a变化为’1’时,d由于delta的延迟而不能改变是可以理解的。

(3)如果把d信号也加入进程的信号敏感表中,那么得到下面的仿真结果

为什么会出现3个delta延迟,而前面出现的却是1个或2个?

难道是因为进程可以不断的重复调用?

就是说当一个进程还没有执行完的时候,由于敏感表中的信号发生变化,而使得进程又工作?

这个在实际的器件上能实现么?

因为把d加入到了信号敏感表中,那么d的变化势必导致进程的更新。

在300ns+2

的时候,d从0变化到了1,那么在1

之后,x、y势必发生变化:

1.进程执行一次所需的时间是1

,所以从list表中可以看出,只要敏感表发生变化,那么进程就执行一次,所用的时间就是1

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

当前位置:首页 > 经管营销 > 经济市场

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

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