ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:185.05KB ,
资源ID:11936808      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11936808.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于微程序设计的嵌入式CISCCPU模型的实现.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于微程序设计的嵌入式CISCCPU模型的实现.docx

1、基于微程序设计的嵌入式CISCCPU模型的实现计算机硬件实验报告基于微程序设计的嵌入式CISC CPU模型的实现学院: 计算机科学与工程学院 专 业: 计算机应用技术 学生姓名: 学 号: 指导教师: 2012年3 月15 日基于微程序设计的嵌入式CISC CPU模型的实现一、实验题目 设计一台嵌入式CISC模型计算机(采用单数据总线结构的运算器、定长CPU周期、联合控制方式),并运行能完成一定功能的机器语言程序进行验证,程序功能如下: 连续输入5个有符号整数(8位二进制补码表示,用十六进制数输入),求最大的负数并输出显示。 说明:5个有符号数从外部输入,并依次存放在RAM的某一连续的存储区域

2、内; 一定要使用符号标志位(比如说SF),若涉及到大于、大于等于、小于、小于等于、为负或为正时跳转,等等之类的条件转移指令时,至少要判断符号标志位; 算术运算类指令要求都采用有符号数的运算,并锁存标志位。二、嵌入式CISC模型机数据通路框图三、微程序控制器(CISC模型机)的逻辑结构框图四、模型机的指令系统和指令格式指令助记符指令格式功能IN1 Rd1100Rd将数据存到Rd寄存器OUT1 Rs1111Rs(RS)LEDMOV1 data,Rd0010RdDATARDdataMOV2 RS,RD0011RSRDRSRDMOV3 RS,RD0100RSRDRSRDMOV4 RS,RD0101RS

3、RDRSRDCMP Rs,Rd1001RSRDRS-RD 锁存CY和ZITEST data,RD1010Rd测试Rd寄存器中的值data锁存CY和ZIINC Rd1011RdRd+1RdJB addr1100若小于,则addrPCdataJZ addr1101若全为零,则addrPCData五、机器指令的微程序流程图六、CISC模型机的顶层电路图七、汇编语言源程序算法思想为:R2寄存器初始化为0,R1寄存器初始化为5,R0寄存器存入输入的数据,然后将R0中的数存入以R2寄存器中的数为地址的RAM中,R2寄存器自增一,再和R1寄存器中的数进行比较,如果小于则再输入下一个数,如此循环五次,把输入的

4、五个数存入RAM中。当R2寄存器中数和R1中相等时,则进入负数判定和负数间的比较。R2寄存器初始化为0, R0寄存器初始化为80H(即-128)。把RAM中以R2中的数为地址的的数取出来放在R3中,然后R2自增一,为取下一个数做准备。接下来测试R3中的数是否为负数,如果不是则跳到L3处,判断是否已经取完了五个数,若取完则输出R0,未取完则跳转到L2,从RAM中取下一个数。如果是负数,则和R0中的数进行比较。如果R3中的数比R0中的数小,则跳到L3处进行判断,从RAM中取下一个数或者输出R0,否则将R0中的数替换为R3中的数。即,每次比较完后R0中都保存的是最大的负数。接着比较R2与R1,判断是

5、否已经取完了五个数,若R2小于R1则跳转到L2,直到RAM中的数取完为止。如此循环五次,最后输出R0中的数,即最大的负数。源程序 功能MOV1 00,R2 将立即数00R2,用于循环计数MOV1 05,R1 将立即数05R1,用于设定最大循环次数L1: IN1 R0 从开关输入任意整数的补码给R0 MOV2 R0,R2 将外部输入数据存到RAM INC R2 CMP R2,R1 比较R2、R1,以确定是否输入5个数据,锁存FC,FZ JB L1 若FC=1且FZ=0,则跳转到L1 MOV1 00,R2 将立即数00R2,用于循环计数MOV1 80H,R0 将最小负数的补码给R0L2: MOV3

