计算机组成原理课程设计 |
您所在的位置:网站首页 › 代码设计的首要任务 › 计算机组成原理课程设计 |
根据《计算机组成原理课程设计》的设计要求设计能够执行一定机器指令完成指定任务的CISC模型机。 1、课程设计的题目和内容 1.1 课程设计的题目 本次课程设计中本人选题为:输入包含10个整数(有符号数)的数组M,将其分成正整数数组P和负数数组N,依次输出正数数组P中的整数及正数的个数。
1.2 课程设计完成的内容 1.完成系统的总体设计,画出模型机数据通路框图; 2.设计微程序控制器(CISC模型计算机)的逻辑结构框图; 3.设计机器指令格式和指令系统; 4.设计时序产生器电路; 5.设计所有机器指令的微程序流程图; 6.设计操作控制器单元;在CISC模型计算机中,设计的内容包括微指令格式(议采用全水平型微指令)、微指令代码表(根 据微程序流程图和微指令格式来设计)和微程序控制器硬件电路(包括地址转移逻辑电路、微地址寄存器、微命令寄存和控制 存储器等。具体电路根据微程序控制器的逻辑结构框图、微指令格式和微指令代码来设计)。 7.设计模型机的所有单元电路,并用VHDL语言(也可使用GDF文件----图形描述文件)对模型机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件; 8.由给出的题目和设计的指令系统编写相应的汇编语言源程序; 9.根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去; 10.使用EDA软件进行功能仿真,要保证其结果满足题目的要求;(其中要利用EDA软件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试。) 2、系统总体设计 2.1 嵌入式CISI模型机系统总体设计
![]() 2.2 嵌入式CISC系统控制器的逻辑结构框图 ![]()
说明:在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令寄存器,即图中的微命令寄存器和微地址寄存器。 2.3 模型机的指令系统和所有指令的指令格式设计为了完成这次课程设计的功能,本次设计设计了10条指令:IN1(输入),MOV(将一个数送入寄存器),LAD(将寄存器内容送到内存),JMP(无条件跳转),INC(自加1),DEC(自减1),JNS(大于跳转),STO1(将源寄存器值送到目标寄存器),OUT1(输出),TEST(测试),如下用到的Rs和Rd分别表示源寄存器和目的寄存器。 2.3.1机器指令格式和指令系统指令助记符 指令格式 功能 15——12 11 10 9 8 7——0 IN1 Rd 0001 xx Rd xxxxxxxx 输入设备→Rd MOV Rd,im 0010 xx Rd im 立即数→Rd LAD (Rs),Rd 0011 Rs Rd xxxxxxxx ((Rs)) →Rd JMP addr 0100 xx xx addr addr→PC INC Rd 0101 xx Rd xxxxxxxx 将(Rd)+1→Rd,锁存SF和ZF DEC Rd 0110 xx Rd xxxxxxxx 将(Rd)-1→Rd,锁存SF和ZF JNS addr 0111 xx xx addr 若结果小于零,addr->pc STO1 Rs,(Rd) 1000 Rs Rd XXXXXXXX (Rs) →((Rd)) OUT1 Rs 1001 Rs xx XXXXXXXX (Rs) →输出设备 TEST Rd 1010 XX Rd XXXXXXXX 测试(Rd)是否为负,锁存SF 2.3.2 对Rs和Rd格式规定Rs或Rd 选定的寄存器 00 R0 01 R1 10 R2 11 R3 2.3.3 算数逻辑单元ALU的功能表S2 S1 S0 功能 0 0 0 X+Y,修改SF和ZF 0 0 1 X-Y,修改SF和ZF 0 1 0 Y+1,修改SF和ZF 0 1 1 Y-1,修改SF和ZF 1 0 0 X∧Y,修改SF和ZF 1 0 1 Y是否大于零,修改SF和ZF 1 1 0 Y 2.3.4 程序计数器PC的功能表CLR LOAD LDPC 功能 0 X X 将PC清0 1 0 ↑ BUS-->PC 1 1 0 不装入,也不计数 1 1 ↑ PC+1 2.3.5 时序产生器本实验采用的是微程序控制器的时序产生器,如下图
![]() 2.3.6 数据的表示 模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下: 7 6 5 4 3 2 1 0 符号位 尾数 3 微程序控制器的设计全过程 3.1 微程序控制器的设计微程序控制器的设计包括以下几个阶段: (1)根据微处理器结构图、指令格式和功能设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址; (2)设计微指令格式和微指令代码表; (3)设计地址转移逻辑电路; (4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制存储器; (5)设计微程序控制器的顶层电路(由多个模块组成)。 3.2地址转移逻辑电路的设计地址转移逻辑电路是根据微程序流程图中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。由于微地址寄存器中的触发器异步置“1”端低电平有效,与µA5~µA0对应的异步置“1”控制信号SE5~SE0的逻辑表达式为: 3.3 汇编语言程序 本题目的算法思想为:输入包含10个整数(无符号数)的数组M,将其分成正整数数组P和负数数组N,依次输出正数数组P中的整数及正数的个数。 汇编程序源码及对应注释如下: MOV R0,00H ;数据存放在RAM中的地址 MOV R1,0AH ;循环次数计数,从0A开始,到01时结束 MOV R3,00H ;保存正整数的个数 (L3中) L1: IN1 R2 ;输入一个数到R2中 STO1 R2,(R0) ;将输入的数据存放到地址为(R0)的RAM中 INC R0 ;RAM地址指针+1 DEC R1 ;循环次数-1 TEST R1 ;测试循环次数是否达到10次 JNS L1 ;R1不为负时跳转到L1 MOV R0,00H ;当10个数输入完成后,初始化RAM指针 MOV R1,0AH ;重置循环次数 L2: LAD (R0),R2 ;将内存中地址为(R0)的数据送到R2 TEST R2 ;测试(R2)是否大于零 JNS L3 ;(R2)大于零时跳转到L3 JMP L4 ;(R2)不大于零时跳转到L4 L3: OUT1 R2 ;(R2)输出 INC R3 ;正整数计数+1 L4: INC R0 ;RAM地址指针+1 DEC R1 ;循环次数-1 TEST R1 ;测试循环次数是否达到10次 JNS L2 ;(R2)不为负时跳转到L2 OUT1 R3 ;输出正整数的个数 3.4 汇编程序流程图![]() 3.5 汇编程序对应的地址与机器语言代码表: 地址 (十六进制) 汇编语言源程序 机器语言源程序 (二进制) 机器语言源程序 (十六进制) 00 MOV R0,00H 0010 00 00 00000000 2000 01 MOV R1,0AH 0010 00 01 00001010 210A 02 MOV R3,00H 0010 00 11 00000000 2300 03 L1:IN1 R2 0001 00 10 00000000 1200 04 STO1 R2,(R0) 1000 10 00 00000000 8800 05 INC R0 0101 00 00 00000000 5000 06 DEC R1 0110 00 01 00000000 6100 07 TEST R1 1010 00 01 00000000 A100 08 JNS L1 0111 00 00 00000011 7003 09 MOV R0,00H 0010 00 00 00000000 2000 0A MOV R1,0AH 0010 00 01 00001001 210A 0B L2:LAD (R0),R2 0011 00 10 00000000 3200 0C TEST R2 1010 00 10 00000000 A200 0D JNS L3 0111 00 00 00001111 700F 0E JMP L4 0100 00 00 00010001 4011 0F L3:OUT1 R2 1001 10 00 00000000 9800 10 INC R3 0101 00 11 00000000 5300 11 L4:INC R0 0101 00 00 00000000 5000 12 DEC R1 0110 00 01 00000000 6100 13 TEST R1 1010 00 01 00000000 A100 14 JNS L2 0111 00 00 00001011 700B 15 OUT1 R3 1001 11 00 00000000 9C00 表3-1 汇编语言与机器语言代码表 3.6 微程序流程图如下所示:![]() 3.7 微指令的设计 CISC模型机系统使用的微指令采用全水平型微指令,字长位26位,其中微命令字段位18位,P字段2位,后继微地址为6位。 微地址 LOAD LDPC LDAR LIR LREG LPSW RS_B S2 S1 S0 ALU IN OUT RW RCS RD ROM ADR_B P1 P2 uA5~uA0 00 1 1 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 1 1 0 000000 01 1 0 0 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 0 0 000000 02 1 0 0 0 1 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 000000 03 1 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 001011 04 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 000000 05 1 0 0 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 0 0 000000 06 1 0 0 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0 0 000000 07 1 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 0 1 000000 08 1 0 1 0 0 0 1 1 1 0 0 1 1 1 1 1 1 1 0 0 001100 09 1 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 0 0 000000 0A 1 0 0 0 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 000000 0B 1 0 0 0 1 0 1 0 0 0 1 1 1 1 0 0 1 1 0 0 000000 0C 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 000000 10 0 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 000000 表 3-2 微指令代码表 4 MAX+plus Ⅱ软件编译仿真测试和结果分析 4.1 嵌入式模型计算机的顶层电路图
![]() 如图4-1中,其中的操作控制器单元crom的内部结构如下图所示 ![]() 如图4-2中寄存器AA的内部结构如下所示,AA的内部是由6个MM构成的。 ![]() 4.2 编译仿真测试和结果分析 通过创建仿真时序图top.scf.,可以实现模型机的功能仿真,从图中可以看出cpu处理数据和数据的具体流向的每一个过程,如下是仿真的输出波形,具体结果和分析如下: ![]() 如图4-4所示,在图4-4中CLK为时钟信号,INBUS[7..0]是输入中线,OUTBUS[7..0]是输出总线,IROUT是操作指令,寄存器R0,寄存器R1,寄存器R2,寄存器R3。 从总线INBUS[7..0]输入的10个数分别为 50H、40H、FCH、10H、23H、FEH、25H、25H、00H、FDH。输出结果为:50H、40H、10H、23H、25H、25H、06H(正整数个数为6)
结果过程分析 ![]()
由图4-5所示,IROUT=2000、IROUT=210A和IROUT=2300时执行MOV指令,将00H送入寄存器R0,将0AH送入寄存器R1,将00H送入寄存器R0。IROUT=1200时执行IN1指令将50H输入寄存器R2;IROUT=8800时执了STO1指令,将R2的内容送到RAM;IROUT=5000时执行了INC指令,R0自加1;IROUT=6100时执行了DEC指令,R1自减1;IROUT=A100时执行了TEST指令,测试R1是否大于零;IROUT=7003时执行了JNS指令(跳转条件是SF=0,ZF=0),由于此时R1自减1之后为08H大于零所以跳转1200执行IN1指令,如此循环了10次,完成10个数据的输入。 ![]()
![]() 由图4-6所示,输入完数据以后,可以看见R1寄存器的值为00,IROUT=7003执行JNS指令不跳转;IROUT=2000、IROUT=210A时执行MOV指令,将00H送入寄存器R0,将0AH送入寄存器R1;IROUT=3200时执行LAD指令,将地址为(R0)的内存的内容送到寄存器R2;IROUT=A200时执行TEST指令,测试(R2)是否大于零;IROUT=700F时执JNS指令,此时(R2)大于零,跳转9800;IROUT=9800时执行OUT1指令输出(R2),在数据输出线OUTBUS[7..0]显示为50。IROUT=5300时执行INC指令,R3自加1;IROUT=5000时执行了INC指令,R0自加1;IROUT=6100时执行了DEC指令,R1自减1;IROUT=A100时执行了TEST指令,测试R1是否大于零;IROUT=700B时执行了JNS指令,跳转到3200执行LAD指令,如此循环测试完10个数。 由图4-7所示,测试的整数是负数FC,IROUT=700F时执JNS指令,此时(R2)小于零不做跳转;IROUT=4011时执行JMP指令,无条件跳转到IROUT=5000执行INC指令,R0自加1。 ![]()
第二组测试的10个数据分别为 FFH、11H、FCH、50H、02H、FEH、0FH、84H、00H、98H。输出结果为:11H、50H、02H、0FH、04H(正整数个数为4)。 经过多次的不同数据测试,结果都与预期的结果相符合,没有出现错误。 附录
代码设计 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_SIGNED.ALL; ENTITY ALU IS PORT ( X:IN STD_LOGIC_VECTOR(7 DOWNTO 0); Y:IN STD_LOGIC_VECTOR(7 DOWNTO 0); S2,S1,S0:IN STD_LOGIC; ALUOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); SF,ZF:OUT STD_LOGIC ); END ALU; ARCHITECTURE A OF ALU IS SIGNAL AA,BB,TEMP:STD_LOGIC_VECTOR(7 DOWNTO0); SIGNAL TEMP1:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS BEGIN
IF(S2='0' AND S1='0' AND S0='0')THEN AA |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |