计算机组成原理课程设计报告7520989371_第1页
计算机组成原理课程设计报告7520989371_第2页
计算机组成原理课程设计报告7520989371_第3页
计算机组成原理课程设计报告7520989371_第4页
计算机组成原理课程设计报告7520989371_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机组成原理课程设计报告专业名称: 网络工程班级学号: 3080610032学生姓名: 黄秋月指导教师:丁伟设计时间: 2010年7月8日2010年7月15 日第一天 取操作数微程序的设计和调试一、设计目标 设计并调试取操作数的微程序二、取操作数微流程200800cc025025三、测试程序、数据及运行结果格式如下:1、测试内容:立即数寻址、直接寻址测试指令(或程序):mov #5678h,0010h指令功能:将立即数5678h送到内存地址为0010单元,机器码如下 机器码: 内存地址(h)机器码(h)汇编指令0000077a 5678 0010mov #5678h , 0010h 在调试软

2、件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图1.2,分析过程如下:对照图1.2,首先看微指令的执行次序:00100200300400b00f01600601b01f024025026007004047072000,参照取指令,取操作数和mov执行微流程分析,所执行的微指令顺序是正确的 其次分析执行的过程,在003的微指令执行后,下一步ir=077a,说明取指令是正确的;在016的微指令执行后,下一步tr=5678,说明取原操作数是正确的;在在026的微指令执行后,下一步a=ffff(此时0010单元的内容为ffff,见图1.2),说明取目的操作数是

3、正确的。最后分析指令执行的结果,指令执行前0010单元的内容为ffff(见图1.1)指令执行后内容变为5678(在指令的最后一条微指令,微地址为072的下一步,见图1.5),说明结果是正确的。 图1.1指令执行前的ram的内容 图1.2运行结果及分析: 图1.3指令执行后ram的内容2、测试内容:相对寻址、间接寻址测试指令(或程序):mov +0004h,(0010h)指令功能:将有效地址(pc+0004h)的内容送到0010h地址的地址中去 机器码: 内存地址(h)机器码(h)汇编指令00000719 0004 0010mov +0004, (0010h) 在调试软件unidebugger中

4、,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图2.2,分析过程如下:对照图2.2,首先看微指令的执行次序:00100200300400b00f01001101701501600601b01f022023024025026007044047072000,参照取指令,取操作数和mov执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,在003的微指令执行后,下一步ir=0719,说明取指令是正确的;在016的微指令执行后,下一步tr=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步a=0004(此时0010单元的内容为ffff,见图2.2),说明取目的

5、操作数是正确的。最后分析指令执行的结果,指令执行前0010单元的内容为ffff,以ffff为地址ffff内容原为0004,最终指令执行后内容变为0000(在指令的最后一条微指令,微地址为072的下一步,见图2.2),说明结果是正确的。图2.1图2.23、测试内容:寄存器寻址、寄存器间接寻址测试指令(或程序):mov r1,(r2)机器码: 内存地址(h)机器码(h)汇编指令0000042a mov r1,(r2)在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图3.2,分析过程如下:对照图3.2,首先看微指令的执行次序:0010020030040

6、08006019025026007044047072000,参照取指令,取操作数和mov执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,在003的微指令执行后,下一步ir=042a,说明取指令是正确的;在008的微指令执行后,下一步tr=0000,说明取原操作数是正确的;在在026的微指令执行后,a=0000说明取目的操作数是正确的。最后分析指令执行的结果,指令执行前r1单元的内容为0000(见图3.2),指令执行后以r2内容0000为地址,即将0000转移到0000地址(在指令的最后一条微指令,微地址为072的下一步,见图3.2)说明结果是正确的4、测试内容:寄存器寻址、寄存器