6、 R2,R3 取RAM中的数据给R3 INC R2 TEST 80H,R3 测试符号位,锁存FZ JZ L3 若为R3内正数则跳转到L3 CMP R3,R0 比较R3、R0,选取较大的负数 JB L3 若FC=1且FZ=0,则跳转到L3 MOV4 R3,R0 将较大的负数送给R0L3: CMP R2,R1 比较R2、R1,以确定是否输入5个数据,锁存FC,FZ JB L2 若FC=1且FZ=0,则跳转到L2 OUT1 R0 输出最大的负数八、机器语言源程序助记符 地址 机器代码 功能MOV1 00,R2 00 00100010 00R2 01 00000000 MOV1 05,R1 02 00

7、100001 05R2 03 00000101L1: IN1 R0 04 10000000 SWR0 MOV2 R0,R2 05 00110010 R0R2 INC R2 06 10110010 (R2)+1R2 CMP R2,R1 07 10011001 (R2)-(R1),锁存FC,FZ JB L1 08 11000000 若小于,则跳转到L1 09 00000100 MOV1 00,R2 0A 00100010 00R2 0B 00000000 MOV1 80H,R0 0C 00100000 80HR0 0D 10000000L2: MOV3 R2,R3 0E 01001011 R2 R

8、3 INC R2 0F 10110010 (R2)+1R2 TEST 80H,R3 10 10100011 测试符号位,锁存FZ JZ L3 12 11010000 若FZ为零,则跳转到L3 13 00011000 CMP R3,R0 14 10010011 (R3)-(R0),锁存FC,FZ JB L3 15 11000000 若小于,则跳转到L3 16 00011000 MOV4 R3,R0 17 01011100 (R3)(R0)L3: CMP R2,R1 18 10011001 (R2)-(R1),锁存FC,FZ JB L2 19 11000000 若小于,则跳转到L2 1A 0000

9、1110 OUT1 R0 1B 11110000 ROLED九、微命令格式和微指令代码表(1)设计微指令格式和微指令代码表CISC模型机系统使用的微指令采用全水平型微指令,字长为30位,其中微命令字段为24位,P字段为3位,后继微地址为6位,其格式如下:29282726252423222120191817RAM_BRAM_CSRAM_WRPC_BLOADLDPCLDARLDIRLDRiRD_BRS_BS1S01615141312111009080706ALU_BLDACLDDRWRCSSW_BLED_BLDFRP1P2P3由微指令格式和微程序流程图编写的微指令代码表如下所示:地址 微命令字段

10、P字段 后继微地址 000000 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 0 000001 000001 1 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 1 1 0 1 0 0 000000 000010 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 0 010010 000011 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 0 0 0 010011 000100 1 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 1 1

11、 1 1 0 0 0 0 010100 000101 1 1 0 0 1 0 0 0 1 1 0 0 0 1 0 0 1 1 1 1 0 0 0 0 000000 001000 1 1 0 0 1 0 0 0 1 1 1 0 0 1 1 1 1 1 0 1 0 0 0 0 000000 001001 1 1 0 0 1 0 0 0 0 1 0 0 0 1 1 0 1 1 1 1 0 0 0 0 010110 001010 1 1 0 0 1 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 010101 001011 1 1 0 0 1 0 0 0 0 0 1 0 0

12、 1 1 0 1 1 1 1 0 0 0 0 011000001100 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 1 0 100000 001101 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 1 010001 001111 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 000000 010010 1 1 0 0 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 1 0 0 0 0 000000 010011 1 0 0 0 1 0 0 0

13、0 1 0 0 0 1 0 0 1 1 1 1 0 0 0 0 000000 010100 0 0 1 0 1 0 0 0 1 0 1 0 0 1 0 0 1 1 1 1 0 0 0 0 000000 010101 1 1 0 0 1 0 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 000000 010110 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 1 1 1 1 0 0 0 0 010111 010111 1 1 0 0 1 0 0 0 0 1 1 0 1 1 0 0 1 1 1 1 1 0 0 0 000000 011000 1 1 0

14、0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 000000 010001 1 1 0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 0 0 0 0 000000 100000 1 1 0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 0 0 0 0 000000 110001 1 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 0 000000 110000 1 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 1 1 1 0 0 0 0 000000 (2)

