计组实验四
13052007_王瑞琦_运算单元ALU的设计及实现

中央民族大学计算机组成原理实验报告运算单元ALU的设计及实现目录一、实验目的 (3)一、实验设备 (3)二、实验要求及内容 (3)三、实验功能概要 (3)四、设计详细描述 (4)5.1 2-4译码器的设计描述 (4)详细设计 (4)功能仿真波形图 (5)封装符号图 (5)功能描述 (5)5.2 三态门的设计描述 (5)详细设计 (5)功能仿真波形图 (6)封装符号图 (6)功能描述 (6)5.3 八位寄存器的设计描述 (6)详细设计 (6)功能仿真波形图 (7)封装符号图 (7)功能描述 (7)5.4 4选1数据选择器的设计描述 (7)详细设计 (7)功能仿真波形图 (8)封装符号图 (8)功能描述 (9)5.5 74181的设计描述 (9)详细设计 (9)功能仿真波形图 (10)封装符号图 (10)功能描述 (10)5.6 运算器的设计描述 (11)详细设计 (11)功能仿真波形图 (12)封装符号图 (13)功能描述 (18)五、实验注意事项 (18)六、实验问题及解决 (19)七、实验总结及感想 (19)一、实验目的1、掌握运算单元ALU分模块、分层次结构化设计的方法;2、理解运算单元ALU的工作原理和过程;3、进一步学习Verilog HDL进行电路设计的方法和技巧;4、进一步学习QuartusⅡ和Modelsim进行电路设计和仿真的方法和技巧。
一、实验设备PC机+ QuartusⅡ 10.0 + FPGA(DE2-115开发板)+TEC-8实验箱二、实验要求及内容1、用Verilog HDL设计ALU所需的各个功能模块,并用modelsim仿真;2、在DE2-115开发板或在TEC-8实验箱上验证;3、将设计的运算器进行封装,用于后续的综合实验三、实验功能概要如图为ALU逻辑功能框图,向R0,R1,R2,R3寄存器写入数据,通过数据选择器选择将数据传到某个端口并进行运算,运算结果由DBUS数据总线传出。
计算机组成原理 微程序控制器实验

深圳大学实验报告课程名称:操作系统实验项目名称:微程序控制器实验学院:计算机与软件学院专业:软件工程指导教师:报告人:学号:班级:实验时间:实验报告提交时间:教务处制一、实验目的:通过看懂教学计算机中已经设计好并正常运行的数条基本指令(例如,ADD、MVRR、OUT、MVRD、JR、RET等指令)的功能、格式和执行流程,然后自己设计几条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确。
其最终要达到的目的是:1.深入理解计算机微程序控制器的功能、组成知识;2.深入地学习计算机各类典型指令的执行流程;3.对指令格式、寻址方式、指令系统、指令分类等建立具体的总体概念;4.学习微程序控制器的设计过程和相关技术。
二、实验要求1.实验之前,应认真准备,写出实验步骤和具体设计内容,否则实验效率会特别低,一次实验时间根本无法完成实验任务,即使基本做对了,也很难说学懂了些什么重要教学内容;2.应在实验前掌握所有控制信号的作用,在脱机运算器实验中,已给出了与运算器有关的控制信号的作用,16 位机微程序控制器用到的控制信号的功能表可参见《技术说明与实验指导》的相关内容。
需要注意的是中断用到了DC23,在T4~T0= 0 0010一拍时DC23为1,其余节拍均为0;3.实验过程中,应认真进行实验操作,既不要因为粗心造成短路等事故而损坏设备,又要仔细思考实验有关内容,提高学习的主动性和创造性,把自己想不太明白的问题通过实验理解清楚,争取最好的实验效果,力求达到教学实验的主要目的;4.实验之后,应认真思考总结,写出实验报告,包括实验步骤和具体实验结果,遇到的主要问题和分析与解决问题的思路。
大家应该认识到,遇到一些问题是好事情,通过分析与解决这些问题,才提高了自己的工作能力,学习到更多的知识。
还未理解清楚,但实验结果正确了就匆忙结束实验,并没有达到教学实验的目的。
实验报告中,还应写出自己的学习心得和切身体会,也可以对教学实验提出新的建议等。
计组任务说明书

