我是靠谱客的博主 典雅刺猬,最近开发中收集的这篇文章主要介绍数字电路实验(十八)——CPU综合设计(14),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

四、系统测试

4.1 测试环境

采用基于FPGA进行数字逻辑电路设计的方法。
采用的软件工具是QuartusII软件仿真平台。

4.2 测试代码

数据初始值为:
A寄存器:11111100
B寄存器:00000111
C寄存器:01100011
D寄存器:00,指向a寄存器

测试程序为:
00000000 0 无操作
11110110 246 将c寄存器中的值移动到b寄存器//MOV
11111101 253 将b寄存器中的值移动到d(地址寄存器)//MOV
11110011 243 将d(地址寄存器)指向的寄存器的值移动到a寄存器//MOV
10010010 146 将a寄存器与c寄存器中的值相加赋给a寄存器//ADD
01100110 102 将b寄存器与c寄存器中的值相减赋给b寄存器//SUB
10110111 183 将b寄存器与d(地址寄存器)指向的寄存器取或赋给a寄存器//OR
01010011 83 将a寄存器中的值取反赋给a寄存器//NOT
10101000 168 将c寄存器中的值循环右移一位赋给c寄存器//RSR
00100011 35 将led_in的值输入给a寄存器//IN
01001111 79 将d(地址寄存器)指向的寄存器的值输出给led_out//OUT
00010001 17 z=0时将ram中的下一地址16给pc//JZ
00010010 18 c=1时将ram中的下一地址18给pc//JC
00010000 16 将ram中的下一地址14给pc//JMP
01110000 112 将PC+1,跳过下一条指令//NOP
10101000 168 将c寄存器中的值循环右移一位赋给c寄存器//RSR
10101011 171 将c寄存器中的值循环左移一位赋给c寄存器//RSL
10000000 128 停机//HALT
结束
在这里插入图片描述

4.3测试结果

在这里插入图片描述
在这里插入图片描述
0到5ns,无操作
5~25ns,第一条指令00000000,模拟开机,c和z信号初始化为0
25~45ns,第二条指令11110110,将c寄存器中的值01100011移动到b寄存器,即b寄存器的值在40ns变化为了01100011
45~65ns,第三条指令11111101,将b寄存器中的值01100011移动到d(地址寄存器),即d寄存器的值在60ns变化为了00000001,改为指向b寄存器
65~85ns,第四条指令11110011,将d(地址寄存器)指向的寄存器的值移动到a寄存器,即a寄存器的值在80ns变化为了01100011
85~105ns,第五条指令10010010,将a寄存器与c寄存器中的值01100011和01100011相加,结果11000110赋给a寄存器,由于没有产生进位,进位=0,a寄存器的值在100ns变化为了11000110,c的值在95ns变化为了0,z的值在95ns变化为了0
105~125ns,第六条指令01100110,将b寄存器与c寄存器中的值01100011和01100011相减,结果00000000赋给b寄存器,由于没有产生借位,借位=0,b寄存器的值在120ns变化为了00000000,c的值在115ns变化为了0,z的值在115ns变化为了0
125~145ns,第七条指令10110111,将b寄存器与d(地址寄存器)指向的寄存器(b寄存器)做取或操作,00000000与00000000取或结果为00000000赋给b寄存器,取或的结果的值为0,即b寄存器的值在140ns变化为了00000000,z的值在135ns变化为了1
145~165ns,第八条指令01010011,将a寄存器中的值取反赋给a寄存器,取反结果为00111001,取反的结果的值为1,即a寄存器的值在160ns变化为了00111001,z的值在155ns变化为了0
165~185ns,第九条指令10101000,将c寄存器中的值循环右移一位赋给c寄存器,结果为10110001,移位的结果为1,即c寄存器的值在180ns变化为了10110001,c的值在175ns变为了1
185~205ns,第十条指令00100011,将led_in的值输入给a寄存器,结果为10101100,即a寄存器的值在200ns变化为了10101100
205~225ns,第十一条指令01001111,将d寄存器(地址寄存器)指向的寄存器的值输出给led_out,结果为00000000,即led_out的值在220ns变化为了00000000
225~245ns,第十二条指令00010001,判断z的值,在z=0时将跳转到下一地址,由于z的值为0,执行本条指令,即跳转到第十六个位置的指令,即第十四条指令,指令为00010000。
245~265ns,第十四条指令00010000,跳转到下一地址,即跳转到第十四个位置的指令,即第十三条指令,指令为00010010。
265~285ns,第十三条指令00010010,判断c的值,在c=1时将跳转到下一地址,由于c的值为1,执行本条指令,即跳转到第十八个位置的指令,即第十五条指令,指令为01110000。
285~305ns,第十五条指令01110000,将PC的值+1,即下一步将跳过第十六条指令,执行第十七条指令10101011。
305~325ns,第十七条指令10101011,将c寄存器中的值循环左移一位赋给c寄存器,结果为01100011,移位的结果为0,即c寄存器的值在300ns变化为了01100011,c的值在295ns变化为了1
325~345ns,第十八条指令10000000,停机指令,pc的值不在变化,不管后续的clock时钟信号和sm使能信号如何变化,将不再执行后序的指令,永远停留在10000000指令,同时所有的数据的值进行保留,所有的输出信号,即:c信号、z信号、jcqa信号、jcqb信号、jcqc信号、jcqd信号、led_out信号的值将不再变化。

最终结果:
在第340ns时,
ir指令寄存器的值为10000000
a寄存器的值为10101100
b寄存器的值为00000000
c寄存器的值为01100011
d寄存器的值为00000001
c的值为1
z的值为0
下篇点此

最后

以上就是典雅刺猬为你收集整理的数字电路实验(十八)——CPU综合设计(14)的全部内容,希望文章能够帮你解决数字电路实验(十八)——CPU综合设计(14)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部