15、设计地址转移逻辑电路地址转移逻辑电路是根据微程序流程图中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。由于微地址寄存器中的触发器异步置“1”端低电平有效,与A5A0对应的异步置“1”控制信号SE6SE1的逻辑表达式为: SE6=NOT(NOT FZ) AND P3 AND T4);SE5=NOT(NOT FC OR FZ)AND P2 AND T4);SE4=NOT(I7 AND P1 AND T4);SE3=NOT(I6 AND P1 AND T4);SE2=NOT(I5 AND P1 AND T4);SE1=NOT(I4 AND P1 AND T4)

16、;说明:上述逻辑表达式的含义:在进行P(1)测试时,根据指令操作码I7、I6、I5、I4进行16路分支;在进行P(2)测试时,根据状态标志FC和FZ进行2路分支。在进行P(3)测试时,根据状态标志FZ进行2路分支。地址转移逻辑电路中异步置“1”信号SE6SE1表达式的确定与P字段测试时转移微地址的确定密切相关;十、仿真波形图及其分析 执行MOV1 00,R2 执行MOV1 05,R1 IN1 R0,将数据存入R0 程序计数器PC的初值为0,往后实现加1计数或实现程序转移 MOV2 R0,R2,将数据存入RAM中取址微指令的微地址 PC未在0A的基础上加一,而是被JB L1指令成功的修改成地址0

17、4(标号L1的地址) INC R2 CMP R2,R1,是否输入了5个数 IN1 R0,循环输入下一个数,共5个数 JB L1,循环输入5个数,存入RAM 执行MOV1 00,R2和MOV1 80H,R0 初始化R0,R2 执行MOV3 R2,R3,取RAM中的数据给R3 INC R2执行TEST 80H,R3,测试符号位 执行JZ L3,根据Z标志位判断是否跳转 执行CMP R3,R0,比较R3,R0的大小,锁存Z、C标志位执行JB L3,根据Z、C标志位判断是否跳转执行CMP R2,R1,是否输入了5个数执行MOV4 R3,R0,将较大的负数存入R0 执行JB L2和MOV3 R2,R3,

18、取RAM中下一个数 执行OUT1 R0,输出最大的负数通过这次实验课程,使我对计算机的工作原理和流程有了更加深刻的认识,同时也巩固了我以前所学的汇编语言。这次实验课程让我真正理解硬件的工作原理,多了一种看待问题的角度;我也发现了我所学知识的许多漏洞,需要我在今后的学习中不断弥补。在老师讲完理论后,我首先把书中的各章节通读了一遍,对各个器件的结构、及整个嵌入式CISC模型机的结构以及MAX+plus II有了个大概的了解,为实现更复杂的功能打下来了基础。在调试书上的例子时对嵌入式CISC模型机的工作原理有了进一步的理解。在接下来的一个星期里,在课本上的例子的基础上进行改动,增加了一个P(3)测试

19、、一个寄存器和RAM。首先写好汇编程序,在草稿纸上绘出系统结构。然后根据汇编及系统基本结构画微程序流程图、设计微指令。最后是进行仿真和调试。在整个过程中,仿真和调试花了最多的时间。根据波形图,找出出现错误的地方,最初调试时,由于对调试方法不太熟悉,不知道该从何处下手。后来,通过跟同学讨论,慢慢掌握了调试的基本方法。随着一个个错误的解决,自己也慢慢的积累了一套调试程序的方法:1、检查一下电路图;2、检查汇编程序是否正确;3、汇编的机器代码是否与汇编程序对应;4、微命令的控制信号对不对。按照这个顺序下来,基本上都能把问题解决。这些错误大部分都是一些很低级的错误,比如将IR和DR寄存器控制信号接反了

20、,直接导致PC加到01后就不再加一;做比较运算时由于粗心大意将源寄存器与目标寄存器写反,导致循环出错;将汇编语言转换成机器语言时又将寄存器代码搞混。这些错误在设计时认真一些,多检查一遍,完全可以避免后期调试时大量时间的耗费。最后,要多和老师和同学交流,也许让你焦头烂额的问题,在别人眼里其实是一个很简单的问题。经过近近两周的努力,终于将此次设计成功完成,实现了题目所要求的所有功能。 在实践的过程中,我对计算机体系结构有了一定的理解,尤其是加深了我对计算机硬件的理解,但是也使得我更加深刻的发现了自己的不足,还要更加努力的学习。本程序虽然完成了预期所要求的基本功能,但还有很多需要完善的地方,比如在标