*******************实践教学*******************兰州理工大学计算机与通信学院2009年春季学期计算机组成原理课程设计题目:模型机设计-2 专业班级:计算机科学与技术(4)班姓名:罗湘学号: 07240415 指导教师:张聚礼成绩:前言计算机组成原理课程是计算机系很重要的一门专业基础课,从这门课的内容特点看,它属于工程性、技术性和实践性都很强的一门课,因此,在进行课堂教学的同时,必须对实验教学环节给予足够的重视,要有良好的实验环境,能进行反应主要教学内容的、水平确实比较高的实验项目,在深化计算机各功能部件实验的同时,加强对计算机整机硬件系统组成与运行原理有关内容的实验;在教学实验的整个过程中,坚持以硬件知识为主的同时,加深对计算机整机系统中软硬件的联系与配合的认识。
目前,有些单位和院校都研制出一些用于计算机组成原理课程教学实验的系统或装置,也各具特色但基本上都是相对孤立的功能部件的实验,整机硬件方面的实验很难胜任,更不能对计算机系统中硬软件的联系和配合的学习提供足够的帮助。
而DVCC 系列实验计算机系统就是专为计算机组成原理课的授课和教学实验而研制的。
DVCC 系列计算机组成原理实验系统作为较高层次、专用于计算机原理课程教学实验的实验计算机系统具有良好的实验性能和系统的完整性以及可扩展性。
目录摘要 (5)第一章:模型机设计概述 (6)一.设计目的 (6)二.设计任务 (6)三.实验设备与器材 (6)第二章:模型机总体设计 (7)一.模型机的逻辑结构 (7)1.运算器模块 (7)2.寄存器堆模块 (7)3.程序计数器PC (7)4.地址寄存器 (8)5.指令寄存器模块 (8)6.启停和时序电路模块 (8)7.微程序控制器模块电路 (9)8.主存储器单元电路 (9)9.输入输出设备 (9)二.模型机的数据通路 (9)第三章模型机详细设计 (11)一.运算器的设计 (11)二.存储器系统的组成与说明 (11)1.主存储器的组成 (11)2.存储器的原理图 (11)3.存储器输入输出时序 (12)三.微控制器的设计 (13)1.微程序控制电路 (13)2.微指令格式 (13)四.数据格式及指令系统的设计 (14)1.数据格式 (14)2.指令格式 (14)3.指令系统 (15)五.微程序的设计与实现 (16)1.监控软件的设计 (16)2.模型机微程序流程图 (17)3.二进制微代码表 (19)4.微程序的设计 (20)第四章:系统调试 (22)一.连线 (22)二.联机读/写程序 (22)三. 运行程序 (22)四.调试过程的问题及解决 (23)第五章:设计总结 (23)参考文献 (24)致谢 (25)摘要DVCC试验机为学生提供了运算器模块ALU、寄存器堆模块、指令部件模块、内存模块、微程序模块、启停和时序电路模块、控制台控制模块以及扩展模块。
计组课程设计crc

计组课程设计crc一、教学目标本节课的教学目标是使学生掌握CRC(循环冗余检查)的基本原理和计算方法,能够运用CRC检测数据传输中的错误。
具体目标如下:知识目标:1. 了解CRC的概念和作用;2. 掌握CRC的计算方法;3. 理解CRC在数据传输中的应用。
技能目标:1. 能够运用CRC计算器检测数据传输中的错误;2. 能够编写程序实现CRC的计算和验证。
情感态度价值观目标:通过学习CRC,培养学生严谨的科学态度和解决问题的能力,激发学生对计算机科学的兴趣。
二、教学内容本节课的教学内容主要包括CRC的基本原理、计算方法和应用。
具体安排如下:1.介绍CRC的概念和作用,通过实例让学生了解CRC在数据传输中的重要性。
2.讲解CRC的计算方法,包括生成多项式、余数计算和校验码的生成。
3.分析CRC的检错原理,让学生理解CRC如何检测数据传输中的错误。
4.结合实际案例,演示CRC在数据传输中的应用,让学生了解CRC的实际应用场景。
5.通过编程实践,让学生动手实现CRC的计算和验证,巩固所学知识。
三、教学方法为了提高教学效果,本节课将采用多种教学方法相结合的方式进行教学:1.讲授法:讲解CRC的基本原理和计算方法,让学生掌握理论知识。
2.案例分析法:分析实际案例,让学生了解CRC在数据传输中的应用。
3.实验法:让学生动手实践,编写程序实现CRC的计算和验证。
4.讨论法:鼓励学生提问、讨论,解答学生在学习中遇到的问题。
四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源:1.教材:《计算机组成原理》相关章节。
2.参考书:提供相关的学术论文和资料,供学生深入研究。
3.多媒体资料:制作PPT课件,直观展示CRC的计算过程。
4.实验设备:提供计算机实验室,让学生动手实践。
5.在线资源:推荐相关的在线教程和编程实践平台,方便学生自学和练习。
五、教学评估本节课的评估方式将包括以下几个方面,以全面、客观地评价学生的学习成果:1.平时表现:通过观察学生在课堂上的参与程度、提问和回答问题的表现,了解学生的学习状态。
计组课程设计题目参考

计组课程设计题目参考一、课程目标知识目标:1. 学生能理解计算机组成原理的基本概念,掌握计算机硬件的基本组成和功能。
2. 学生能掌握并描述计算机的指令集体系结构,包括CPU的工作原理、寄存器的使用和数据寻址方式。
3. 学生能解释并分析不同类型的存储器层次结构及其性能特点。
4. 学生能阐述输入输出系统的基本原理,了解中断、直接内存访问(DMA)等概念。
技能目标:1. 学生能够运用所学知识,设计简单的计算机硬件组成结构,并对性能进行初步分析。
2. 学生通过案例学习,培养解决计算机组织与体系结构相关问题的能力。
3. 学生能够运用流程图、伪代码等方式,描述计算机硬件执行程序的过程。
情感态度价值观目标:1. 学生通过学习计算机组成原理,培养对计算机科学的兴趣和探究精神,增强创新意识和实践能力。
2. 学生在学习过程中,学会团队合作与交流,培养批判性思维和问题解决能力。
3. 学生能够认识到计算机技术对社会发展的重要性,增强社会责任感和职业道德。
课程性质:本课程为计算机专业基础课程,旨在帮助学生建立扎实的计算机组成原理知识体系。
学生特点:学生处于大学本科阶段,具备一定的计算机基础知识和逻辑思维能力。
教学要求:注重理论与实践相结合,通过案例分析、实验操作等形式,提高学生的实际操作能力和综合运用知识的能力。
同时,关注学生的个体差异,鼓励学生积极参与讨论,促进师生互动。
在教学过程中,将目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 计算机系统概述:介绍计算机系统的基本组成,包括硬件和软件的相互关系,引出计算机组成原理的重要性。
教材章节:第1章 计算机系统概述2. 计算机硬件组成:讲解CPU、存储器、输入输出设备等硬件组件的功能和结构。
教材章节:第2章 计算机硬件组成3. 指令集体系结构:介绍指令集的基本概念,讲解CPU执行指令的过程,包括指令的编码、寄存器、寻址方式等。
教材章节:第3章 指令集体系结构4. 存储器层次结构:分析不同类型的存储器及其性能特点,探讨缓存、虚拟存储器等技术。
关于大二课程——写给北航6系2012级