7、变址寻址测试指令(或程序):mov r1,2(r2)机器码: 内存地址(h)机器码(h)汇编指令00000432 0002 mov r1,2(r2)在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图2.2,分析过程如下:对照图,首先看微指令的执行次序:00100200300400800601a01c01d01e027025026007044047072000,参照取指令,取操作数和mov执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,在003的微指令执行后,下一步ir=0719,说明取指令是正确的;在008的微指令执行后,下一步tr

8、=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步a=0002,说明取目的操作数是正确的。最后分析指令执行的结果,指令执行前r1单元的内容为0000(见图1.2),将其转移到0002+r2,开始0002+r2内容为0002指令执行后内容变为0000(在指令的最后一条微指令,微地址为072的下一步,见图1.5),说明结果是正确的。四、设计中遇到的问题及解决办法第一天主要是对各个寻址方式的了解,起初对各个寻址方式的寻址过程不熟悉,不能看懂调试微流程的各步骤,经过请教同学和查看课本,有了进一步的了解。第二天 运算指令的微程序设计与调试一、设计目标 设计并调试运算指令的微流程二、运算

9、指令微程序入口地址指令助记符指 令 编 码入口地址(h)fedcba9876543210movsrc, dst000001源地址码目的地址码044addsrc, dst000010源地址码目的地址码048addcsrc, dst000011源地址码目的地址码 04csub src, dst000100源地址码目的地址码 050subbsrc, dst000101源地址码目的地址码 054cmpsrc, dst000110源地址码目的地址码 058andsrc, dst000111源地址码目的地址码 05cor src, dst001000源地址码目的地址码 060xor src, dst001

10、001源地址码目的地址码 064testsrc, dst001010源地址码目的地址码 068inc dst00000010001目的地址码0a4dec dst00000010010目的地址码 0a8not dst00000010011目的地址码 0ac三、运算类指令微程序(参照指导书图26的形式)四、测试程序、数据及运行结果1、测试内容:addc 0010h, (r2)机器码:内存地址(h)机器码(h)汇编指令00000f4a 0010 addc 0010h,(r2)在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图1.4

11、,首先看微指令的执行次序:00100200300400b00f01401501600601902502600704c06f071072000,参照取指令,取操作数和addc执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,在003的微指令执行后,下一步ir=0f4a,说明取指令是正确的;在016的微指令执行后,下一步tr=fffc,说明取原操作数是正确的;在在026的微指令执行后,下一步a=0f4a,说明取目的操作数是正确的。最后分析指令执行的结果:即fffc+0f4a结果,由072下一条指令可以看出其结果为0f47,说明结果是正确的。运行结果:2.测试内容:dec 0010h机器

12、码:内存地址(h)机器码(h)汇编指令0000025a 0010 addc 0010h,(r2)在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601b01f0240250260070ab06f071072000,参照取指令,取操作数和dec执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,dec为单操作数指令,在003的微指令执行后,下一步执行取目的操作数,在026的微指令执行后,下一步a=fffd,说明取目的操作数是正确的。最后分析指令执行的结果:即fffd-

13、1结果,由072下一条指令可以看出其结果为fffc,说明结果是正确的。运行结果3. 测试内容:cmp #0010, +0001h机器码:内存地址(h)机器码(h)汇编指令00001b78 0010 0001 cmp #0010,+0001h在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300400b00f01600601b01f020021027025026007058000,参照取指令,取操作数和addc执行微流程分析,所执行的微指令顺序是正确的 其次分析执行的过程,在003的

14、微指令执行后,下一步ir=0f4a,说明取指令是正确的;在016的微指令执行后,下一步tr=fffc,说明取原操作数是正确的;在在026的微指令执行后,下一步a=0f4a,说明取目的操作数是正确的。最后分析指令执行的结果:cmp指令不保存结果,只有psw记录,szoc结果为1运行结果4.测试内容:.and r1,0010h机器码:内存地址(h)机器码(h)汇编指令00001c3a 0010 and r1,0010h在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:001002003004008006