21、志位的选择上,本以为在比较时符号标志位与Z标志位可以共用,后来经过老师提示发现如果TEST与CMP共用Z标志位的话JB跳转只能与CMP合用,而JZ跳转只能与TEST指令合用,一旦混用就会出现错误。这使我认识到了自己在软件设计、开发上的不足。软件的前期设计不充分和顶层电路图不合理的布局让我在后期修改代码和扩展功能时遇到了意想不到的困难。虽然本次课程设计还有如此种种的不足,但是我仍然受益匪浅。1.运算器和状态条件寄存器单元运算器由算术逻辑运算单元ALU、两个暂存寄存器和状态条件寄存器组成。算术逻辑运算单元可执行满足题目要求的三种运算,如下面的表中所示;暂存寄存器由累加器AC和数据寄存器DR组成;状

22、态条件寄存器用来在进行比较运算时锁存借位标志(FC/CY)和零标志(FZ/ZI)。ALU单元的功能表 S1 S0 功能 0 1 (AC)-(DR),锁存FC和FZ 1 0 (AC)+11 1 80H&(AC), 锁存FZ(1)ALU单元VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ALU ISPORT( A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); B:IN STD_LOGIC_V

23、ECTOR(7 DOWNTO 0); S1,S0:IN STD_LOGIC; BCDOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); CY,ZI:OUT STD_LOGIC );END ALU;ARCHITECTURE A OF ALU ISSIGNAL AA,BB,TEMP0:STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL TEMP1:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN PROCESS(S1,S0) BEGIN IF(S1=0 AND S0=1)THEN BCDOUT=A-B; IF(AB)THEN CY=1

24、; ZI=0; ELSIF(A=B)THEN CY=0; ZI=1; ELSE CY=0; ZI=0; END IF; ELSIF(S1=1AND S0=0)THEN BCDOUT=A+1; ELSIF(S1=1AND S0=1)THEN TEMP1=10000000AND A; BCDOUT=TEMP1(7 DOWNTO 0); IF(TEMP1=0000000)THEN ZI=1; ELSE ZI=0; END IF; ELSE BCDOUT=00000000; CY=0; ZI=0; END IF; END PROCESS;END A;(2)状态条件寄存单元LS74VHDL源程序如下:L

25、IBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LS74 ISPORT( LDFR:IN STD_LOGIC; CY,ZI:IN STD_LOGIC; FC,FZ:OUT STD_LOGIC );END LS74;ARCHITECTURE A OF LS74 ISBEGIN PROCESS(LDFR) BEGIN IF(LDFREVENT AND LDFR=1)THEN FC=CY; FZ=ZI; END IF; END PROCESS;END A;(3)暂存寄存器单元LS273VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD

26、_LOGIC_1164.ALL;ENTITY LS273 ISPORT( D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC; O:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END LS273;ARCHITECTURE A OF LS273 ISBEGIN PROCESS(CLK) BEGIN IF(CLKEVENT AND CLK=1)THEN O=D; END IF; END PROCESS;END A;2.通用寄存器单元LS2734个通用寄存器(R0、R1、R2、R3)以及ALU输出的外部控制信号如下表中所示

27、:R0_B R1_B R2_B R3_B ALU_B 功能 0 1 1 1 1 输出(R0) 1 0 1 1 1 输出(R1) 1 1 0 1 1 输出(R2) 1 1 1 0 1 输出(R3) 1 1 1 1 0 输出ALUVHDL源程序同暂存寄存器单元LS2733.地址寄存器单元LS273VHDL源程序同暂存寄存器单元LS2734.指令寄存器单元LS273VHDL源程序同暂存寄存器单元LS2735.1:2分配器FEN21:2分配器用来将ALU的运算结果或通用寄存器的内容经4选1多路选择器送到数据总线,或者将ALU的运算结果或通用寄存器的内容送往输出设备显示。功能如下表所示。 输入 输出 WR LED_B X7.0 W17.0 W27.0 0 0 X7.0 其他取值 X7.0 VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FEN2 ISPORT( WR,LED_B:IN STD_LOGIC; X:IN STD_LOGIC_VECTOR(7 DOWNTO 0); W1,W2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END FEN2;ARCHITECTURE A OF FEN2 IS

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

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