中国科学院数字集成系统设计第四次作业解答Word文档格式.docx
- 文档编号:22356437
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:17
- 大小:213.27KB
中国科学院数字集成系统设计第四次作业解答Word文档格式.docx
《中国科学院数字集成系统设计第四次作业解答Word文档格式.docx》由会员分享,可在线阅读,更多相关《中国科学院数字集成系统设计第四次作业解答Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
=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
。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国科学院 数字 集成 系统 设计 第四 作业 解答