15、01b01f02402502600705c06f071072000,参照取指令,取操作数和and执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,在003的微指令执行后,下一步ir=0f4a,说明取指令是正确的;在008的微指令执行后,下一步tr=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步a=fffc,说明取目的操作数是正确的。最后分析指令执行的结果:即0000 and fffc结果,由072下一条指令可以看出其结果为fffb,说明结果是正确的。运行结果五、设计中遇到的问题及解决办法第二天的实验主要目的是了解执行阶段的操作方式,本实验只要求简单的运算指令执行

16、阶段,根据不同指令操作码op转向不同分支,该控制由微转移方式字段产生,预习时入口地址的形成根据指导书了解得到,不懂得地方就请教同学。第三天 cpu硬件的初级设计与验证一、设计目标 在运算器实验的基础上对硬件进行扩充,建立初级cpu的数据通路,构造一个只支持运算指令的初级cpu 二、硬件设计1、pc模块设计程序计数器pc与r模块一样采用异步复位,pc通过三态门与ib相连。timescale 1ns / 1psmodule pc(d,q,n_reset,clk,ce,pcinc);input 15:0 d;input n_reset,clk,ce;input pcinc;output 15:0 q

17、;reg 15:0 data;always (posedge clk or negedge n_reset)beginif(!n_reset) 当n_reset有效时,pc清0 data=0; else if(ce) 在时钟信号clk的上升沿如果数据装入使能ce有效则dq, data=d; else if(pcinc) 自加信号pcinc有效则q+1q data=data+1;endassign q = data;endmodule2、dr模块设计dr采用异步复位timescale 1ns / 1psmodule dr #( / dr连接内部总线ib和系统总线的dbparameter data

18、width=16)(input wire datawidth-1:0 data_ib, / dr有两路数据输入data_ib、data_db,分别来自ib、dbinput wire datawidth-1:0 data_db,input wire clk,input wire drce_ib, /相应的有两个装入使能信号drce_ib、drce_dbinput wire drce_db,input n_reset,output reg datawidth-1:0 q); /输出端q分别通过两个三态门连到ib、db。always(posedge clk or negedge n_reset) /

19、在时钟信号的上升沿begin if(!n_reset) /复位时dr清0 q=0; else if(drce_ib) /当drce_ib有效时则data_ibq q=data_ib;else if(drce_db) /当drce_db有效时则data_dbqq=data_db; endendmodule 3、顶层模块设计(自己增加的设计部分)/tr寄存器的实例化r #(datawidth) tr(.q(tr_out),.d(ib),clk(clock),.ce(trce),.tr_reset(tr_reset);/ar寄存器的实例化r#(addrwidth)ar(.q(ar_out),.d(a

20、b),.clk(clock),.ce(arce),.ar_reset(ar_reset);/ir寄存器的实例化r #(datawidth) ir(.q(ir_out),.d(ib),.clk(clock),.ce(irce),.ir_reset(ir_reset);三、验证测试指令:(1) addc 0010h, (r2)执行结果:(2) dec 0010h执行结果:(3) cmp #0010执行结果:(4) +0001hand r1,0010h执行结果:经过与day2实验结果的比较,结果与其相同,证明硬件设计是正确的四、设计中遇到的问题及解决办法day3的实验是自己设计初级的cpu及简单的运

21、算功能,设计硬件的的大部分verilog语言都已经给出,只需根据要求补全dr,pc的代码,及在cou中实例化ar,ir,tr,dr,pc的代码根据其功能要求补全第四天 为cpu扩充转移指令一、设计要求 在初级cpu的基础上进行功能扩充,使其支持转移类型指令二、硬件uag模块设计(自己修改的设计部分,加上适当注释)always * begin case (bm)3d0:uagout = na; /0,固定转移3d1:uagout = na8,intr&if,na6:0; /1,根据是否中断产生两分支 3d2:uagout = na8:2, bm2_uar1, bm2_uar0; /2,取指令后的

