


免费预览已结束,剩余20页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一天 取操作数微程序的设计和调试一、设计目标 设计并调试取操作数的为程序二、取操作数微流程三、测试程序、数据及运行结果格式如下:1、测试内容:立即数寻址、直接寻址测试指令(或程序):MOV #5678H,0010H 机器码:077A 5678 0010 内存地址(H)机器码(H)汇编指令0000077A 5678 0010MOV #5678H,0010H指令功能:将立即数5678H送到内存地址为0010单元。首先看微指令的执行次序:001-002-003-004-00B-00F-016-006-01B-01F-024-025-026-007-044-047-072-000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令次序是正确的。其次分析执行的过程,在003的微指令执行后,下一步IR=007,说明取指令是正确的;在016的微指令执行后,下一步TR=5678,说明取源操作时是正确的;在026的微指令执行后,下一步A=FFFF,说明取目得操作数是正确的。 最后分析指令执行的结果,指令执行前0010单元的内容为FFFF,指令执行后内容将变为5678,说明正确。4、 设计中遇到的问题及解决办法 写代码时,有时会容易出错,机子会卡住,这是只有慢慢出入才不会卡住。第二天 运算指令的微程序设计与调试一、设计目标 设计并调试运算指令的微程序。二、运算指令微程序入口地址指令助记符指 令 编 码入口地址(H)FEDCBA9876543210MOVsrc, dst000001源地址码目的地址码044ADDsrc, dst000010源地址码目的地址码048ADDCsrc, dst000011源地址码目的地址码04CSUB src, dst000100源地址码目的地址码050SUBBsrc, dst000101源地址码目的地址码054CMPsrc, dst000110源地址码目的地址码058ANDsrc, dst000111源地址码目的地址码05COR src, dst001000源地址码目的地址码060XOR src, dst001001源地址码目的地址码064TESTsrc, dst001010源地址码目的地址码068INC dst00000010001目的地址码0A4DEC dst00000010010目的地址码0A8 NOT dst00000010011目的地址码0AC三、运算类指令微程序微地址(H)微指令(H)微命令BMNA注释007000008004044指令执行入口0489870006FTRoe, ADD, PSWce, SV006FADD04C98B0006FTRoe, ADDC, PSWce, SV006FADDC05098F0006FTRoe, SUB, PSWce, SV006FSUB0549930006FTRoe, SUBB,PSWce, SV006FSUBB05898C00000TRoe, CMP, PSWce0000CMP05C9970006FTRoe, AND, PSWce,SV006FAND 0609980006FTRoe, OR, PSWce,SV006FOR0649A30006FTRoe, XOR, PSWce, SV006FXOR 06899400000TRoe, AND, PSWce0000TEST 06F00000E70NOP0070回送0A41A70006FINC, PSWce, SV006FINC0A81AB0006FDEC, PSWce, SV006FDEC0AC 19F0006FNOT, PSWce ,SV006FNOT07068000000Soe, GRSce0000存入寄存器07160030072Soe, DRce0072存入dr07200052000DRoe, ARoe, WR0000存入贮存四、测试程序、数据及运行结果1、(1)测试内容:AND #AAAAH 0010H 0010 (FFFF) 机械码:1F7A AAAA 0010 运行数据: 运行结果及分析:首先看微指令的执行次序:001-002-003-004-00B-00F-016-006-01B-01F-024-025-026-007-05C-06F-071-072-000,参照取指令,取操作数和AND执行微流程分析,所执行的微指令次序是正确的。其次分析执行的过程,在003的微指令执行后,下一步IR=1F7A,说明取指令是正确的;在016的微指令执行后,下一步TR=AAAA,说明取源操作时是正确的;在026的微指令执行后,下一步A=FFFF,说明取目得操作数是正确的。最后分析指令执行的结果,指令执行前0010单元的内容为FFFF,指令执行后内容将变为AAAA,说明正确。(2)测试内容:MOV #AAAAH R1 MOV #5555H R2 ADD(R1),R2 机械码:0761 0010 0762 5555 0922 运行数据: 运行结果分析:由第003步IR=0761,说明取指令正确;由第13部的NO为1,GRS为0010,说明存数正确;由第25步NO为2,GRS为5555,则第二个存数正确;由第29步,IR=0922,取指令正确,由32步TR=AAAA,35步,A=5555,最后SHIFTER=FFFF,说明加法运算正确。(3) 测试内容:INC +disp 机械码:0238 0010 运行数据: 结果分析:首先取指令,第2步,IR=0238,取指令正确;由PC为2,0010单元地址加2,则为0012,即取0012单元内容FFBE。再加一,最后Shifter结果为内存0012单元的内容加一,为FFBF。(4)测试内容:CMP #0001H (0010)H; 0010存放0011,0011存放0000; 机械码:1B79 0010 0010 运行结果: 结果分析:首先取指令,IR=1B79,取原操作数TR=0010,取目的操作数,A=0000;比较,相减。五、设计中遇到的问题及解决办法设计和调试是有时由于粗心,机械码会出错,所以有时会做无用功。后来再反复调试,终于调试成功。第三天 CPU硬件的初级设计与验证一、设计目标 在运算器实验的基础上对硬件进行扩充,建立初级CPU的 数据通道,构造一个只支持运算指令的初级CPU。 二、硬件设计1、PC模块设计(加上适当注释)if(!n_reset) /当n_reset有效时,PC清0 data=0;else if(ce) /在时钟信号clk的上升沿如果数据装入使能ce有效,则d-q;data=d;else if(PCinc) /自加信号PCinc有效则q+1-q data=data+1;2、DR模块设计if(!n_reset) /复位时DR清0q=0;else if(DRce_IB) /当DRce_IB有效时,则data_IB-qq=data_IB;else if(DRce_DB) /当DRce_DB有效时,则data_DB-qq=data_DB;3、 顶层模块设计(自己增加的设计部分)/TR/TR寄存器的实例化R#(DATAWIDTH) TR(.q(TR_out),.d(IB),.clk(clock),.ce(TRce),.n_reset(n_reset);buffer #(DATAWIDTH) reg_buffer(.q(IB), .d(TR_out), .oe(TRoe);/ AR/AR寄存器的实例化R#(DATAWIDTH) AR(.q(AR_out),.d(IB),.clk(clock),.ce(ARce),.n_reset(n_reset);buffer #(ADDRWIDTH) AR_AB(.q(AB), .d(AR_out), .oe(ARoe_AB);buffer #(ADDRWIDTH) AR_IB(.q(IB), .d(AR_out), .oe(ARoe_IB);/IR/IR寄存器的实例化R#(DATAWIDTH) IR(.q(IR_out),.d(IB),.clk(clock),.ce(IRce),.n_reset(n_reset);/PCPC PC(.d(IB), .q(PC_out), .n_reset(n_reset), .clk(clock), .ce(PCce), .PCinc(PCinc);buffer #(DATAWIDTH) PC_buffer(.q(IB), .d(PC_out), .oe(PCoe);/DRDR #(DATAWIDTH) DR(.q(DR_out), .data_IB(IB), .data_DB(DB), .clk(clock), .DRce_IB(DRce_IB), .DRce_DB(DRce_DB), .n_reset(n_reset);buffer #(DATAWIDTH) DR_DB(.q(DB), .d(DR_out), .oe(DRoe_DB);buffer #(DATAWIDTH) DR_IB(.q(IB), .d(DR_out), .oe(DRoe_IB);3、 验证做完实验后,按照课设书上所说的完成了第二天的课设内容,依次如下:(1)测试内容:AND #AAAA 0010 0010 (FFFF)(2)测试内容:MOV #AAAA,R1 MOV #5555 ,R2 ADD(R1),R2(3)测试内容:INC +disp (4)测试内容:CMP #0001,(0010);0010存放0011,0011存放0000;验证结果与第二天相同(在此不再写出)。4、 设计中遇到的问题及解决办法由于不是很熟悉verilog hdl硬件描述语言,会编出错,从而在验证时会出错,影响进度。后来在同学和老师的帮助下,成功地设计成功并验证成功。第四天 为CPU扩充转移指令一、设计要求 在初级CPU的基础上进行功能扩充,使其支持转移指令。 二、硬件uAG模块设计(自己修改的设计部分,加上适当注释)3d3:uAGout= NA8:1, BM3_uAR0; 三、转移指令微程序的设计四、测试程序、数据及运行结果1、(1)测试内容:SUB #AAAAH 0010 H JZ 0011H / 0010存放AAAA机械码:137A AAAA 0010 0196 0011运行数据:结果分析:首先做SUB AAAAAAAA结果为0000,故szoc为0101,故结果为0,ZF为1满足转移条件,故转移到地址入口077单元,即取0011单元的内容ALU为BBBB;转移正确。(2)测试内容:ADD #1000H 0010H JC 0014H /0010存放F000 机械码:0B7A 1000 0010 011A 0014 运行数据: 运行结果及分析:首先进行加法运算,结果由进位,结果为0,故szoc为0101,CF为1,故满足转移条件,转移到0014单元内容为FF99,正确。五、设计中遇到的问题及解决办法有些转移指令,由于不是太熟悉会在编译时产生误差。后来在查看书本后终于理解清楚,正确验证出结果。第五天 为CPU扩充移位指令一、设计目标 在前面CPU的基础上扩充硬件,使其支持移位指令。 二、硬件设计1、SHIFTER模块设计 /实例化两个四选一多路选择器添加如下:mux lsb_mux(.q(data_lsb),.d1(1b0),.d2(1b0),.d3(d15),.d4(CF),.addr(IR76); /低位多路选择器的实例化mux hsb_mux(.q(data_lsb),.d1(d15),.d2(1b0),.d3(d0),.d4(CF),.addr(IR76); /高位多路选择器的实例化2、CF模块设计always (*)begincase (SL, SR)3b01: q = d0;3b10: q = d15;default:q = Cout;endcaseend 3、IR_DECODE模块设计(自己增加修改的设计部分)2b00: BM4_uA=5b01001,IR7:5,1b0; 4、顶层模块设计(增加自己修改的设计部分)wire CF_Cout; / 1、标志位CF的实例化 CF CF(.d15(ALU_out15), .d0(ALU_out0), .Cout(Cout),.q(CF_Cout), .SL(SL),.SR(SR); / 2、修改PSW的CF输入R#(DATAWIDTH)PSW(.q(PSW_out),.clk(clock),.n_reset(n_reset),.ce(PSWce),.d(12b0,SF,ZF,OF,CF_Cout); buffer #(DATAWIDTH)PSW_IB(.q(IB),.d(PSW_out),.oe(PSWoe);三、移位指令微程序的设计微地址(H)微指令(H)微命令BMNA注释0921810006FPSWce,SR006F右移0941820006FPSWce,SL006F左移0961810006FPSWce,SR006F右移0981820006FPSWce,SL006F左移09A1810006FPSWce,SR006F右移09C1820006FPSWce,SL006F左移09E1810006FPSWce,SR006F右移四、测试程序、数据及运行结果1、(1)测试内容:SAR 0010H /0010存放1FE1 机械码:003A 0010 运行数据: 运行结果及分析:存放在0010单元的1FE1经过算数右移指令后变为0FF0,从而算数右移指令正确。(2)测试内容:SHL 0010H /0010存放FFF8 机械码:005A 0010 运行数据: 运算结果及分析:存放在0010单元的FFF8经过逻辑左移指令后变为FFF0,从而逻辑左移指令正确。(3)测试内容:ROR 0010H /0010存放1FE1 机械码:00BA 0010 运行数据:运行结果及分析:存放在0010单元的1FE1经过循环右移指令后变为8FF0,从而循环右移指令正确。(4)测试内容:RCR 0010H /0010存放1FE1 机械码:00FA 0010 运行数据: 运行结果及分析:存放在0010单元的1FE1经过带进位循环右移指令后变为0FF0,从而带进位循环右移指令正确。四、设计中遇到的问题及解决办法 测试编写的内容时,有时会发现和自己写的循环后的内容不同,在经过检查后发现是自己写错了。以后做题时要仔细,不能粗心。第六天 为CPU扩充堆栈类指令一、设计目标 在前面CPU的基础上增加堆栈,使其支持与堆栈有关push ,pop,call,ret指令。二、硬件设计1、SP模块设计(加上适当注释)if(!n_reset) q=6b111111; /当复位信号有效时堆栈SP的输出为03Felse if(ce);q=d;2、顶层模块设计(自己增加修改的设计部分)SP #(DATAWIDTH)sp(.q(SP_out),.d(IB),.clk(clock),.ce(SPce),.n_reset(n_reset); /实例化堆栈指针buffer #(DATAWIDTH) spib(.q(IB), .d(SP_out), .oe(SPoe); /实例化三态缓冲器三、PUSH、POP、CALL、RET指令微程序的设计PUSH微地址(H)微指令(H)微命令BMNA注释0C0F40000C1SPoe,Ace00C1堆栈地址存入A0C102B000C2DEC,SV00C2地址减1,输出0C27C0800C3Soe,SPce,ARce00C3地址存入堆栈和AR中0C300052000ARoe,DRoe,WR0000地址写入主存POP微地址(H)微指令(H)微命令BMNA注释0C8B00000C9ARoe,TRce00C9AR内容存入TR0C9F40800CASPoe,Ace,ARce00CASP内容存入A和AR0CA027610CBARoe,RD,DRce,INC,SV00CB地址减1,输出0CB800800CCTRoe,ARce00CCTR内容存入AR0CC7C052000Soe,SPce,ARoe,DRoe,WR0000堆栈内容写入新地址CALL微地址(H)微指令(H)微命令BMNA注释0D0F40000D1SPoe,Ace00D1堆栈地址存入A0D1 B2B000D2DEC,SV,ARoe,TRce00D2地址减1, AR内容存入TR0D27C0800D3Soe,ARce,SPce00D3地址存入AR,SP0D3200300D4PCoe,DRce00D4PC内容存入DR0D484052000ARoe,DRoe,WR,TRoe,PCce0000PC个数写入内存,TR内容存入PCRET微地址(H)微指令(H)微命令BMNA注释03CF408003DSPoe,Ace,ARce003D堆栈地址写入A和AR03D0276103FINC,SV,ARoe,RD,DRce003F地址加1,同时读数03FC4000040DRoe,PCce0040DR值存入PC0407C000000Soe,SPce0000堆栈存入新地址四、测试程序、数据及运行结果1、(1)测试内容:PUSH 0010H POP 0012H /0010存放AAAA 机械码:031A 0010 033A 0012运行数据: 运行结果及分析:在0010单元存放AAAA。堆栈地址减1,观察到003E单元的数值变为AAAA,存入堆栈正确。后观察到0012单元的数据变成AAAA才,则出栈正确。(2)测试内容:CALL 0010 H RET 机械码:035A 0010 1234 0010(0761 0010 0002)运行数据: 运行结果分析:首先是取指令,存pc,看到堆栈指令的地址减1.由IR0010,接着是0761,转到调用程序处,执行一条move指令。然后返回,观察到堆栈指令的地址加一。然后恢复PC的值,程序接着原来的执行。PC的值变为2.说明返回正确,接着执行原来的指令。四、设计中遇到的问题及解决办法在这次堆栈指令的调试过程中,由于不熟悉PUSH、POP、CALL、RET这些堆栈指令,会在编写调试内容是发生错误,后来在经过一番研究后,终于调试成功。第七天 为CPU扩充中断系统一、设计目标 在前面cpu的基础上增加中断系统,使其支持键盘中断。 二、硬件设计1、if(!n_reset) IF=1; /机器复位信号n_reset和CLI都使IF清0 /TI有效时IF置1。 else if(cli) IF=0; else if(sti) IF=1;2、if(KR) VA_out=h0020; else if(PR) VA_out=h0021;3、顶层模块设计(自己增加修改的设计部分)IF IF(.clk(clock), .n_reset(n_reset), .sti(STI), .cli(CLI), .IF(IF_out);INTC INTC(.KR(KR), .PR(PR), .INTR(INTR), .VA_out(VA_out);buffer #(DATAWIDTH) VA_B(.q(DB), .d(VA_out), .oe(INTA);3、 微程序设计1中断响应隐指令的微程序设计微地址(H)微指令(H)微命令BMNA注释081F4005082CLI,SPoe,Ace0082关中断,SP到A08222B30083DEC,SV,PCoe,DRce0083地址减1,PC值送到DR08374080084Soe,ARce,Ace0084新堆栈地址存入AR和A08400052085ARoe,DRoe,WR0085PC值写入主存08502B33086DEC,SV,PSWoe,DRce0086地址减1,PSW值输入DR0867C080087Soe,ARce,SPce0087新堆栈地址存入AR和A08700052088ARoe,DRoe,WR0088PC值写入主存08800026089INTA,DRce0089中断响应信号存入DR089C008008ADRoe,ARce008ADR值送入AR08A0006108BARoe,RD,DRce008B读中断入口地址08BC4000001DRoe,PCce0001中断向量入口地址值送入PC2.中断返回指令RETI的微程序设计微地址(H)微指令(H)微命令BMNA注释03EF4080028SPoe,Ace,ARce0028堆栈地址送入AR和A02802761029INC,ARoe,RD,DRce,SV0029读PSW,堆栈地址加1029D000002ADRoe,TRce002APSW存入TR02A7408002BSoe,Ace,ARce002B新堆栈地址送入A和AR02B0276102CARoe,RD,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2.1 口算除法(1)(教案)-2024-2025学年三年级下册数学人教版
- 第三单元 第1课时 数数、数的组成(一)(教学设计)一年级数学下册同步高效课堂系列(人教版2024)
- 2025年中考数学试题分类汇编:概率(6大考点55题) (第1期)原卷版
- 单元4 日常生活中常见的材料教学设计-2025-2026学年初中化学仁爱科普版九年级下册-仁爱科普版2012
- 2025年中考化学试题分类汇编:科学探究题(第1期)原卷版
- 第8课 初识Python教学设计-2025-2026学年小学信息技术(信息科技)六年级上册青岛版(六三制)
- 2025年高考全国一卷数学试题(解析卷)
- 2025常规商品进口合同
- 向日葵趣味题目及答案
- 2025年江西省中考生物试题(含答案)
- 2025年全国企业员工全面质量管理知识竞赛题及参考答案
- 2025年《中华人民共和国民法典》网络知识竞赛100题题库(含答案)
- 2025四川省公安厅招聘辅警(448人)笔试参考题库附答案解析
- 《非物质文化遗产概论(第三版)》全套教学课件
- 2025新疆天泽和达水务科技有限公司部分岗位社会招聘28人笔试备考题库及答案解析
- 2025年中学生守则及中学生日常行为规范
- 注册安全工程师考试建筑施工(初级)安全生产实务试题及解答
- 2025年城镇燃气条例竞赛题库
- 展厅预算装修方案(3篇)
- 供电公司保密培训课件
- 供电外协人员管理办法
评论
0/150
提交评论