关于大二课程——写给北航6系2012级作者:刘沅畅大二课程简介10级有学长为我们写了大三选课上课方面的攻略,看了之后自感受益匪浅。
觉得这种传统值得传承,于是将11级上课经验传给12级的同学,希望有所帮助。
不过写的东西都是2012-2013年间的事情,到了2013-2014年间,课程可能会变,人也可能会变,还是顺应变化为宜。
必修课1.计算机组成原理呃,不知道什么原因,你们不上数字逻辑了,直接上计组了。
计组毕竟是考研专业课要考的,而且是硬件方向的,属于过了这个村就没了这个店的课。
你的人生只有一次机会去进行RAM扩展。
需要考的专业课但是老师好像没有换,肖利民老师和刘旭东老师。
我是在肖老师的班上的,肖上课喜欢留课堂作业,交不交和交的作业怎么样对平时成绩都会有影响。
但是大头还是在考试。
考试题量很大,我们今年是9页试卷。
而且肖最后给分很蛋疼。
2.计算机组成实验我们2011级是在小学期上的这个课,连续上了9天。
你们是用后半学期来上,一周一次课。
用到的软件是Quartus II 7.2,一般第一节课会教学一下软件的使用方法,这个软件还是挺捉急的,比如注释不能写中文神马的。
我们的数字逻辑实验是完成了很多小实验,计组实验是完成了一个MIPS CPU,你们课改了,God knows. 我们计组实验是有点名的,无预兆的点了两次。
而且我们7个班分成了三个中班,有三个不同的老师,我侥幸分到了张亮老师,过程没有很惨。
向其他几个班的同学致敬。
考核的方式是平时的随堂检查(完成某个实验给他检查,讲讲实验原理和结果什么的),最后的大作业(CPU),实验报告(我们是电子版的报告,异常的冗长,写完字数应该是20000+,还有配图若干)我靠,你们是不是不用上3.毛概100块钱的毛概,我们是闭卷考试,祝你们好运吧。
我们老师都是马骁毅的,每周150分钟,点名频率还是挺高的,对成绩也挺有影响的。
4.概率统计还是一门数学课,要想得高分还是需要好好学的,我们这届应该考到40就让及格了。
计组实验课程设计
《计算机组成实验C》课程设计适用专业:电子信息类专业专业:计算机科学与技术班级:计科四班学号:2 0 1 2 2 3 7 8姓名:王云龙指导教师:陈红梅实验学期: 2014-2015第1学期西南交通大学信息科学与技术学院简化计算机系统的设计一.实验目的通过学习简单的指令系统及其各指令的操作流程,用VHDL语言实现简单的处理器模块,并通过调用存储器模块,将处理器模块和存储器模块连接形成简化的计算机系统。
二. 实验内容1. 用VHDL语言实现简单的处理器模块。
2. 调用存储器模块设计64×8的存储器模块。
3. 将简单的处理器模块和存储器模块连接形成简单的计算机系统。
4. 将指令序列存入存储器,然后分析指令执行流程。
三. 预习要求:1、学习简单指令集。
2、学习各指令的操作流程。
四. 实验报告1. BLOCK图2.内存文件内存文件中的数据:3. 程序设计LIBRARY ieee;USE ieee.std_logic_1164.ALL;PACKAGE mypack ISCONSTANT idle : std_logic_vector(3 DOWNTO 0) :="0000";CONSTANT load : std_logic_vector(3 DOWNTO 0) :="0001";CONSTANT move : std_logic_vector(3 DOWNTO 0) :="0010";CONSTANT addx : std_logic_vector(3 DOWNTO 0) :="0011";CONSTANT subp : std_logic_vector(3 DOWNTO 0) :="0100";CONSTANT andp : std_logic_vector(3 DOWNTO 0) :="0101";CONSTANT orp : std_logic_vector(3 DOWNTO 0) :="0110";CONSTANT xorp : std_logic_vector(3 DOWNTO 0) :="0111";CONSTANT shrp : std_logic_vector(3 DOWNTO 0) :="1000";CONSTANT shlp : std_logic_vector(3 DOWNTO 0) :="1001";CONSTANT swap : std_logic_vector(3 DOWNTO 0) :="1010";CONSTANT jmp : std_logic_vector(3 DOWNTO 0) :="1011";CONSTANT jz : std_logic_vector(3 DOWNTO 0) :="1100";CONSTANT read : std_logic_vector(3 DOWNTO 0) :="1101";CONSTANT write : std_logic_vector(3 DOWNTO 0) :="1110";CONSTANT stop : std_logic_vector(3 DOWNTO 0) :="1111";END mypack;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE WORK.mypack.ALL;------------------------cpu实体声明--------------------------------- ENTITY cpu ISPORT(reset : IN std_logic; --清零信号低有效clock : IN std_logic; --时钟信号Write_Read: OUT std_logic; --读写信号,'1'为写M_address: OUT std_logic_vector(11 DOWNTO 0); --地址线M_data_in: IN std_logic_vector(7 DOWNTO 0); --数据输入线M_data_out: OUT std_logic_vector(7 DOWNTO 0); --数据输出线overflow: OUT std_logic); --溢出标志END cpu;------------------------cpuRTL级行为描述--------------------------------ARCHITECTURE RTL of cpu ISSIGNAL IR: std_logic_vector(15 DOWNTO 0); --指令寄存器SIGNAL MDR: std_logic_vector(7 DOWNTO 0); --数据寄存器SIGNAL MAR: std_logic_vector(11 DOWNTO 0); --地址寄存器SIGNAL status: integer RANGE 0 TO 4; --状态寄存器SIGNAL PC:std_logic_vector(11 DOWNTO 0); --程序计数器SIGNAL R0,R1,R2,R3: std_logic_vector(7 DOWNTO 0); --通用寄存器SIGNAL A: std_logic_vector(7 DOWNTO 0); --累加寄存器BEGINstatus_change: PROCESS(reset, clock, status )BEGINIF reset = '0' THENstatus <= 0 ;A <= (OTHERS=>'0');MAR <= (OTHERS=>'0');ELSIF clock'EVENT AND clock = '0' THENCASE status ISWHEN 0 =>IF IR(15 DOWNTO 12)/=Stop THENMAR <=pc;END IF;CASE IR(15 DOWNTO 12) ISWHEN shlp|shrp =>CASE IR(11 DOWNTO 10) IS-- Rx to AWHEN"00"=> A<= R0;WHEN"01"=> A<= R1;WHEN"10"=> A<= R2;WHEN OTHERS => A<= R3;END CASE;WHEN Load|Move|addx|subp|andp|orp|xorp|Swap => CASE IR(9 DOWNTO 8) IS-- Ry to AWHEN"00"=> A<=R0;WHEN"01"=> A<=R1;WHEN"10"=> A<=R2;WHEN OTHERS=> A<=R3;END CASE;WHEN OTHERS => NULL;END CASE;status <= 1;WHEN 1 =>CASE IR(15 DOWNTO 12) ISWHEN Stop =>status <=1;WHEN Swap|Jmp|Jz|Read|Write =>status <=2;WHEN OTHERS =>status <=0;END CASE;WHEN 2 =>CASE IR(15 DOWNTO 12) ISWHEN Swap =>status <=0;WHEN Jmp|Write|Read =>MAR <= IR(11 DOWNTO 0);status <= 3;WHEN Jz =>IF R0="00000000"THEN MAR <= IR(11 DOWNTO 0);ELSE MAR <= PC;END IF;status <= 3;WHEN OTHERS =>status <= 3;END CASE;WHEN 3 =>CASE IR(15 DOWNTO 12) ISWHEN Jmp|Jz =>status <=0;WHEN Read|Write =>MAR <= pc;status <=4;WHEN OTHERS =>status <=4;END CASE;WHEN 4 =>status <= 0;END CASE;ELSENULL;END IF;END PROCESS status_change;seq: PROCESS(reset,clock)VARIABLE temp: std_logic_vector(8 DOWNTO 0); --临时变量BEGINIF(reset='0') THEN-- 清零IR <= (OTHERS=>'0');PC <= (OTHERS=>'0');R0 <= (OTHERS=>'0');R1 <= (OTHERS=>'0');R2 <= (OTHERS=>'0');R3 <= (OTHERS=>'0');MDR <= (OTHERS=>'0');ELSIF(clock'event AND clock='1') THENoverflow <= '0';CASE status ISWHEN 0=> --状态0IR <= M_data_in & "00000000"; --取指令PC <= PC+1; --程序计数器加1WHEN 1=> --状态1CASE IR(15 DOWNTO 12) ISWHEN load =>R0<= "0000" & IR(11 DOWNTO 8);WHEN addx => -- Rx:= Rx + A;CASE IR(11 DOWNTO 10) ISWHEN"00"=>temp := (R0(7) & R0(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R0<=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN"01"=>temp :=(R1(7) & R1(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R1<=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN"10"=>temp :=(R2(7) & R2(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R2<=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN OTHERS=>temp :=(R3(7) & R3(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R3<=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN subp => -- Rx:= Rx - A;CASE IR(11 DOWNTO 10) ISWHEN"00"=>temp:=(R0(7) & R0(7 DOWNTO0)) + NOT(A(7) & A(7 DOWNTO0)) + 1;R0<=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN"01"=>temp:=(R1(7) & R1(7 DOWNTO0)) + NOT(A(7) & A(7 DOWNTO0)) + 1;R1<=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN"10"=>temp:=(R2(7) & R2(7 DOWNTO0)) + NOT(A(7) & A(7 DOWNTO0)) + 1;R2<=temp(7 DOWNTO 0);overflow <= temp(8) xor temp(7);WHEN OTHERS=>temp:=(R3(7) & R3(7 DOWNTO0)) + NOT(A(7) & A(7 DOWNTO0)) + 1;R3<=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);END CASE;WHEN move =>CASE IR(11 DOWNTO 10) ISWHEN"00"=> R0<= A;WHEN"01"=> R1<= A;WHEN"10"=> R2<= A;WHEN OTHERS=> R3<= A;END CASE;WHEN shrp =>CASE IR(11 DOWNTO 10) ISWHEN"00"=> R0<= '0' & R0( 7 DOWNTO 1 );WHEN"01"=> R1<= '0' & R1( 7 DOWNTO 1 );WHEN"10"=> R2<= '0' & R2( 7 DOWNTO 1 );WHEN OTHERS=> R3<= '0' & R3( 7 DOWNTO 1 );END CASE;WHEN shlp =>CASE IR(11 DOWNTO 10) ISWHEN"00"=> R0<= R0( 6 DOWNTO 0 ) & '0';WHEN"01"=> R1<= R1( 6 DOWNTO 0 ) & '0';WHEN"10"=> R2<= R2( 6 DOWNTO 0 ) & '0';WHEN OTHERS=> R3<= R3( 6 DOWNTO 0 ) & '0';WHEN andp => --Rx:= Rx AND A;CASE IR(11 DOWNTO 10) ISWHEN"00"=> R0<=R0AND A;WHEN"01"=> R1<=R1AND A;WHEN"10"=> R2<=R2AND A;WHEN OTHERS=> R3<=R3AND A;END CASE;WHEN orp => --Rx:= Rx OR A;CASE IR(11 DOWNTO 10) ISWHEN"00"=> R0<=R0OR A;WHEN"01"=> R1<=R1OR A;WHEN"10"=> R2<=R2OR A;WHEN OTHERS=> R3<=R3OR A;END CASE;WHEN xorp => --Rx:= Rx XOR A;CASE IR(11 DOWNTO 10) ISWHEN"00"=> R0<=R0XOR A;WHEN"01"=> R1<=R1XOR A;WHEN"10"=> R2<=R2XOR A;WHEN OTHERS=> R3<=R3XOR A;END CASE;WHEN Swap => --Swap: Rx to Ry;CASE IR(11 DOWNTO 8) ISWHEN"0100"=> R0<=R1;WHEN"1000"=> R0<=R2;WHEN"1100"=> R0<=R3;WHEN"0001"=> R1<=R0;WHEN"1001"=> R1<=R2;WHEN"1101"=> R1<=R3;WHEN"0010"=> R2<=R0;WHEN"0110"=> R2<=R1;WHEN"1110"=> R2<=R3;WHEN"0111"=> R3<=R1;WHEN"1011"=> R3<=R2;WHEN"0011"=> R3<=R0;WHEN OTHERS=> NULL;END CASE;WHEN OTHERS => NULL;END CASE;WHEN 2=> --状态2 CASE IR(15 DOWNTO 12) ISWHEN Swap=> -- Swap: A to RxCASE IR(11 DOWNTO 10) ISWHEN"00"=> R0<=A;WHEN"01"=> R1<=A;WHEN"10"=> R2<=A;WHEN OTHERS=> R3<=A;END CASE;WHEN Jz|Read =>IR(7 DOWNTO 0)<= M_data_in; -- 取双字节指令的后半部分IF R0/="00000000"THENpc <= pc+1;END IF;WHEN Jmp =>IR(7 DOWNTO 0)<= M_data_in;WHEN Write =>IR(7 DOWNTO 0)<= M_data_in;pc <= pc+1;MDR <= R0;WHEN OTHERS => NULL;END CASE;WHEN 3=> --状态3CASE IR(15 DOWNTO 12) ISWHEN jmp => -- 无条件转移指令PC <= IR(11 DOWNTO 0);WHEN Jz => -- 条件转移指令IF(R0="00000000") thenPC <= IR(11 DOWNTO 0);END IF;WHEN OTHERS => NULL;END CASE;WHEN 4=> --状态4CASE IR(15 DOWNTO 12) ISWHEN Read => R0 <= M_data_in; --读数据WHEN OTHERS=> NULL;END CASE;END CASE;END IF;END process seq;comb: PROCESS (reset, status)BEGINIF (reset = '1' AND status = 3 AND IR(15 DOWNTO 12)= Write ) THEN Write_Read <= '1';ELSEWrite_Read <= '0';END IF;END PROCESS comb;M_address <= MAR;M_data_out <= MDR;END RTL;4.仿真波形图执行过程解释:指令Load,Add,Move,Sub,And,Or,Xor,Shr,Shl的执行需要两个时钟周期,即两个状态0,1;指令Swap的执行需要三个时钟周期,即三个状态0,1,2;指令Jz,Jmp的执行需要4个时钟周期,即四个状态0,1,2,3;指令Read,Write的执行需要5个时钟周期,即状态0,1,2,3,4;(1)刚开始reset信号为0,所有寄存器清零,状态清零,之后reset=1,clock有效,开始取指令并执行;(2)取地址为000H指令:Idle,无操作,pc=pc+1;(3)取地址为001H指令:Load 5,操作为R0=5H,pc=pc+1;(4)取地址为002H指令:Move R1,R0,操作为R1=R0=5H,pc=pc+1;(5)取起始地址为003H指令:Read 01F,操作为R0=(01F)=39H,pc=pc+1;(6)取地址为005H指令:Shl R1,操作为R1=(R1左移一位),操作完成后R1=0AH;(7)取地址为006H指令:Add R0,R1,操作为R0=R0+R1,操作完成后R0=43H;(8)取起始地址为007H指令:Write 01E,操作为(01EH)=R0=43H;(9)取地址为009H指令:Sub R0,R1,操作为R0=R0-R1,操作完成后R0=39H;(10)取地址为00AH指令:Swap R0,R1,操作为R1和R0的值互换,完成后R1=39H,R0=0AH;(11)取地址为00BH指令:OR R0,R1,操作为R0=R0 OR R1,完成后R0=3BH;(12)取地址为00CH指令:Shr R1,操作为R1=(R1右移一位),完成后R1=1CH;(13)取地址为00DH指令:AND R0,R1,操作为R0=R0 AND R1,完成后R0=18H;(14)取地址为00EH指令:Move R2,R0,操作为R2=R0,完成后R2=18H;(15)取地址为00FH指令:Move R3,R1,操作为R3=R1,完成后R3=1CH;(16)取地址为010H指令:XOR R2,R3,操作为R2=R2 XOR R3,完成后R2=04H;(17)取起始地址为011H指令:Read 01E,操作为R0=(01EH)=43H;(18)取起始地址为013H指令:Jz 019,操作为如果R0=00H,则跳转到起始地址为019H的指令开始执行,否则继续执行下一条指令,由于R0=43H,故不跳转,继续执行;(19)取起始地址为015H指令:Read 01D,操作为R0=(01DH)=00H;(20)取起始地址为017H指令:Jmp 013,操作为无条件跳转到起始地址为013H的指令(Jz 019)开始执行;(21)取起始地址为013H指令:Jz 019,由于此时的R0=00H,故跳转到起始地址为019H的指令(Stop)开始执行;(22)取地址为019H指令:Stop,停止执行。
湖南大学计组实验lab2 datalab
4 bitCount 函数 /* * bitCount - returns count of number of 1's in word
* Examples: bitCount(5) = 2, bitCount(7) = 3 * Legal ops: ! ~ & ^ | + << >> * Max ops: 40 * Rating: 4 */ int bitCount(int x) { int tmp=(((0x01<<8|0x01)<<8|0x01)<<8|0x01)<<8|0x01; int val=tmp&x; //检测 x 的 0,8,16,24 位是否为 1 val+=tmp&(x>>1); //检测 x 的 1,9,17,25 位是否为 1 val+=tmp&(x>>2); //... val+=tmp&(x>>3); val+=tmp&(x>>4); val+=tmp&(x>>5); val+=tmp&(x>>6); val+=tmp&(x>>7); //检测 x 的 7,15,23,31 位是否为 1 val+=(val>>16); //将 val 的高 16 位加到低 16 位上 val+=(val>>8); //再将 val 的高 8 位加到低 8 位上 return val&0xff; //保留 val 的最低 byte 信息 为最终结果} 代码思路:检测数据里有多少个 1,如果每一位作检测的话,肯定会超出操作符 限制,所以考虑一次检查多个,那么应该怎样做? 这里考虑一个数 0000 0001 0000 0001 0000 0001 0000 0001,将它与一个数作& 操作,即可判定在这个数的 0,8,16,24 位有多少个 1,接下来,将待检测的数作移 位操作,还可以继续用这种方法检测,将检测后的所有结果累加,每 8 位作为一个单 元,将总数相加,就可以得到我们需要的总的 1 的个数。
计组课程设计crc
计组课程设计crc一、教学目标本课程的教学目标是使学生掌握循环冗余校验(CRC)的基本原理和计算方法,能够运用CRC进行数据完整性校验。
具体目标如下:1.了解CRC的定义和作用。
2.掌握CRC的计算过程和关键步骤。
3.理解CRC在数字通信和数据存储中的应用。
4.能够使用CRC进行数据完整性校验。
5.能够分析CRC的优缺点和适用场景。
情感态度价值观目标:1.培养学生的逻辑思维能力和问题解决能力。
2.培养学生对计算机组成原理的兴趣和好奇心。
二、教学内容本课程的教学内容主要包括CRC的基本原理、计算方法和应用。
具体安排如下:1.引言:介绍CRC的定义、作用和应用场景。
2.CRC的计算原理:讲解CRC的计算过程和关键步骤,包括生成多项式、初始化、计算余数等。
3.CRC的应用:介绍CRC在数字通信和数据存储中的应用实例。
4.CRC的优缺点:分析CRC的优点和缺点,以及适用场景。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法、实验法等。
1.讲授法:通过讲解CRC的基本原理和计算方法,使学生掌握相关知识。
2.讨论法:学生进行小组讨论,探讨CRC的应用场景和优缺点。
3.案例分析法:分析实际案例,让学生了解CRC在实际中的应用。
4.实验法:安排实验课,让学生亲自动手进行CRC计算,加深对知识的理解。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选用权威、实用的教材,如《计算机组成原理》等。
2.参考书:提供相关的参考书籍,以便学生深入理解CRC。
3.多媒体资料:制作PPT、教学视频等多媒体资料,帮助学生更好地理解CRC的计算过程。
4.实验设备:准备计算机、网络设备等实验设备,让学生进行实际操作。
五、教学评估本课程的评估方式将包括平时表现、作业和考试三个部分,以全面客观地评估学生的学习成果。
1.平时表现:通过课堂参与、提问和小组讨论等方式评估学生的学习态度和积极性。
计算机组成原理实验(师大)
。。。
B区 – 处理区
• 总线 • 运算 • 存储 • 微程序
A区 – I/O区
• 芯片控制信号输入 • 数据输入 • 扩展
功能模块
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
此时将总线BUSD0-BUSD7上的启动地址接入程序计数器。 • LOAD = 0, 74LS161的输出端数据置为输入端数据,完成初始化启动地址。 • U 40由PCB’控制,PCB’ = 0时,初始地址输出到内部数据总线上。
程序计数器 PC
• 运行时 – 计数
• LOAD = 1,PC为计数状态,取下条指令或取指令的下一个字节. • U38为计数器低四位,U39为高四位,进位输出信号TC接仅为输入端CET • 运行时 CLR = 1。LDPC =1, T4正跳, PC = PC+1;
自动方式下,由控制CPU提供。
系统控制开பைடு நூலகம்单元
• 系统总清
低电平时总清。 • 手动 (相对于联机) • 主存储器工作状态开关 (读、写、运行) • SWC = 0, SWA = 0, 读主存储器; • SWC = 0, SWA = 1,写存储器; • SWC = 1, SWA = 1, 运行主存储器中的程序。 • 运行方式控制
计算机组成原理实验
曲冠南 2013-2014春季学期
实验机软硬件介绍
• 硬件 • 8位、16位字长兼容 • 总线结构 • 基本功能模块 • 扩展模块 • 控制台 • 软件
• 集成调试软件
• 微程序载入 • 窗口显示程序、微程序、微指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机学院计科专业 2 班学号3112005818姓名黄俊锟协作者___________ 教师评定_____________ 实验题目组合逻辑控制器部件教学实验一、实验目的:通过看懂教学计算机中已经设计好并正常运行的几条典型指令(例如,ADD、MVRR、OUT、MVRD、JRC、RET等指令)的功能、格式和执行流程,然后自己设计几条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确。
其最终要达到的目的是:1.深入理解计算机控制器的功能、组成知识;2.深入地学习计算机各类典型指令的执行流程;3.对指令格式、寻址方式,指令系统、指令分类等建立具体的总体概念;4.学习组合逻辑控制器的设计过程和相关技术。
二、实验设备和器材:TEC-XP16教学计算机;XP系统电脑一台;仿真终端软件pcec。
三、实验说明与原理:控制器设计是学习计算机总体组成和设计的最重要的部分。
要在TEC-XP16教学计算机完成这项实验,必须比较清楚地懂得:1.TEC-XP16教学机的组合逻辑控制器主要由教学机上的MACH器件;2.TEC-XP16教学机已实现29条基本指令;3.应了解监控程序的A命令只支持基本指令,扩展指令应用E命令将指令代码写入到相应的存储单元中;不能用T、P命令单步调试扩展指令,只能用G命令执行扩展指令。
4.要明白TEC-XP16教学机支持的指令格式及指令执行流程分组情况;理解TEC-XP16教学机中已经设计好并正常运行的各类指令的功能、格式和执行流程,也包括控制器设计与实现中的具体线路和控制信号的组成。
5.要明确自己要实现的指令格式、功能、执行流程设计中必须遵从的约束条件。
为了完成自己设计几条指令的的功能、格式和执行流程,并在教学计算机上实现、调试正确的实验内容,具体过程包括:1)确定指令格式和功能,要受教学机已有硬件的约束,应尽量与已实现指令的格式和分类办法保持一致;2)划分指令执行步骤并设计每一步的执行功能,设计节拍状态的取值,应参照已实现指令的处理办法来完成,特别要注意的是,读取指令的节拍只能用原来已实现的,其他节拍的节拍状态也应尽可能地与原用节拍的状态保持一致和相近;3)在指令流程表中填写每一个控制信号的状态值,基本上是个查表填数的过程,应该特别仔细,并有意识地体会这些信号的控制作用;4)在给出的mach的源文件中添加扩展指令的控制信号的逻辑表达式,编译适配后下载到MACH器件中;5)写一个包含你设计的指令的程序,通过运行该程序检查执行结果的正确性,来初步判断你的设计是否正确;如果有问题,通过几种办法查出错误并改正,继续调试,直到完全正确。
四、实验内容:1.完成控制器部件的教学实验,主要内容是由学生自己设计几条指令的的功能,格式和执行流程,并在教学计算机上实现、调试正确。
2.首先是看懂TEC-XP+教学计算机的功能部件组成和线路逻辑关系,然后分析教学计算机中已经设计好并正常运行的几条典型指令(例如,ADD、SHR、OUT、MVRD、JRC、CALA、RET等指令) 的功能、格式和执行流程。
3.设计几条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确。
例如ADC、JRS、JRNS、LDRX、STOR、JMPR等指令,当然也可以设计与实现其它的指令,包括原来已经实现的基本指令(要变换为另外一个指令操作码)或自己确定的指令。
4.单条运行指令,查看指令的功能、格式和执行流程。
先将教学机左下方的5个拨动开关置为111010,再按一下“RESET”按键,然后通过16位的数据开关(SWH、SWL)置入指令,按“START”按键单步送脉冲,通过指示灯观察控制信号的变化。
5.用监控程序的A、E(扩展指令必须用E命令置入)命令编写一段小程序,观察运行结果。
实验时将教学机左下方的5个拨动开关置为00110,运行编写的小程序.观察终端显示的结果,检验设计的指令是否正确。
若与预定结果不符,可查看指令的功能、格式、执行、流程设计的是否正确。
一、实验步骤:1.接通教学机电源。
2.将教学机左下方的6个拨动开关置为111100(单步、手动置指令、组合、联机、16位、MACH)。
3.按一下“RESET”按键。
4.通过16位的数据开关SWH、SWL置入16位的指令操作码。
5.在单步方式下,通过指示灯观察各类基本指令的节拍。
(1)选择基本指令的A组指令中的ADD指令,观察其节拍流程:①置拨动开关SW=00000000 00000001;(表示指令ADD R0,R1)②按RESET按键;节拍指示灯T3~T0显示1000;(本拍在第1次复位后才会执行)③按START按键;节拍指示灯T3~T0显示0000;(以上两拍,为公共节拍)④按START按键;节拍指示灯T3~T0显示0010;(本拍也是公共节拍,将指令编码写入指令寄存器IRH、IRL)⑤按START按键;节拍指示灯T3~T0显示0011;(本拍执行ADD指令,R0←R0+R1操作) (2)选择基本指令的B组指令中的PUSH指令,观察其节拍流程:①置拨动开关SW=00000001 00000001;(表示指令PUSH)②按RESET按键;节拍指示灯T3~T0显示1000;(本拍在第1次复位后才会执行)③按START按键;节拍指示灯T3~T0显示0000;(以上两拍,为公共节拍)④按START按键;节拍指示灯T3~T0显示0010;(本拍也是公共节拍,将指令编码写入指令寄存器IRH、IRL)⑤按START按键;节拍指示灯T3~T0显示0110;(本拍执行PUSH指令的第一步,修改地址寄存器和堆栈的值,即AR,SP←SP-1,使其指向堆栈空间)按START按键;节拍指示灯T3~T0显示0100;(本拍执行PUSH指令的第二步,MEM←SR)可以看到,B组指令的执行除公共节拍外,需两步完成。
(3)选择基本指令的D组指令中的CALA指令,观察其节拍流程:①置拨动开关SW=11001110 0000000;(表示指令CALA)②按RESET按键;节拍指示灯T3~T0显示1000;(本拍在第1次复位后才会执行)③按START按键;节拍指示灯T3~T0显示0000;(以上两拍,为公共节拍)④按START按键;节拍指示灯T3~T0显示0010;(本拍也是公共节拍,将指令编码写入指令寄存器IRH、IRL)⑤按START按键;节拍指示灯T3~T0显示0110;(本拍PC✂AR,PC+1✂PC)⑥按START按键;节拍指示灯T3~T0显示0100;(本拍(AR)✂Q)⑦按START按键;节拍指示灯T3~T0显示0111;(本拍SP-1✂SP、AR)⑧按START按键;节拍指示灯T3~T0显示0101;(本拍PC✂MEM,Q✂PC)可以看到,D组指令CALC除公共节拍外,只需四步完成。
6.单步方式下,通过指示灯观察各类基本指令的控制信号。
(1)选择基本指令的A组指令中的SHR指令,观察其执行过程中控制信号的变化,分析其作用。
①置拨动开关SW=00001011 00010000;(表示指令SHR R1)②先按“RESET”按键,记录节拍及控制信号;再连续按3次“START”按键,每次都要记录节拍及控制信号。
节拍指令编码/MIO REQ /WE A B Sci SSH I8-6 I5-3 I2-0 SSTDC1 DC21000 1 0 0 0101 0101 01 0 011 001 001 000 000 111 0000 1 0 0 0101 0101 01 0 010 000 011 000 000 011 0010 0 0 1 0000 0000 00 0 001 000 000 000 000 001 0011 SHR 000011111 0 0 0000 0001 00 0 101 000 011 101 000 000(2)选择基本指令的B组指令中的JMPA指令,观察其执行过程中控制信号的变化,分析其作用,填到表3的“说明”一栏中。
①置拨动开关SW=10000000 00000000;(表示指令JMPA)②先按“RESET”按键,记录节拍及控制信号;再按“START”按键,每次都要记录节拍及控制信号。
节拍指令编码/MIO REQ /WE A B Sci SSH I8-6 I5-3 I2-0 SSTDC1 DC21000 1 0 0 0101 0101 01 0 011 001 001 000 000 111 0000 1 0 0 0101 0101 01 0 010 000 011 000 000 111 0110 JMPA 100000001 0 0 0101 0101 01 0 010 000 011 000 000 0110100 JMPA 100000000 0 1 0000 0101 00 0 011 000 111 000 000 000 0010 0 0 1 0000 0000 00 0 001 000 000 000 000 001 (3)选择基本指令的D组指令中的CALA指令,观察其执行过程中控制信号的变化,分析其作用,填到表5的“说明”一栏中。
①置拨动开关SW=11001110 00000000;(表示指令CALA)②先按“RESET”按键,记录节拍及控制信号;再按“START”按键,每次都要记录节拍及控制信号。
节拍指令编码/MIO REQ /WE A B Sci SSH I8-6 I5-3 I2-0 SSTDC1 DC21000 1 0 0 0101 0101 01 0 011 001 001 000 000 111 0000 1 0 0 0101 0101 01 0 010 000 011 000 000 011 0010 CALA 110011100 0 1 0000 0000 00 0 001 000 000 000 000 0010110 CALA 110011101 0 0 0101 0101 01 0 010 000 011 000 000 0110100 CALA 110011100 0 1 0000 0000 00 0 000 000 111 000 000 0000111 CALA 110011101 0 0 0000 0100 00 0 011 001 011 000 000 0110101 CALA 110011100 0 0 0101 0101 00 0 010 000 010 000 001 0001)编写ADC并测试运行:1、编写并测试JMPR指令:(1)编写并测试JRS指令1、测试LDRX指令2、测试STRX指令二、实验心得:(1)学习了组合逻辑控制器的功能、组成知识;(2)这一次的实验要记录多组数据,比较繁琐,但更要认真,否则即使是实验出了答案也会有错,影响实验的进行,应进行多次的检验,耐心学习。