22、三分支转移,双单无操作数,即取源, 3d3: uagout=na8:1,bm3_uar0;3d4:uagout = bm4_ua; /4,按op多路转移3d5:uagout = na8:2, bm5_uar10; /5,按寻址方式m多路转移3d6:uagout = na8:3, bm6_uar21, 1b0; /6,按寻址方式m多路转3d7:uagout = na8:1, bm7_uar0; /7,结果回送时,按寄存器、存储器转移 default:uagout = 9b000000000;endcase end /uar1,uar0双操作数=00,01;单操作数=10;无操作数11assign

23、 bm2_uar1 = !(|ir15:10); assign bm2_uar0 = !(|ir9:5);always(szoc, ir) begin case(ir7:6)/ 条件转移类指令 2b00:flag_mux=szoc0 /选00时表示满足条件cf=12b01:flag_mux=szoc 1 /选01时表示满足条件of=1 2b10:flag_mux=szoc2 /选10时表示满足条件zf=12b11:flag_mux=szoc3 /选11时表示满足条件sf=1default:flag_mux00200300601b01f0200210270250260070a0000,参照取指令

24、,取操作数和dec执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,jmp为单操作数指令,在003的微指令执行后,下一步执行取目的操作数。将pc无条件转移到0012地址2.测试内容: add#1000,0010h jc0014h /0010h-f000运行数据:0b7a 1000 0010 011a 0014运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300400b00f01600601b01f02402502600704806f0710720000

25、0100200300601b01f024025026007075077000,参照取指令,取操作数和add执行微流程,及jc操作指令执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,add为双操作数指令,在003的微指令执行后,下一步ir=0b7a,说明取指令是正确的,执行取源操作数,在016的微指令执行后下一步tr=1000,说明取源操作数是正确的;执行取目的操作数,在026的微指令执行后,下一步a=f000,即取地址0010的内容,说明取目的操作数是正确的。由结果可知szoc=5,满足有进位条件,由第二条指令执行003的微指令执行后,下一步ir=011a,说明取指令是正确的,即

26、将pc转移到0014,由运行结果证明是正确的运行结果及分析:3.测试内容: add #8010,0010h jo 0014h /0010h-8023运行数据:0b7a 8010 0010 015a 0014 运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300400b00f01600601b01f02402502600704806f07107200000100200300601b01f024025026007075077000,参照取指令,取操作数和add执行微流

27、程,及jc操作指令执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,add为双操作数指令,在003的微指令执行后,下一步ir=0b7a,说明取指令是正确的,执行取源操作数,在016的微指令执行后下一步tr=8010,说明取源操作数是正确的;执行取目的操作数,在026的微指令执行后,下一步a=8023,即取地址0010的内容,说明取目的操作数是正确的。由结果可知szoc=3,满足有溢出条件,由第二条指令执行003的微指令执行后,下一步ir=015a,说明取指令是正确的,执行取目的操作数,执行阶段,最终pc转移到0014地址上,由运行结果证明是正确的运行结果:4.测试内容: and #

28、5555,0010h jz (0014h) /0010h-aaaa运行数据:1f7a 5555 0010 0199 0014 运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300400b00f01600601b01f02402502600705c06f07107200000100200300601b01f022023024025026007075077000,参照取指令,取操作数和and执行微流程,及jz操作指令执行微流程分析,所执行的微指令顺序是正确的其次分析执

29、行的过程,and为双操作数指令,在003的微指令执行后,下一步ir=1f7a,说明取指令是正确的,执行取源操作数,在016的微指令执行后下一步tr=5555,说明取源操作数是正确的;执行取目的操作数,在026的微指令执行后,下一步a=aaaa,即取地址0010的内容,说明取目的操作数是正确的。由结果可知szoc=5,满足全为零条件,由第二条指令执行003的微指令执行后,下一步ir=0199,说明取指令是正确的,执行取目的操作数。执行阶段,即将pc转移到0014地址内容0012h上,由运行结果证明是正确的5.测试内容: subb #0002 ,0010h 0010h-0001js +0014h运

