组成原理实验报告-基于硬布线控制器设计并实现
计算机组成原理 5.5 硬布线控制器..
如何解决?
如何解决?
假设执行过程分5段
如何解决?
例4:流水线中有三类数据相关冲突:写后读相关; 读后写相关;写后写相关。判断以下三组指令各存 在哪种类型的数据相关。
(1) I1: I2: (2) I3: I4: (3) I5: I6:
ADD R1,R2,R3 ; (R2) + (R3)->R1 写后读 SUB R4,R1,R5 ; (R1) - (R5)->R4 STA M(x),R3 ; (R3)->M(x),M(x)存储单元 读后写 ADD R3,R4,R5 ; (R4)+(R5)->R3 MUL R3,R1,R2 ; (R1)×(R2)->R3 写后写 ADD R3,R4,R5 ; (R4) + (R5)->R3
P157,例3,写出控制信号的逻辑表达式
Tx在图中看不出来
总结:两种控制器比较微ຫໍສະໝຸດ 序 硬布线
执行速度 可扩展性 规整性 设计的难易程度 电路复杂程度 应用范围
5.7
流水CPU
一、并行处理技术(阅读) •并行的含义 •时间并行
•空间并行
•时间并行+空间并行
二、流水计算机的系统组成(示例)
5.8 RISC CPU
读P171页 RISC概括的三个基本要素 RISC机器的特征是
小结
流水CPU的设计思想 有哪三种冲突
P175,例5,画时空图
P175,例5,画时空图
W2 W1 乘3 乘2 乘1 加2 加1
取/存
I1:M(A)->R1 I2:(R2)+(R1)->R2 I3:(R3)+(R4)->R3 I4:(R4)*(R5)->R4 I5:M(B)->R6 I6:(R6)*(R7)->R6
计算机组成原理实验报告(硬设)-2016
《计算机组成原理》课程设计报告年级专业班级:完成日期:1. 引言1.1 实验目的1.在掌握传统的、顺序执行的CPU工作原理基础上,理解掌握流水CPU的工作原理;2.掌握流水线的设计思路和方法,尤其是对结构相关、数据相关和控制相关的解决思路;3.理解硬件设计流程,熟悉掌握指令系统的设计方法,并设计简单的指令系统;4.理解和掌握基于VHDL语言和TEC-CA硬件平台设计模型机的方法,并藉此掌握工程设计的思路和方法。
1.2 实验要求1. 基本设计要求参考《16位5级流水无cache实验CPU课程设计实验要求》文档及其VHDL 代码,在理解其思想和方法的基础上,将其改造成8位的5级流水无cache的实验CPU,包括对指令系统、数据通路、各流水段模块、内存模块等方面的改造。
利用VHDL语言编程实现,并在TEC-CA平台上进行仿真测试。
为方便起见,后续16位5级流水无cache实验CPU简记为ExpCPU-16,而8位的则记为ExpCPU-8。
对于内存模块的改造,参考《计算机组成原理》课程综合实验的方法,独立设计一块8位的RAM。
要求测试减法的溢出标志位,如测试127-(-96)或者-127-96的溢出标志位。
2. 额外设计要求时间允许的情况下,进行一些额外的、探索性的改造,可用于加分。
例如,(1)利用TEC-CA平台上的16位RAM来存放8位的指令和数据;(2)实现一条JRS指令,以便在符号标志位S=1时跳转。
需要改写ID段的控制信息,并改写IF段;(3)实现一条CMPJ DR,SR,offset指令,当比较的两个数相等时,跳转到目标地址PC+1+offset;(4)可以探索从外部输入指令,而不是初始化时将指令“写死”在RAM中;(5)此5段流水模块之间,并没有明显地加上流水寄存器,可以考虑在不同模块间加上流水寄存器;(6)探索5段流水带cache的CPU的设计。
各组亦可根据实际情况来做一些创新性的探索,酌情加分。
硬连线控制器设计
硬连线控制器设计模型机硬连线控制器设计一、实验目的(1)融会贯通计算机组成原理与体系结构课程各章教学内容,通过知识的综合运用,加深对CPU个模块工作原理及相互联系的认识;(2)掌握硬连线控制器的设计方法;(3)培养科学研究能力,取得设计和调试的实践经验。
二、实验设备(1)TEC-8实验系统1台(2)Pentium 3 以上的PC 1台(3)双踪示波器1台(4)直流万用表1块(5)逻辑测试笔(在TEC-8实验台上)1支三、设计与调试任务(1)设计一个硬连线控制器,和TEC-8模型计算机的数据通路结合在一起,构成一个完整的CPU,对该CPU要求:●能顾完成控制台操作,包括启动程序运行、读存储器、写存储器、读寄存器、写寄存器。
●能够执行表3.1中的指令,完成规定的指令功能。
表3.1中,XX代表任意值,Rs代表源寄存器号,Rs代表目的寄存器号。
在条件转移指令中,@代表当前PC的值,offset是一个四位的有符号数,第三位是符号位,0代表正数,1代表负数。
注意:@不是当前指令的PC 值,而是当前指令的PC值加1。
表3.1新设计CPU的指令系统●在Quartus||下对硬连线控制器进行编程的编译。
●将编译后的硬连线控制器下载到TEC-8实验台的可编程器件EPM7128S中去,使得EPM7128S成为一个硬连线控制器。
●根据指令系统,编写检测硬连线控制器正确性的测试程序,并用测试程序对硬连线控制器在单微指令方式下进行调试,直到成功。
(2)在调试成功的基础上,整理出设计文件。
1.硬连线控制器逻辑模块图;2.硬连线控制器指令周期流程图;3.硬连线控制器的硬件描述语言源程序;4.测试程序;5.设计说明书;6.调试总结。
四、硬连线控制器逻辑模块图本实验要求设计硬连线控制器,而仍然利用实验台的数据通路和其他模块。
因此我们只需对硬连线控制器部分进行编程就行了。
TEC-8模型计算机电路框图如下图1。
图1 TEC-8模型计算机电路框图从电路框图中可知,硬连线控制器与微程序控制器不同,其产生的控制信号除了受译码器输出信号SWC~SWA、IR7~IR4,节拍电位信号T1~T3,状态条件信号Z、C,以及CLR#的控制外,还受时序发生器产生的节拍脉冲信号W3~W1的控制。
组成原理实验报告-基于硬布线控制器设计并实现
评语: 课中检查完成的题号及题数:课后完成的题号与题数:成绩: 指导教师:实验报告日期:2011-1-12实验名称:基于硬布线控制器设计并实现带中断功能的复杂模型机班级:学号:姓名:一、实验目的:1. 掌握硬布线控制器的组成原理、设计方法;2. 了解硬布线控制器和微程序控制器的各自优缺点;3. 掌握并会设计带中断功能的复杂模型机的硬布线控制器。
二、实验内容:1. 根据带中断功能的复杂模型机的微程序流图,画出状态机描述图;2. 分析每个状态所需的控制信号,产生控制信号表,并用VHDL语言来设计程序,实现状态机描述的功能;3. 用Quartus软件进行编译链接,选择器件,定义管脚,编程下载,然后用CM3P联机测试每一条机器指令的功能。
三、项目要求及分析:实验要求设计带中断功能的复杂模型机的硬布线控制器,可先参照前面带中断处理能力的模型机设计实验画出微程序流程图,参照二进制微代码表设控制信号表。
然后用VHDL语言编程实现,主要注意原P<1>—P<4>的修改,采用分支语句实现。
然后就是连线装载带中断处理能力的模型机微程序检验。
四、具体实现:应包括:状态图、控制信号表、控制引脚图、VHDL程序、机器码验证程序等。
2、控制状态表:INTA/WR/RD/IOM/S3/S2/S1/S0/LDA/LDB/LDR0/LDSP/L0AD/LDAR/LDIR/ALUB/RSB/RDB/RIB/SPB/PCB/LDPC/STI/CLI S0 100000000000100111111010S1 100000000000100111111011S2 100000000000110111110111S3 101000000000101111111011S4 100000000100100101111011S5 100010010010100011111011S6 100000000100100101111011S7 100000100010100011111011S8 101000000000110111111011S9 101100000010100111111011S10 101000000000110111111011S11 100000000000100111111011S12 101000000010100111111011S13 110000000000100110111011S16 110100000000100101111011 S17 101000000010100111111011 S18 110000000000100101111011 S19 100000001000100111101011 S20 100011010001100011111011 S21 100011000001100011111011 S22 100000000000110111101011 S23 101000000010100111111011 S24 100011000001100011111011 S25 100000000000110111101011 S26 101000000000000111111111 S27 100000000000000011111111 S28 101000001000100111111011 S29 101000000000110111111011 S30 101000000000110111111011 S31 101000001000100111111011 S32 101000000000110111111011 S33 000000000000110111101011 S34 110000000000100111110011 S35 100000001000100111101011 S36 100011010001100011111011 S37 000000000000110111111011 S38 101000000000000111111111 S39 101000001000100111111011 S40 100000000100100111011011 S41 100010010000110011111011 S42 100010011000100011111011 S43 101000001000100111111011 S44 100000000100100111110011 S45 100010010000110011111011 S46 100010011000100011111011 S47 100000001000100110111011 S48 100000001000100110111011 S49 100000000000110111110111 S50 100000000000110111110111 S51 100000000010100101111011 S52 100000000000100111111011 S53 100000000000110111110111 S54 100000000000100111111001 S55 100000000000100111111010 S56 100000000000110111101011 S57 100000001000100111101011 S58 1000000010001001111010114、VHDL程序:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY CONTROLLER ISPORT(RESET : IN STD_LOGIC;T1 : IN STD_LOGIC;INTR : IN STD_LOGIC;INS : IN STD_LOGIC_VECTOR(7 DOWNTO 0);CTRL : OUT STD_LOGIC_VECTOR(23 DOWNTO 0));END CONTROLLER;ARCHITECTURE CONTROLLER_ARCH OF CONTROLLER ISTYPE STA TE IS (S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15,S16,S17,S18,S19,S20,S21,S22,S23,S24,S25,S26,S27,S28,S29,S30,S31,S32,S33,S34,S35, S36,S37,S38,S39,S40,S41,S42,S43,S44,S45,S46,S47,S48,S49,S50,S51,S52,S53,S54, S55,S56,S57,S58,S59,S60,S61,S62);SIGNAL CUFSM: STATE;--CTRL:INTA,WR,RD,IOM,S3,S2,S1,S0,LDA,LDB,LDRI,LDSP,LOAD,LDAR,LDIR,ALU_B,RS_B,RD_B,RI_B,SP_B,PC _B,LDPC,STI,CLIBEGINPROCESS (T1,RESET,INTR,INS)BEGINIF RESET = '0' THENCTRL <= "100000000000100111111010"; --CLICUFSM <= S0;ELSIF T1'EVENT AND T1 = '1' THENCASE CUFSM ISWHEN S0 =>CTRL <= "100000000000100111111011"; --中断判断CUFSM <= S1;WHEN S1 =>IF INTR='1' THENCTRL <= "000000000000110111101011"; --R0->BUS,BUS->ACUFSM <= S33;ELSE CTRL <= "100000000000110111110111";CUFSM <= S2;END IF;WHEN S33=>CTRL <= "110000000000100111110011";CUFSM <= S34;WHEN S34=>CTRL <= "100000001000100111101011";CUFSM <= S35;WHEN S35=>CTRL <= "100011010001100011111011";CUFSM <= S36;WHEN S36=>CUFSM <= S37;WHEN S37=>CTRL <= "101000000000000111111111";CUFSM <= S38;WHEN S38=>CTRL <= "100000000000110111110111";CUFSM <= S2;WHEN S2=>CTRL <= "101000000000101111111011";CUFSM <= S3;WHEN S3 =>IF INS(7 downto 4) = "0000" THEN --ADD INSCTRL <= "100000001000100110111011";CUFSM <= S47;ELSIF INS(7 downto 4) = "0001" THEN --AND INS CTRL <= "100000001000100110111011";CUFSM <= S48;ELSIF INS(7 downto 4) = "0010" THEN -- IN INS CTRL <= "100000000000110111110111";CUFSM <= S49;ELSIF INS(7 downto 4) = "0011" THEN --OUT INS CTRL <= "100000000000110111110111";CUFSM <= S50;ELSIF INS(7 downto 4) = "0100" THEN -- MOV INS CTRL <= "100000000010100101111011";CUFSM <= S51;ELSIF INS(7 downto 4) = "0101" THEN -- HLT INS CTRL <= "100000000000100111111011";CUFSM <= S52;ELSIF INS(7 downto 4) = "0110" THEN -- LDI INS CTRL <= "100000000000110111110111";CUFSM <= S53;ELSIF INS(7 downto 4)= "0111" THEN -- STI INSCUFSM <= S54;ELSIF INS(7 downto 4) = "1000" THEN -- CLI INSCTRL <= "100000000000100111111010";CUFSM <= S55;ELSIF INS(7 downto 4) = "1001" THEN -- PUSH INSCTRL <= "100000000000110111101011";CUFSM <= S56;ELSIF INS(7 downto 4) = "1010" THEN -- POP INSCTRL <= "100000001000100111101011";CUFSM <= S57;ELSIF INS(7 downto 4) = "1011" THEN -- INET INSCTRL <= "100000001000100111101011";CUFSM <= S58;ELSIF INS(7 downto 6) = "11" AND INS(3 downto 2) = "00" THEN -- 直接INS CTRL <= "100000000000110111110111";CUFSM <= S59;ELSIF INS(7 downto 6) = "11" AND INS(3 downto 2) = "01" THEN -- 间接INS CTRL <= "100000000000110111110111";CUFSM <= S60;ELSIF INS(7 downto 6) = "11" AND INS(3 downto 2) = "10" THEN -- 变址INS CTRL <= "100000000000110111110111";CUFSM <= S61;ELSIF INS(7 downto 6) = "11" AND INS(3 downto 2) = "11" THEN -- 相对INS CTRL <= "100000000000110111110111";CUFSM <= S62;END IF;WHEN S47=>CTRL <= "100000000100100101111011";CUFSM <= S4;WHEN S4=>CTRL <= "100010010010100011111011";CUFSM <= S5;WHEN S5=>CTRL <= "100000000000100111111011";WHEN S48=>CTRL <= "100000000100100101111011";CUFSM <= S6;WHEN S6 =>CTRL <= "100000100010100011111011";CUFSM <= S7;WHEN S7=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S49=>CTRL <= "101000000000110111111011";CUFSM <= S8;WHEN S8=>CTRL <= "101100000010100111111011";CUFSM <= S9;WHEN S9=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S50=>CTRL <= "101000000000110111111011";CUFSM <= S10;WHEN S10=>CTRL <= "110100000000100101111011";CUFSM <= S16;WHEN S16=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S51=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S52=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S53=>CUFSM <= S17;WHEN S17=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S54=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S55=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S56=>CTRL <= "110000000000100101111011";CUFSM <= S18;WHEN S18=>CTRL <= "100000001000100111101011";CUFSM <= S19;WHEN S19=>CTRL <= "100011010001100011111011";CUFSM <= S20;WHEN S20=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S57=>CTRL <= "100011000001100011111011";CUFSM <= S21;WHEN S21=>CTRL <= "100000000000110111101011";CUFSM <= S22;WHEN S22=>CTRL <= "101000000010100111111011";CUFSM <= S23;WHEN S23=>CTRL <= "100000000000100111111011";CUFSM <= S1;CTRL <= "100011000001100011111011";CUFSM <= S24;WHEN S24=>CTRL <= "100000000000110111101011";CUFSM <= S25;WHEN S25=>CTRL <= "101000000000000111111111";CUFSM <= S26;WHEN S26=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S59=>CTRL <= "101000001000100111111011";CUFSM <= S28;WHEN S28=>CTRL <= "101000000000110111111011";CUFSM <= S29;WHEN S60=>CTRL <= "101000000000110111111011";CUFSM <= S30;WHEN S30=>CTRL <= "101000001000100111111011";CUFSM <= S31;WHEN S31=>CTRL <= "101000000000110111111011";CUFSM <= S32;WHEN S61 =>CTRL <= "101000001000100111111011";CUFSM <= S39;WHEN S39 =>CTRL <= "100000000100100111011011";CUFSM <= S40;WHEN S40 =>CTRL <= "100010010000110011111011";WHEN S41 =>CTRL <= "100010011000100011111011";CUFSM <= S42;WHEN S62 =>CTRL <= "101000001000100111111011";CUFSM <= S43;WHEN S43 =>CTRL <= "100000000100100111110011";CUFSM <= S44;WHEN S44 =>CTRL <= "100010010000110011111011";CUFSM <= S45;WHEN S45 =>CTRL <= "100010011000100011111011";CUFSM <= S46;WHEN S29=>IF INS(7 downto 4) = "1100" THENCTRL <= "101000000010100111111011";CUFSM <= S12;ELSIF INS(7 downto 4) = "1101" THENCTRL <= "110000000000100110111011";CUFSM <= S13;ELSIF INS(7 downto 4) = "1110" THENCTRL <= "100000000000000011111111";CUFSM <= S14;ELSIF INS(7 downto 4) = "1111" THENCTRL <= "100000000000100111111011";CUFSM <= S15;END IF;WHEN S32=>IF INS(7 downto 4) = "1100" THENCTRL <= "101000000010100111111011";CUFSM <= S12;ELSIF INS(7 downto 4) = "1101" THENCTRL <= "110000000000100110111011";CUFSM <= S13;ELSIF INS(7 downto 4) = "1110" THENCTRL <= "100000000000000011111111";CUFSM <= S14;ELSIF INS(7 downto 4) = "1111" THENCTRL <= "100000000000100111111011";CUFSM <= S15;END IF;WHEN S42 =>IF INS(7 downto 4) = "1100" THENCTRL <= "101000000010100111111011";CUFSM <= S12;ELSIF INS(7 downto 4) = "1101" THENCTRL <= "110000000000100110111011";CUFSM <= S13;ELSIF INS(7 downto 4) = "1110" THENCTRL <= "100000000000000011111111";CUFSM <= S14;ELSIF INS(7 downto 4) = "1111" THENCTRL <= "100000000000100111111011";CUFSM <= S15;END IF;WHEN S46 =>IF INS(7 downto 4) = "1100" THENCTRL <= "101000000010100111111011";CUFSM <= S12;ELSIF INS(7 downto 4) = "1101" THENCTRL <= "110000000000100110111011";CUFSM <= S13;ELSIF INS(7 downto 4) = "1110" THENCTRL <= "100000000000000011111111";CUFSM <= S14;ELSIF INS(7 downto 4) = "1111" THENCTRL <= "100000000000100111111011";CUFSM <= S15;END IF;WHEN S12=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;WHEN S13=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;WHEN S14=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;WHEN S15=>IF INS = "00000000" THENCTRL <= "100000000000100111111011";CUFSM <= S11;ELSIF INS = "10000000" THENCTRL <= "100000000000000011111111";CUFSM <= S27;END IF;WHEN S11=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;WHEN S27=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;END CASE;END IF;END PROCESS;END CONTROLLER_ARCH ;5、机器码验证程序:$P 00 60 ; LDI R0,13H 将立即数13装入R0$P 01 13$P 02 30 ; OUT C0H,R0 将R0中的内容写入端口C0中,即写$P 03 C0 ; ICW1,边沿触发,单片模式,需要ICW4 $P 04 60 ; LDI R0,30H 将立即数30装入R0$P 05 30$P 06 30 ; OUT C1H,R0 将R0中的内容写入端口C1中,即写$P 07 C1 ; ICW2,中断向量为30-37$P 08 60 ; LDI R0,03H 将立即数03装入R0$P 09 03$P 0A 30 ; OUT C1H,R0 将R0中的内容写入端口C1中,即写$P 0B C1 ; ICW4,非缓冲,86模式,自动EOI$P 0C 60 ; LDI R0,FEH 将立即数FE装入R0$P 0D FE$P 0E 30 ; OUT C1H,R0 将R0中的内容写入端口C1中,即写$P 0F C1 ; OCW1,只允许IR0请求$P 10 63 ; LDI SP,A0H 初始化堆栈指针为A0$P 11 A0$P 12 70 ; STI CPU开中断$P 13 20 ; IN R0,00H 从端口00(IN单元)读入计数初值$P 14 00$P 15 41 ; LOOP:MOV R1,R0 移动数据,并等待中断$P 16 E0 ; JMP LOOP 跳转,并等待中断$P 17 15; 以下为中断服务程序:$P 20 80 ; CLI CPU关中断$P 21 61 ; LDI R1,01H 将立即数01装入R1$P 22 01$P 23 04 ; ADD R0,R1 将R0和R1相加,即计数值加1$P 24 30 ; OUT 40H,R0 将计数值输出到端口40(OUT单元)$P 25 40$P 26 70 ; STI CPU开中断$P 27 B0 ; IRET 中断返回$P 30 20 ; IR0的中断入口地址20五、运行结果:初始化8259,然后原地踏步等待中断,每中断一次R0 +1,把R0输出到OUT单元计算了14次,如out 单元:六、所遇问题及解决方法:VHDL语言编程主要实现各个分支,这里要参照流程图,细心不出错后面实现就比较简单了。
计算机组成原理实验 硬布线控制器
山东大学计算机组成原理课程设计实验报告
运算器结构如下图所示。R0、R1、R2 均为 D 触发器组成的八位寄存器,在打入 脉冲 CPRi 的作用下,接收数据输入端提供的信息送入 Ri 中。
μIR23-16 为微指令寄存器的高八位,可定义为操作数。进位信号 C0、打入脉冲 CPR0、CPR1、CPR2、M、S0、S1、S2、S3 均由微指令寄存器的 μIR8 和 μIR7--μIR0 产生。
算术逻辑运算单元 ALU 的设计
该部分中算术逻辑运算单元用两片 74LS181 芯片按如下图所示结构实现八位 组间串行进位运算器。
74LS181 功能表如下图所示。
5
计算机一班 鸿武 QQ:2420430689(2 号)
ALU 的实现电路图如下。
实验调试
将设计完成的电路图下载到 FPGA 中。按照前面所给的 74LS181 功能表编写 微指令,并写入到 ROM 中,微指令从 0 地址单元开始存放。
微程序控制的存储器读写系统设计............................................... 7 设计目的................................................................. 7 设计要求................................................................. 7 结构与信号索引........................................................... 8 微指令格式及微指令编制................................................... 8
微程序控制的运算器设计详细电路图 ........................................ 22 微程序控制的存储器读写系统设计详细电路图 ................................ 24 微程序设计模型机详细电路图.............................................. 25 硬布线控制的模型机详细电路图............................................ 34
计算机组成原理课程设计—硬布线控制器的设计与实现.
硬布线控制器的设计与调试教学目的、任务与实验设备教学目的熟练掌握实验5和硬布线控制器的组成原理与应用。
复习和应用数据通路及逻辑表达式。
学习运用ISP(在系统编程)技术进行设计和调试的基本步骤和方法,熟悉集成开发软件中设计调试工具的使用,体会ISP技术相对于传统开发技术的优点。
教学任务按给定的数据格式和指令系统,在所提供的器件范围内,设计一台硬布线控制器控制的模型计算机。
根据设计图纸,在通用实验台上进行组装,并调试成功。
在组装调试成功的基础上,整理出设计图纸和其他文件。
TEC-4计算机组成原理实验系统一台直流万用表一只集成电路建议使用ISP芯片(一片ispLSI1032)。
采用ISP器件,则需要一台PC 机运行设计自动化软件(例如ispEXPERT)作设计、编程和下载使用。
总体设计思路(描述指令系统,给数据通路)采用与模型计算机相同的指令系统,即12条机器指令。
实验设计中采用该指令系统的子集:去掉中断指令后的3条机器指令,只保留9条指令。
采用的数据通路和微程序控制器方案相同。
·数据通路图和数据通路控制信号DBUS图4 数据通路总体图控制器的设计思路硬布线控制器能够实现控制功能,关键在于它的组合逻辑译码电路。
译码电路的任务就是将一系列有关指令、时序等的输入信号,转化为一个个控制信号,输出到各执行部件中。
根据硬布线控制器的基本原理,针对每个控制信号S,可以列出它的译码函数S = f( Im, Mi, Tk, Bj )其中Im是机器指令操作码译码器的输出信号,Mi是节拍信号发生器的节拍信号,Tk是时序信号发生器的时序信号,Bj是状态条件判断信号。
在TEC—4计算机组成原理实验系统中,因为时序信号Tk(T1—T4)已经直接输送给数据通路,所以译码电路不需Tk作为输入。
又因为机器指令系统比较简单,操作码只有4位,不需要专门的操作码译码器,因此Im直接就是操作码,即指令寄存器的IR4—IR7信号。
Mi的来源就是时序模块的节拍信号,例如W4—W1。
计算机组成原理实验报告_6
计算机组成原理实习报告本学期我们开设了计算机组成原理这门课, 主要学习计算机的主要部件以及这些部件组成的原理和如何运行。
除了平时的课堂学习, 我们还有实验课帮助我们更好的了解这门课程。
用于我们实验的机器是TEC-XP, 它是由清华大学计算机系和清华大学科教仪器厂联合研制的适用于计算机组成原理课程的实验系统, 主要用于计算机组成原理和数字电路等的硬件教学实验, 同时还支持监控程序、汇编语言程序设计、BASIC高级语言程序设计等软件方面的教学实验。
它的功能设计和实现技术, 都紧紧地围绕着对课程教学内容的覆盖程度和所能完成的教学实验项目的质量与水平来进行安排。
其突出特点是硬、软件基本配置比较完整, 能覆盖相关课程主要教学内容, 支持的教学实验项目多且水平高。
其组成和实现的功能如图1所示。
图1.硬件实现的实际计算机系统图一.微程序实验步骤1.接通教学机电源。
2.将教学机左下方的5个拨动开关置为11010(单步、手动置指令、微程序、联机、16 位)。
3.按一下“RESET”按键。
4.通过16 位的数据开关SWH、SWL置入指令操作码。
5.在单步方式下, 通过指示灯观察各类基本指令的微码。
(1) 选择基本指令的A组指令中的ADD指令, 观察其节拍流程1) 置拨动开关SW=00000000 00000001;(表示指令ADD R0, R1 )2) 按RESET按键;指示灯Microp亮(只要选择微程序, 该灯在指令执行过程中一直亮),其它灯全灭;3) 按START按键;指示灯CI3~0、SCC3~0显示1110 0000, 微址和下址的指示灯全灭;(本拍完成公共操作0→PC.DI#=0)4) 按START按键;指示灯CI3~0、SCC3~0显示1110 0000, 微址指示灯显示0000 0001, 下址的指示灯全灭;(本拍完成公共操作PC→AR、PC+1→PC)5) 按START按键;指示灯CI3~0、SCC3~0显示1110 0000, 微址指示灯显示0000 0010, 下址的指示灯全灭;(本拍完成公共操作MEM→IR)6) 以上三步为公共操作, 其它指令同;7) 按START按键;指示灯CI3~0、SCC3~0显示0010 0000, 微址指示灯显示0000 0011, 下址的指示灯显示0000 0100;(本拍完成/MAP操作功能)8) 按START按键;指示灯CI3~0、SCC3~0显示0011 0000, 微址指示灯显示0000 0100, 下址的指示灯显示0011 0000 (本拍执行ADD指令, DR←DR+SR 操作)。
计算机组成实验报告
一、实验目的1. 理解计算机组成原理的基本概念和结构。
2. 掌握计算机各主要部件(如CPU、存储器、总线等)的工作原理。
3. 熟悉计算机指令系统的基本知识。
4. 通过实验加深对计算机组成原理的理解。
二、实验环境1. 实验平台:EL-JY-II型计算机组成原理实验系统2. 实验软件:计算机组成原理实验软件3. 实验设备:计算机组成原理实验箱三、实验内容1. CPU数据通路实验(1)实验目的:了解CPU的数据通路结构,掌握各逻辑部件的功能及数据流动方向。
(2)实验步骤:1. 组装CPU数据通路,包括ALU、程序计数器PC、主存M、主存数据寄存器MDR、主存地址寄存器MAR、指令寄存器IR、通用寄存器R0-R3、暂存器C和D等。
2. 指示数据流动方向,确保各部件正确连接。
3. 验证数据通路功能,观察数据流动过程。
(3)实验结果:成功组装CPU数据通路,实现数据正确流动。
2. 指令周期实验(1)实验目的:掌握典型指令的指令周期,了解指令执行过程。
(2)实验步骤:1. 画出“MOV R0, R1”、“LAD R1, (R2)”、“ADD R1, R2”、“STO R2,(R3)”等指令的指令周期方框图。
2. 分析指令执行过程,理解各阶段功能。
(3)实验结果:成功画出指令周期方框图,并理解指令执行过程。
3. 硬布线控制器与微程序控制器实验(1)实验目的:了解硬布线控制器和微程序控制器的工作原理及区别。
(2)实验步骤:1. 比较硬布线控制器和微程序控制器的结构及工作原理。
2. 分析两种控制器的优缺点。
(3)实验结果:理解硬布线控制器和微程序控制器的工作原理及区别。
4. 流水线CPU实验(1)实验目的:掌握流水线CPU的工作原理,分析流水线各过程段。
(2)实验步骤:1. 分析指令流水线的取值、译码、执行、访存、写回寄存器五个过程段。
2. 画出流水处理的时空图,计算流水线的实际吞吐率和加速比。
(3)实验结果:成功分析指令流水线各过程段,并计算流水线性能指标。
硬布线控制器实验心得
硬布线控制器实验心得
在进行硬布线控制器实验的过程中,我深入了解了硬布线控制器的设计原理和工作方式。
这个实验让我对数字电路设计有了更直观的认识,也让我对控制器设计中的关键因素有了更深入的理解。
实验过程中,我学到了如何根据系统的需求和性能指标,设计并优化硬布线控制器。
这其中涉及到了逻辑门电路的选择、时序控制、数据路径设计等多个方面。
我意识到,硬布线控制器的设计不仅仅是电路设计,更是系统设计和工程能力的综合体现。
此外,我也体验到了团队合作的力量。
在实验中,我和团队成员一起讨论、设计和优化控制器,这让我深刻体会到了团队协作的重要性。
每个人都有自己的专长和视角,通过集思广益,我们能够更好地解决问题,实现更好的设计。
回顾这次实验,我认为我在硬布线控制器设计方面有了实质性的进步。
我不仅掌握了相关的知识和技能,更培养了系统思维和工程实践能力。
这次实验也让我认识到,学习数字电路设计不能仅仅停留在理论层面,更需要通过实践来加深理解和提高能力。
对于未来的学习和工作,我将更加注重理论与实践的结合。
我会继续深入学习数字电路设计的理论和方法,同时通过更多的实践项目来锻炼自己的工程实践能力。
我相信,通过不断地学习和实践,我能够在数字电路设计领域取得更大的进步。
硬布线控制器设计与调试 课程设计..
设计题目:硬布线控制器设计与调试课程名称:计算机组成原理课程设计任课教师:黄岚班级:计算机141学号:1408010112姓名:目录一、课程设计简述: (3)1.教学目的: (3)2.课设任务: (3)3.实验设备简介: (3)3.1、TEC4-A计算机组成原理实验系统[1] (3)3.2、万用表 (5)3.3、PC机 (5)二、总体设计思路: (5)1.指令系统: (5)2.数据通路: (6)3.硬布线控制器的设计原理: (7)三、设计与调试方案: (7)1.设计步骤: (7)1.1.根据数据通路得出指令周期流程图 (7)1.2.根据指令流程图将微信号的输出条件列出: (10)1.3.根据微信号的输出条件写用ABEL语言表示的布尔表达式: (11)2.调试步骤: (14)四、验证性实验: (14)1.课程设计要求的基础实验: (14)预置寄存器及存储单元内容: (14)程序代码: (14)执行结果: (15)2.自备的检验性实验: (15)预置寄存器及存储单元内容: (15)程序代码: (15)执行结果: (15)五、课程设计中遇到的问题及体会: (16)参考文献: (16)硬布线控制器的设计与调试课程设计报告一、课程设计简述:1.教学目的:1)融会贯通计算机组成原理课程和计算机系统结构课程的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识,特别是对硬布线控制器的认识。
2)学习运用ISP(在系统编程)技术进行设计和调试的基本步骤和方法,熟悉集成开发软件中设计调试工具的使用,体会ISP技术相对于传统开发技术的优点。
3)培养科学研究的独立工作能力,取得工程设计与组装调试的实践经验。
2.课设任务:1)按给定的数据格式和指令系统,在所提供的器件范围内,设计一台硬布线控制器控制的模型计算机。
2)根据设计图纸,在通用实验台上进行组装,并调试成功。
3)在组装调试成功的基础上,整理出设计图纸和其他文件,包括:A.总框图(数据通路图);B.硬布线控制器逻辑模块图;C.模块ABEL语言源程序(如果有的话);D.硬布线控制流程图;E.元件排列图;F.设计说明书;G.调试小结。
硬布线控制器
硬布线控制器计算机组成原理实验课常规型硬布线控制器的设计与调试科目:计算机组成原理指导教师:实验人:实验时间:实验背景硬布线控制器是早期设计计算机的一种方法。
这种方法是把控制部件看作为产生专门固定时序控制信号的逻辑电路,二次逻辑电路以示用最少元件和取得最高操作速度为设计目标。
一旦控制部件构成后,除非重新设计和物理上对它重新布线,否则要想增加新的控制功计算机组成原理实验课能是不可能的。
硬布线控制器是计算机中最复杂的逻辑部件之一,由于其结构上的缺陷使得对它进行设计和调试非常复杂且代价很大。
正因为如此,硬布线控制器被微程序控制器所取代。
但是随着新一代机器及VLSI技术的发展,硬布线逻辑设计思想又得到了重视。
设计要求针对TEC-4实验台利用isp__芯片设计一个硬布线控制器,本控制器可以执行五条控制台指令:PR,KRD,KWE,KLD,KRR以及九条机器指令:ADD,SUB,MUL,AND,STA,LDA,JMP, JC,STP。
实验目的融会贯通计算机组成原理课程和计算机系统结构课程的内容,通过知识的综合运用,加深对计算机系统各模块的工作原理及相互联系的认识,特别是对硬联线控制器的认识。
学习运用ISP技术进行设计和调试的基本步骤和方法,熟悉集成开发软件中设计,模拟调试工具的使用,体会ISP技术相对于传统开发技术的优点。
培养科学研究的独立工作能力,取得工程设计与组装调试的实践经验。
实验设备TEC-4计算机组成原理实验系统一台双踪示波器一台逻辑测试笔一只isp__芯片一个Lattice公司的IspExpert软件实验准备时序信号发生器:由晶体振荡器产生MF信号(频率1MHz),同时产生T1,T2,T3,T4,W1,W2,W3,W4时序信号,关系如下图。
其中W1,W2,W3,W4用于硬布线控制器的节拍信号计算机组成原理实验课实验台上自选器件实验区提供有Isp__芯片及下载插座,可以从PC机上编程下载DB,DP,DZ:DP=1时,计算机处于单拍工作方式,按一次QD发送一组时序信号T1,T2,T3,T4;DB=1时,计算机处于单步方式,按一次QD 发送一组W1,W2,W3,W4时序脉冲,同时如果执行过程当中遇到TJ指令,将停在当前节拍脉冲的T4时刻。
计组实验报告
计算机组成原理课程设计报告实验名称:硬布线控制器的设计学院:计算机学院班级:2010211301组员:张宇明,郭逊,谌惠民,廉鸿一目录本报告包括以下内容:1. 数据通路图及其说明.............................P42. 硬布线控制器逻辑模块图及设计...................P53. 硬布线控制器指令周期流程图及设计...............P84. 控制模块VHDL语言源程序/原理图(包含说明和注释)..................................................P95. 测试波形图(以WRM为例)........................P156. 控制模块原理图.................................P167. 设计说明书.....................................P178. 设计与调试小结.................................P20 8. 本组成员实验心得...............................P21数据通路图说明:数据通路是将双端口存储器模块和双端口通用寄存器模块连接在一起形成的。
双端口通用寄存器(RF)由一个ispLSI1016实现,功能相当于四个八位通用寄存器,用于保存参与运算的数据,运算后的结果也要送到RF中保存。
双端口寄存器堆模块的控制信号中,RS1、RS0用于选择从右端口读出的通用寄存器,RD1、RD0用于选择从左端口读出的通用寄存器。
而WR1、WR0用于选择写入的通用寄存器。
LDRi是写入控制信号,当LDRi=1时,数据总线DBUS上的数据在T3写入由WR1、WR0指定的通用寄存器。
左右端口分别与操作数暂存器DR1和DR2相连,RF的右端口通过三态门连接到数据总线DBUS上,因而RF中的数据可以直接通过右端口送到DBUS上。
实验07 硬布线控制器实验
实验七硬布线控制器实验一、实验目的1、通过实验学习利用VHDL语言进行有限状态机的设计。
2、通过实验了解硬布线控制器的基本工作原理。
二、实验原理1、硬布线控制器本质上是一种由门电路和触发器构成的复杂树形网络,它将输入逻辑信号转换成一组输出逻辑信号,即控制信号。
硬布线控制器的输入信号有:指令寄存器的输出、时序信号和运算结果标志状态信号等;输出的信号就是各个部件需要的各种微操作信号。
2、硬布线控制器的设计思想是:在硬布线控制器中,操作控制器发出的各种控制信号是时间因素和空间因素的函数。
各个操作定时的控制构成了操作控制信号的时间特征,而各种不同部件的操作所需要的不同操作信号则构成了操作控制信号的空间特征。
硬布线控制器就是时间信号和操作信号的组合,产生具有定时特点的控制信号。
3、本实验中用到的机器指令如下:图1 设计指令格式4、根据指令要求,得出用时钟进行驱动的状态机描述,即得出其有限状态机,如图2所示。
S0:空操作,系统复位后的状态S1:PC->AR,PC+1S2:MEM->BUS,BUS->IRS3:R0->BUS,BUS->AS4:R0->BUS,BUS->BS5:A+B->BUS,BUS->R0S6:IN->BUS,BUS->R0S7:R0->BUS,BUS->OUTS8:空操作S9:PC->AR,PC+1S10:MEM->BUS,BUS->PC图2 有限状态机描述三、实验步骤1、建立一个Quartus II工程命名为:Con,并在工程中新建一个VHD文件,与工程同名:Con.vhd2、利用VHDL语言设计了控制器的有限状态机。
其代码如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY CONTROLLER ISPORT(RESET : IN STD_LOGIC;T1 : IN STD_LOGIC;INS : IN STD_LOGIC_VECTOR(7 DOWNTO 0);CTRL : OUT STD_LOGIC_VECTOR(16 DOWNTO 0));END CONTROLLER;ARCHITECTURE CONTROLLER_ARCH OF CONTROLLER ISTYPE STATE IS (S10, S9, S8, S7, S6, S5, S4, S3, S2, S1, S0);SIGNAL CUFSM: STA TE;--CTRL:WR,RD,IOM,S3,S2,S1,S0,LDA,LDB,LOAD,LDAR,LDIR,ALU_B,R0_B,LDR0,PC_B,LDPC BEGINPROCESS (T1, RESET, INS)BEGINIF RESET = '0' THENCTRL <= "00000000010011010"; --NOPCUFSM <= S0;ELSIF T1'EVENT AND T1 = '1' THENCASE CUFSM ISWHEN S0 =>CTRL <= "00000000011011001"; --PC->AR,PC+1CUFSM <= S1;WHEN S1 =>CTRL <= "01000000010111010"; --MEM->BUS,BUS->IRCUFSM <= S2;WHEN S2 =>IF INS = "00000000" THEN --ADD INSCTRL <= "00000001010010010"; --R0->BUS,BUS->ACUFSM <= S3;ELSIF INS = "00100000" THEN -- IN INSCTRL <= "01100000010011110"; --IN->BUS,BUS->R0CUFSM <= S6;ELSIF INS = "00110000" THEN -- OUT INSCTRL <= "10100000010010010"; --R0->BUS,BUS->OUTCUFSM <= S7;ELSIF INS = "01010000" THEN -- HLT INSCTRL <= "00000000010011010"; --NOPCUFSM <= S8;ELSIF INS = "11100000" THEN -- JMP INSCTRL <= "00000000011011001"; --PC->AR,PC+1CUFSM <= S9;ELSE -- INV ALID INSCTRL <= "00000000011011001"; --PC->AR,PC+1CUFSM <= S1;END IF;WHEN S3 =>CTRL <= "00000000110010010"; --R0->BUS,BUS->BCUFSM <= S4;WHEN S4 =>CTRL <= "00010010010001110"; --A+B->BUS,BUS->R0CUFSM <= S5;WHEN S5 =>CTRL <= "00000000011011001"; --PC->AR,PC+1CUFSM <= S1;WHEN S6 =>CTRL <= "00000000011011001"; --PC->AR,PC+1CUFSM <= S1;WHEN S7 =>CTRL <= "00000000011011001"; --PC->AR,PC+1CUFSM <= S1;WHEN S8 =>CTRL <= "00000000010011010"; --NOPCUFSM <= S8;WHEN S9 =>CTRL <= "01000000000011011"; --MEM->BUS,BUS->PCCUFSM <= S10;WHEN S10 =>CTRL <= "00000000011011001"; --PC->AR,PC+1CUFSM <= S1;END CASE;END IF;END PROCESS;END CONTROLLER_ARCH ;3、对工程已经编译,将生成的Con.sof文件进行JTAG下载就可以了。
硬件设计和布局实验报告
硬件设计和布局实验报告一、实验目的本实验旨在通过硬件设计和布局的实践操作,加深对硬件设计原理的理解,掌握硬件设计和布局的基本方法和技能,提高实际操作能力。
二、实验设备1. 电脑2. Arduino 开发板3. 传感器模块4. 电路连接线5. LED 灯三、实验内容1. 搭建硬件连接结构:首先将 Arduino 开发板连接到电脑上,然后根据实验要求将传感器模块、LED 灯等硬件设备与 Arduino 开发板进行连接。
2. 硬件布局设计:根据实验要求设计合理的硬件布局,确保各个硬件设备之间的连接紧凑而稳固,避免因布局不当而导致硬件连接出现问题。
3. 硬件调试测试:完成硬件连接后,需进行硬件的调试测试,确保传感器模块能够正常采集数据,LED 灯能够正常发光等功能正常运行。
1. 将 Arduino 开发板连接到电脑上,打开 Arduino IDE 编写硬件控制程序。
2. 按照实验要求将传感器模块与 Arduino 开发板进行连接,并通过程序控制传感器模块采集数据。
3. 连接 LED 灯并根据实验要求控制其亮灭。
4. 完成硬件布局设计,保证硬件设备连接紧密,布局合理。
5. 进行硬件调试测试,确保硬件设备运行正常。
6. 实验结束,整理实验报告及实验数据。
五、实验结果与分析通过本次实验,我成功实现了硬件设计和布局的要求,所有硬件设备正常连接并能够按照程序正常运行。
通过对传感器模块采集数据和控制 LED 灯亮灭的实验操作,加深了对硬件设计原理的理解,提高了实际操作能力。
六、实验总结本次硬件设计和布局实验,让我深刻体会到了硬件设计与软件编程相辅相成,两者缺一不可。
只有掌握了硬件设计和布局的基本方法和技能,才能更好地进行硬件的调试测试和应用开发。
同时,通过实验的重复练习,我逐渐提高了实际操作的能力,对硬件设计有了更深入的认识。
通过本次实验,我发现硬件设计和布局是硬件开发过程中至关重要的一环,只有合理的硬件设计和布局才能确保硬件设备的正常运行。
计算机组成原理 实验三 硬布线控制器实验
实验三硬布线控制器实验一、实验目的1. 通过多种方式,查看教学计算机指令的执行步骤、运行结果、各组控制信号在每一个执行步骤中的状态、指令之间的衔接等有关内容。
2. 熟悉教学计算机的指令格式、指令编码、寻址方式和指令功能等内容。
3. 熟悉教学计算机的总体组成和各部件的运行原理,理解控制器部件在计算机整机中的关键作用。
4. 理解和熟悉指令执行步骤的划分方案。
5. 熟悉教学计算机的硬布线控制器各控制命令的控制功能。
二、实验要求1.实验之前要认真预习,写出预习报告,包括操作步骤,实验过程所用数据和运行结果等。
2.实验过程中,要仔细进行,防止损坏设备,分析可能的各种现象,判断结果是否正确,记录运行结果。
3. 实验之后,认真写出实验报告,包括对遇到的各种现象的分析,实验步骤和实验结果,实验心得体会与收获。
三、实验内容1. 将5个拨动开关置为11101(单节拍、指令来自开关、组合逻辑、16位、联机工作方式),按一下RESET。
在单节拍方式下,每按一次START键,执行一个节拍的功能。
此时教学机反复执行这一条指令,对照指令执行流程图,看节拍发生器的状态输出,能够最方便的查看不同类型的指令的执行步骤的变化与连接关系。
此时无须关心指令的执行功能,因为此时指令得不到正确的操作数据和地址。
2. 使用手拨开关SWH和SWL输入16位指令操作码。
注意:如果是双字指令,则只能拨入高16位,此时运算结果不正确,可忽略。
拍。
例如:使用手拨开关SWH和SWL输入MVRD指令的操作码88H(为B组指令),先按RESET键,再依次按START键,看到节拍发生器的状态输出为:0000-0010-0110-0100。
操作序列1:请把ADD、PUSH、LDRA、CALA指令通过开关送给控制器,利用教学机把各自节拍流程找出来,并写在下表中。
操作序列2:请自行从A、B、C、D四组中各选择若干条指令通过开关送给控制器,利用教学机把各自节拍流程找出来,并写在下表中,表格行数可自行增加。
硬布线控制器的设计
课 程 设 计课程设计任务书 2015~2016学年第 1 学期学生姓名: 张祥专业班级: 计科二班指导教师: 杨斐 工作部门: 计算机学院一、课程设计题目 硬布线控制器的设计二、课程设计内容(含技术指标)1.利用QUARTUS 软件设计一个小型CPU 中的硬布线控制器。
总体框图参考下图:操作控制信号格式:执行单元....总体框图如下:(不必设计)教 学 院 计算机学院课程名称 计算机组成原理课程设计题 目 硬布线控制器的设计专 业 计算机科学与技术班 级 二班 姓 名 同组人员 指导教师 杨 斐 2015 年 1 月 5 日该CPU的指令系统包含8条机器指令,分别为ADD、SUB、INC 、AND、OR 、2. 写出每一个操作控制信号的逻辑代数表达式,化简并设计电路。
3. 每输入一条机器指令代码打入IR中,由硬布线控制器得到14位操作控制信号,在发光二极管上显示每一位的值。
三、进度安排1.2015年12月14日,课题讲解,布置任务2.2015年12月15-17日,分析、讨论、进行各子模块的设计设计3.2015年12月18-24日,完成各模块联调,进行测试4.2015年12月25日,成果验收,进行答辩四、基本要求1.能够熟练掌握计算机中硬布线控制器的工作原理及特点;2.掌握硬件描述语言VHDL及原理图设计方法;3.熟练掌握Quartus II软件平台;4.各小组按模块分工,每人独立完成自己负责的模块;5.合作完成最终的硬件下载及调试;6.独立撰写符合要求的课程设计报告。
目录一、概述 ........................................................... 错误!未定义书签。
1.1课程设计的目的 .................................... 错误!未定义书签。
1.2课程设计的要求 .................................... 错误!未定义书签。
计算机系统结构实习报告
目录1.实习的目的和任务 (1)2.实习规定 (1)2.1任务规定 (1)2.2课程规定 (1)3.实习地点 (1)4.重要仪器设备(实验用的软硬件环境) (2)5.实习内容 (2)5.1硬布线控制器的设计原理 (2)5.2用CPLD 器件实现硬布线控制器 (2)5.3实验原理 (3)5.4安装软件 (4)5.5实验环节 (8)6.问题讨论与分析 (13)7.结论 (14)参考文献 (14)基于硬布线控制器的基本模型机设计1.实习的目的和任务通过实习进一步理解微型计算机系统的设计及工作原理,熟悉模型机的硬布线,基本 RISC 解决器构成,流水线微程序模型机的设计,掌握完毕某些有关程序的编制、运行和调试工作。
掌本次实习内容重要是掌握硬布线控制器的设计原理,掌握如何使用大规模可编程器件完毕硬布线控制器的设计,理解硬布线模型机的工作原理及设计办法。
通过下载程序到 CPLD 芯片上对所设计的硬布线模型进行验证。
2.实习规定2.1任务规定(1)按照实习规定完毕有关程序的编制;(2)认真调试程序,完毕实习任务;(3)完毕实习报告2.2课程规定(1)理解 CPLD 的原理及其硬布线设计模型的原理(2)根据设计好的硬布线设计模型连接好连线图,并检查好线路;(3)将完毕的有关程序加载到 CPLD 芯片上;(4)通过变化输入单元的值和控制单元的状态变化,和时钟周期的变化来验证明验成果3.实习地点田家炳楼 4074.重要仪器设备(实验用的软硬件环境)硬件:XP 系统计算机,ZYE1603B 计算机构成原理及系统构造实验箱一台,排线若干。
软件:QUARTUSII 软件,MAX+plus II10.25.实习内容5.1硬布线控制器的设计原理计算机控制器有两种实现办法:1、硬布线控制器(也称组合逻辑控制器)2、微程序控制器。
设计硬布线控制器是根据实现各指令功效所需控制命令的对应逻辑条件及时序,来构成各个控制命令的逻辑体现式,然后由多个不同的逻辑电路来实现它,构成逻辑控制部件。
TEC-XP+硬布线控制器的设计和实现(北京石油化工学院)
课程设计项目名称:TEC-XP+硬布线控制器的设计和实现课程名称:计算机组成原理课程设计班级:计G191第二组姓名:王XX2019322111丁 XX2019322111邵XX20193220111教师:马莉魏战红信息工程学院计算机系一、设计目的1、理解计算机硬布线控制器功能和组成。
2、理解计算机各类典型指令的执行流程。
3、学习组合逻辑控制器的设计过程、实现方法和相关技术。
二、设计内容自行设计三条扩展指令,设计能够实现TEC-XP+组合逻辑控制器基本指令和扩展指令的ABEL语言的程序,对其进行能够编译,并将.jed类型的结果文件下载到CPLD芯片,编写扩展指令的测试程序,测试扩展指令的功能。
三、设计步骤1.设计本组的扩展指令的指令功能、指令格式、指令编码;2.分析每条指令执行步骤并设计每一步的执行功能,画出每条指令执行流程框图;3.设计每条指令各步骤的控制信号,填写扩展指令的控制信号真值表,有意识地体会这些信号的控制作用;4.将扩展指令的控制信号真值表添加到基本指令的ABEL语言的程序,对其进行编译,并将.jed类型的结果文件下载到MACH芯片,之后运行TEC-XP+系统;5.设计扩展指令的测试程序,通过运行测试程序检查执行结果的正确性,来初步判断设计是否正确;如果有问题,查出错误并改正,继续调试,直到完全正确。
6.扩展指令汇总参考附录二四、扩展指令程序1.SBB(1)功能:带入CF进行减运算指令汇编语句:SBB DR,SR指令完整格式:01101100 DRSR (2)节拍图图1-1(3)SBB控制器控制信号信息设计表1-1(4)SBB 控制信号的真值表:表1-2(程序实现见附录三)(5)程序流程图: 图1-2(6)测试程序: ①有借位:MVRD R0,0001 MVRD R1,0002 SUB R0,R1SBB R0,R1RET②无借位:MVRD R0,0002MVRD R1,0001SUB R0,R1SBB R0,R1RET(7)测试过程:①有借位:给R0,R1赋值1,2,借用普通减法赋给R0新值(R0-R1→R0),产生借位,此处C为1,结果为FFFC则正确②无借位:给R0,R1赋值2,1,借用普通减法赋给R0新值(R0-R1→R0),不产生借位,此处C为0,结果为0000则正确2.JRNS(1)功能:S=0时跳转到ADR,ADR=原PC值+offset 指令汇编语句:JRNS ADR指令完整格式:01100101 OFFSET(2)节拍图图2-1(3)JRNS控制器控制信号信息设计表2-1(4)JRNS控制信号的真值表:表2-2(程序实现见附录三)(5)程序流程图:图2-2(6)测试程序:①无跳转MVRDR0,1001MVRDR1,0001SUBR0,R1JRNSMVRDR2,0000RETMVRDR2,0001RET②有跳转MVRDR0,0001MVRDR1,1001SUBR0,R1JRNSMVRDR2,0000RETMVRDR2,0001RET(7)测试过程①有跳转:S=0结果为正,跳转。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
评语: 课中检查完成的题号及题数:课后完成的题号与题数:成绩: 指导教师:实验报告日期:2011-1-12实验名称:基于硬布线控制器设计并实现带中断功能的复杂模型机班级:学号:姓名:一、实验目的:1. 掌握硬布线控制器的组成原理、设计方法;2. 了解硬布线控制器和微程序控制器的各自优缺点;3. 掌握并会设计带中断功能的复杂模型机的硬布线控制器。
二、实验内容:1. 根据带中断功能的复杂模型机的微程序流图,画出状态机描述图;2. 分析每个状态所需的控制信号,产生控制信号表,并用VHDL语言来设计程序,实现状态机描述的功能;3. 用Quartus软件进行编译链接,选择器件,定义管脚,编程下载,然后用CM3P联机测试每一条机器指令的功能。
三、项目要求及分析:实验要求设计带中断功能的复杂模型机的硬布线控制器,可先参照前面带中断处理能力的模型机设计实验画出微程序流程图,参照二进制微代码表设控制信号表。
然后用VHDL语言编程实现,主要注意原P<1>—P<4>的修改,采用分支语句实现。
然后就是连线装载带中断处理能力的模型机微程序检验。
四、具体实现:应包括:状态图、控制信号表、控制引脚图、VHDL程序、机器码验证程序等。
2、控制状态表:INTA/WR/RD/IOM/S3/S2/S1/S0/LDA/LDB/LDR0/LDSP/L0AD/LDAR/LDIR/ALUB/RSB/RDB/RIB/SPB/PCB/LDPC/STI/CLI S0 100000000000100111111010S1 100000000000100111111011S2 100000000000110111110111S3 101000000000101111111011S4 100000000100100101111011S5 100010010010100011111011S6 100000000100100101111011S7 100000100010100011111011S8 101000000000110111111011S9 101100000010100111111011S10 101000000000110111111011S11 100000000000100111111011S12 101000000010100111111011S13 110000000000100110111011S16 110100000000100101111011 S17 101000000010100111111011 S18 110000000000100101111011 S19 100000001000100111101011 S20 100011010001100011111011 S21 100011000001100011111011 S22 100000000000110111101011 S23 101000000010100111111011 S24 100011000001100011111011 S25 100000000000110111101011 S26 101000000000000111111111 S27 100000000000000011111111 S28 101000001000100111111011 S29 101000000000110111111011 S30 101000000000110111111011 S31 101000001000100111111011 S32 101000000000110111111011 S33 000000000000110111101011 S34 110000000000100111110011 S35 100000001000100111101011 S36 100011010001100011111011 S37 000000000000110111111011 S38 101000000000000111111111 S39 101000001000100111111011 S40 100000000100100111011011 S41 100010010000110011111011 S42 100010011000100011111011 S43 101000001000100111111011 S44 100000000100100111110011 S45 100010010000110011111011 S46 100010011000100011111011 S47 100000001000100110111011 S48 100000001000100110111011 S49 100000000000110111110111 S50 100000000000110111110111 S51 100000000010100101111011 S52 100000000000100111111011 S53 100000000000110111110111 S54 100000000000100111111001 S55 100000000000100111111010 S56 100000000000110111101011 S57 100000001000100111101011 S58 1000000010001001111010114、VHDL程序:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY CONTROLLER ISPORT(RESET : IN STD_LOGIC;T1 : IN STD_LOGIC;INTR : IN STD_LOGIC;INS : IN STD_LOGIC_VECTOR(7 DOWNTO 0);CTRL : OUT STD_LOGIC_VECTOR(23 DOWNTO 0));END CONTROLLER;ARCHITECTURE CONTROLLER_ARCH OF CONTROLLER ISTYPE STA TE IS (S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15,S16,S17,S18,S19,S20,S21,S22,S23,S24,S25,S26,S27,S28,S29,S30,S31,S32,S33,S34,S35, S36,S37,S38,S39,S40,S41,S42,S43,S44,S45,S46,S47,S48,S49,S50,S51,S52,S53,S54, S55,S56,S57,S58,S59,S60,S61,S62);SIGNAL CUFSM: STATE;--CTRL:INTA,WR,RD,IOM,S3,S2,S1,S0,LDA,LDB,LDRI,LDSP,LOAD,LDAR,LDIR,ALU_B,RS_B,RD_B,RI_B,SP_B,PC _B,LDPC,STI,CLIBEGINPROCESS (T1,RESET,INTR,INS)BEGINIF RESET = '0' THENCTRL <= "100000000000100111111010"; --CLICUFSM <= S0;ELSIF T1'EVENT AND T1 = '1' THENCASE CUFSM ISWHEN S0 =>CTRL <= "100000000000100111111011"; --中断判断CUFSM <= S1;WHEN S1 =>IF INTR='1' THENCTRL <= "000000000000110111101011"; --R0->BUS,BUS->ACUFSM <= S33;ELSE CTRL <= "100000000000110111110111";CUFSM <= S2;END IF;WHEN S33=>CTRL <= "110000000000100111110011";CUFSM <= S34;WHEN S34=>CTRL <= "100000001000100111101011";CUFSM <= S35;WHEN S35=>CTRL <= "100011010001100011111011";CUFSM <= S36;WHEN S36=>CUFSM <= S37;WHEN S37=>CTRL <= "101000000000000111111111";CUFSM <= S38;WHEN S38=>CTRL <= "100000000000110111110111";CUFSM <= S2;WHEN S2=>CTRL <= "101000000000101111111011";CUFSM <= S3;WHEN S3 =>IF INS(7 downto 4) = "0000" THEN --ADD INSCTRL <= "100000001000100110111011";CUFSM <= S47;ELSIF INS(7 downto 4) = "0001" THEN --AND INS CTRL <= "100000001000100110111011";CUFSM <= S48;ELSIF INS(7 downto 4) = "0010" THEN -- IN INS CTRL <= "100000000000110111110111";CUFSM <= S49;ELSIF INS(7 downto 4) = "0011" THEN --OUT INS CTRL <= "100000000000110111110111";CUFSM <= S50;ELSIF INS(7 downto 4) = "0100" THEN -- MOV INS CTRL <= "100000000010100101111011";CUFSM <= S51;ELSIF INS(7 downto 4) = "0101" THEN -- HLT INS CTRL <= "100000000000100111111011";CUFSM <= S52;ELSIF INS(7 downto 4) = "0110" THEN -- LDI INS CTRL <= "100000000000110111110111";CUFSM <= S53;ELSIF INS(7 downto 4)= "0111" THEN -- STI INSCUFSM <= S54;ELSIF INS(7 downto 4) = "1000" THEN -- CLI INSCTRL <= "100000000000100111111010";CUFSM <= S55;ELSIF INS(7 downto 4) = "1001" THEN -- PUSH INSCTRL <= "100000000000110111101011";CUFSM <= S56;ELSIF INS(7 downto 4) = "1010" THEN -- POP INSCTRL <= "100000001000100111101011";CUFSM <= S57;ELSIF INS(7 downto 4) = "1011" THEN -- INET INSCTRL <= "100000001000100111101011";CUFSM <= S58;ELSIF INS(7 downto 6) = "11" AND INS(3 downto 2) = "00" THEN -- 直接INS CTRL <= "100000000000110111110111";CUFSM <= S59;ELSIF INS(7 downto 6) = "11" AND INS(3 downto 2) = "01" THEN -- 间接INS CTRL <= "100000000000110111110111";CUFSM <= S60;ELSIF INS(7 downto 6) = "11" AND INS(3 downto 2) = "10" THEN -- 变址INS CTRL <= "100000000000110111110111";CUFSM <= S61;ELSIF INS(7 downto 6) = "11" AND INS(3 downto 2) = "11" THEN -- 相对INS CTRL <= "100000000000110111110111";CUFSM <= S62;END IF;WHEN S47=>CTRL <= "100000000100100101111011";CUFSM <= S4;WHEN S4=>CTRL <= "100010010010100011111011";CUFSM <= S5;WHEN S5=>CTRL <= "100000000000100111111011";WHEN S48=>CTRL <= "100000000100100101111011";CUFSM <= S6;WHEN S6 =>CTRL <= "100000100010100011111011";CUFSM <= S7;WHEN S7=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S49=>CTRL <= "101000000000110111111011";CUFSM <= S8;WHEN S8=>CTRL <= "101100000010100111111011";CUFSM <= S9;WHEN S9=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S50=>CTRL <= "101000000000110111111011";CUFSM <= S10;WHEN S10=>CTRL <= "110100000000100101111011";CUFSM <= S16;WHEN S16=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S51=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S52=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S53=>CUFSM <= S17;WHEN S17=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S54=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S55=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S56=>CTRL <= "110000000000100101111011";CUFSM <= S18;WHEN S18=>CTRL <= "100000001000100111101011";CUFSM <= S19;WHEN S19=>CTRL <= "100011010001100011111011";CUFSM <= S20;WHEN S20=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S57=>CTRL <= "100011000001100011111011";CUFSM <= S21;WHEN S21=>CTRL <= "100000000000110111101011";CUFSM <= S22;WHEN S22=>CTRL <= "101000000010100111111011";CUFSM <= S23;WHEN S23=>CTRL <= "100000000000100111111011";CUFSM <= S1;CTRL <= "100011000001100011111011";CUFSM <= S24;WHEN S24=>CTRL <= "100000000000110111101011";CUFSM <= S25;WHEN S25=>CTRL <= "101000000000000111111111";CUFSM <= S26;WHEN S26=>CTRL <= "100000000000100111111011";CUFSM <= S1;WHEN S59=>CTRL <= "101000001000100111111011";CUFSM <= S28;WHEN S28=>CTRL <= "101000000000110111111011";CUFSM <= S29;WHEN S60=>CTRL <= "101000000000110111111011";CUFSM <= S30;WHEN S30=>CTRL <= "101000001000100111111011";CUFSM <= S31;WHEN S31=>CTRL <= "101000000000110111111011";CUFSM <= S32;WHEN S61 =>CTRL <= "101000001000100111111011";CUFSM <= S39;WHEN S39 =>CTRL <= "100000000100100111011011";CUFSM <= S40;WHEN S40 =>CTRL <= "100010010000110011111011";WHEN S41 =>CTRL <= "100010011000100011111011";CUFSM <= S42;WHEN S62 =>CTRL <= "101000001000100111111011";CUFSM <= S43;WHEN S43 =>CTRL <= "100000000100100111110011";CUFSM <= S44;WHEN S44 =>CTRL <= "100010010000110011111011";CUFSM <= S45;WHEN S45 =>CTRL <= "100010011000100011111011";CUFSM <= S46;WHEN S29=>IF INS(7 downto 4) = "1100" THENCTRL <= "101000000010100111111011";CUFSM <= S12;ELSIF INS(7 downto 4) = "1101" THENCTRL <= "110000000000100110111011";CUFSM <= S13;ELSIF INS(7 downto 4) = "1110" THENCTRL <= "100000000000000011111111";CUFSM <= S14;ELSIF INS(7 downto 4) = "1111" THENCTRL <= "100000000000100111111011";CUFSM <= S15;END IF;WHEN S32=>IF INS(7 downto 4) = "1100" THENCTRL <= "101000000010100111111011";CUFSM <= S12;ELSIF INS(7 downto 4) = "1101" THENCTRL <= "110000000000100110111011";CUFSM <= S13;ELSIF INS(7 downto 4) = "1110" THENCTRL <= "100000000000000011111111";CUFSM <= S14;ELSIF INS(7 downto 4) = "1111" THENCTRL <= "100000000000100111111011";CUFSM <= S15;END IF;WHEN S42 =>IF INS(7 downto 4) = "1100" THENCTRL <= "101000000010100111111011";CUFSM <= S12;ELSIF INS(7 downto 4) = "1101" THENCTRL <= "110000000000100110111011";CUFSM <= S13;ELSIF INS(7 downto 4) = "1110" THENCTRL <= "100000000000000011111111";CUFSM <= S14;ELSIF INS(7 downto 4) = "1111" THENCTRL <= "100000000000100111111011";CUFSM <= S15;END IF;WHEN S46 =>IF INS(7 downto 4) = "1100" THENCTRL <= "101000000010100111111011";CUFSM <= S12;ELSIF INS(7 downto 4) = "1101" THENCTRL <= "110000000000100110111011";CUFSM <= S13;ELSIF INS(7 downto 4) = "1110" THENCTRL <= "100000000000000011111111";CUFSM <= S14;ELSIF INS(7 downto 4) = "1111" THENCTRL <= "100000000000100111111011";CUFSM <= S15;END IF;WHEN S12=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;WHEN S13=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;WHEN S14=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;WHEN S15=>IF INS = "00000000" THENCTRL <= "100000000000100111111011";CUFSM <= S11;ELSIF INS = "10000000" THENCTRL <= "100000000000000011111111";CUFSM <= S27;END IF;WHEN S11=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;WHEN S27=>CTRL <= "100000000000100111111011"; --R0->BUS,BUS->BCUFSM <= S1;END CASE;END IF;END PROCESS;END CONTROLLER_ARCH ;5、机器码验证程序:$P 00 60 ; LDI R0,13H 将立即数13装入R0$P 01 13$P 02 30 ; OUT C0H,R0 将R0中的内容写入端口C0中,即写$P 03 C0 ; ICW1,边沿触发,单片模式,需要ICW4 $P 04 60 ; LDI R0,30H 将立即数30装入R0$P 05 30$P 06 30 ; OUT C1H,R0 将R0中的内容写入端口C1中,即写$P 07 C1 ; ICW2,中断向量为30-37$P 08 60 ; LDI R0,03H 将立即数03装入R0$P 09 03$P 0A 30 ; OUT C1H,R0 将R0中的内容写入端口C1中,即写$P 0B C1 ; ICW4,非缓冲,86模式,自动EOI$P 0C 60 ; LDI R0,FEH 将立即数FE装入R0$P 0D FE$P 0E 30 ; OUT C1H,R0 将R0中的内容写入端口C1中,即写$P 0F C1 ; OCW1,只允许IR0请求$P 10 63 ; LDI SP,A0H 初始化堆栈指针为A0$P 11 A0$P 12 70 ; STI CPU开中断$P 13 20 ; IN R0,00H 从端口00(IN单元)读入计数初值$P 14 00$P 15 41 ; LOOP:MOV R1,R0 移动数据,并等待中断$P 16 E0 ; JMP LOOP 跳转,并等待中断$P 17 15; 以下为中断服务程序:$P 20 80 ; CLI CPU关中断$P 21 61 ; LDI R1,01H 将立即数01装入R1$P 22 01$P 23 04 ; ADD R0,R1 将R0和R1相加,即计数值加1$P 24 30 ; OUT 40H,R0 将计数值输出到端口40(OUT单元)$P 25 40$P 26 70 ; STI CPU开中断$P 27 B0 ; IRET 中断返回$P 30 20 ; IR0的中断入口地址20五、运行结果:初始化8259,然后原地踏步等待中断,每中断一次R0 +1,把R0输出到OUT单元计算了14次,如out 单元:六、所遇问题及解决方法:VHDL语言编程主要实现各个分支,这里要参照流程图,细心不出错后面实现就比较简单了。