30、行数据: 177a 0002 0010 01d8 0014运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300400b00f01600601b01f02402502600705406f07107200000100200300601b01f020021027025026007075077000,参照取指令,取操作数和subb执行微流程,及js操作指令执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,subb为双操作数指令,在003的微指令执行后,下一步i

31、r=177a,说明取指令是正确的,执行取源操作数,在016的微指令执行后下一步tr=0002,说明取源操作数是正确的;执行取目的操作数,在026的微指令执行后,下一步a=ffff,即取地址0010的内容,说明取目的操作数是正确的。由结果可知szoc=9,满足符号位为负条件,由第二条指令执行003的微指令执行后,下一步ir=01d8,说明取指令是正确的,执行取目的操作数。执行阶段,将转移到0019地址上,由运行结果证明是正确的五、设计中遇到的问题及解决办法预习时不太理解转移指令的作用,后来知道了转移指令也是一个执行指令,转移指令分条件转移和无条件转移,所以在设计调试程序时先设计一条指令,使其满足

32、转移指令的条件,满足条件的的选择是由ir76来判断的,在cpu中编写程序,当ir76=00时,即cf满足条件,当ir76=01时,即of满足条件,当ir76=10时,即zf满足条件,当ir76=11时,即sf满足条件通过实验,弄清了转移指令的作用,即在满足转移指令条件下pc指向另一条地址。第五天 为cpu扩充移位指令一、设计目标 在前面cpu的基础上扩充硬件,使其支持转移指令二、硬件设计1、shifter模块设计module shifter(q,d,clk,sv,sl,sr,n_reset,ir76,cf); parameter datawidth = 16; output datawidth

33、-1:0 q; input datawidth-1:0 d;input 1:0ir76; input clk,n_reset,cf; input sv, sl, sr;reg datawidth-1:0 data;wire data_lsb;wire data_hsb; /实例化两个四选一多路选择器mux lsb_mux(.q(data_lsb),.d1(1b0),.d2(1b0),.d3(d15),.d4(cf),.addr(ir76);/低位多路选择器的实例化mux hsb_mux(.q(data_hsb),.d1(d15),.d2(1b0),.d3(d0),.d4(cf),.addr(i

34、r76); /高位多路选择器的实例化always (posedge clk or negedge n_reset) begin if (!n_reset) data = 0;else if(sv) data = d; else if (sl) data = ddatawidth-2:0, data_lsb; else if(sr) data = data_hsb, ddatawidth-1:1; endassign q = data;endmodule;2、cf模块设计module cf_mux(d15, d0, cout, q, sl, sr);input d15, d0, cout;inp

35、ut sl, sr;output q;reg q;always (*)begincase (sl, sr)3b01: q = d0;3b10: q = d15;default:q = cout;endcaseendendmodule; 3、ir_decode模块设计(自己增加修改的设计部分) 2b00: bm4_ua0014-2513运行数据:0039 0010运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601b01f0200210270250260070

36、9e06f071072000,参照取指令,取操作数和sar执行微流程,所执行的微指令顺序是正确的其次分析执行的过程,sar为单操作数指令,在003的微指令执行后,下一步ir=0039,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步a=2513,即以0010的内容0014h为地址,其中0014的内容为2513,说明取目的操作数是正确的。算术右移后变为1289,由运行结果证明是正确的2.测试内容:shl 0010 /0010-2513运行数据:005a0010运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分

37、析过程如下:对照图,首先看微指令的执行次序:00100200300601b01f02402502600709406f071072000,参照取指令,取操作数和shl执行微流程,所执行的微指令顺序是正确的其次分析执行的过程,shl为单操作数指令,在003的微指令执行后,下一步ir=005a,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步a=2513,即0010的内容为2513,说明取目的操作数是正确的。逻辑左移后变为4a26,由运行结果证明是正确的3.测试内容:shr0010h /0010-2513运行数据:007a 0010 运行结果及分析:在调试软件unidebugge

38、r中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601b01f02402502600709606f071072000,参照取指令,取操作数和shl执行微流程,所执行的微指令顺序是正确的其次分析执行的过程,shr为单操作数指令,在003的微指令执行后,下一步ir=007a,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步a=2513,即0010的内容为2513,说明取目的操作数是正确的。逻辑右移后变为1289,由运行结果证明是正确的4测试内容:rol(0010h) /0010-0014-

39、2513运行数据:0099 0010运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601b01f02402502600709806f071072000,参照取指令,取操作数和shl执行微流程,所执行的微指令顺序是正确的其次分析执行的过程,shl为单操作数指令,在003的微指令执行后,下一步ir=005a,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步a=2513,即以0010的内容0014为地址,0014的内容为2513,说明取目的操作

40、数是正确的。循环左移后变为4a26,由运行结果证明是正确的5.测试内容:ror(0010h) /0010-0014-2513运行数据:00b9 0010运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601b01f02402502600709a06f071072000,参照取指令,取操作数和shl执行微流程,所执行的微指令顺序是正确的其次分析执行的过程,shl为单操作数指令,在003的微指令执行后,下一步ir=00b9,说明取指令是正确的,执行取目的操作数,在

41、026的微指令执行后,下一步a=2513,即以0010的内容0014为地址,0014的内容为2513,说明取目的操作数是正确的。循环右移后变为4a26,由运行结果证明是正确的6.测试内容:rcl+0010h /0010-0012-2513运行数据:00d8 0010运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601b01f02402502600709c06f071072000,参照取指令,取操作数和shl执行微流程,所执行的微指令顺序是正确的其次分析执行的

42、过程,rcl为单操作数指令,在003的微指令执行后,下一步ir=00d8,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步a=2513,即以pc+0010即0012的内容,为2513,说明取目的操作数是正确的。循环右移后变为4a26,由运行结果证明是正确的7.测试内容:rcr+0010h) /0010-0012-2513运行数据:00f8 0010运行结果及分析:在调试软件unidebugger中,根据表将机器码输入ram,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601b01f02402502600709e0

43、6f071072000,参照取指令,取操作数和shl执行微流程,所执行的微指令顺序是正确的其次分析执行的过程,rcl为单操作数指令,在003的微指令执行后,下一步ir=00f8,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步a=2513,即以pc+0010即0012的内容,为2513,说明取目的操作数是正确的。循环右移后变为1289,由运行结果证明是正确的四、设计中遇到的问题及解决办法预习时对器件的实例化不太清楚,例如在shifter中对mux的实例化,实例化的两个mux,一个是用来产生最低有效位,一个用来产生最高有效位。产生低位的输入端口分别是0,0,d15,cf,输出

44、为lsb;产生高位的输入端口为d15,0,d0,cf,输出为hsb。根据地址ir76,判断输入。在最低有效位lsb产生逻辑中,当ir76=00时将0送给lsb,即算术左移,当ir76=01时将0送给lsb,即逻辑左移,当ir76=10时将d15送给lsb,即循环左移,当ir76=11时将cf送给lsb,即带进位的循环左移在最高有效位hsb产生逻辑中,当ir76=00时将d15送给hsb,即算术右移,当ir76=01时将0送给hsb,即逻辑右移,当ir76=10时将d0送给hsb,即循环右移,当ir76=11时将cf送给hsb,即带进位的循环右移第六天 为cpu扩充堆栈类指令一、设计目标 在前面cpu的基础上增加堆栈,使其支持与堆栈有关的push,pop,call,ret指令 二、硬件设计1、sp模块设计(加上适当注释)module sp(q,d,clk,ce,n_reset); par

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论