计算机组成原理大作业 HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】计算机组成原理大作业院(系):物联网工程学院专业: 计算机科学与技术班级:学号:姓名:摘要1.计算机硬件系统:到目前为止,计算机仍沿用由冯.诺依曼首先提出的基于总线的计算机硬件系统。
其基本设计思想为:a.以二进制形式表示指令和数据。
b.程序和数据事先存放在存储器中,计算机在工作时能够高速地从存储器中取出指令加以执行。
c.由运算器、控制器、存储器、输入设备和输出设备等五大部件组成计算机硬件系统。
2.计算机软件系统:所谓软件,就是为了管理、维护计算机以及为完成用户的某种特定任务而编写的各种程序的总和。
计算机的工作就是运行程序,通过逐条的从存储器中取出程序中的指令并执行指令所规定的操作而实现某种特定的功能。
微型计算机的软件包括系统软件和用户(应用)软件。
关键词:计算机系统硬件存储器控制器运算器软件目录摘要 (2)第一章总体设计 (4)问题描述 (4)实验环境 (4)软件介绍 (4)模块介绍 (4)实验目的 (5)实验内容 (5)第二章原理图 (6)第三章管脚分配 (7)第四章微程序设计 (8)1. alu_74181 (8)2. romc (9)第一章总体设计问题描述从两个reg_74244中分别取出两数经过总线,各自分别到达两个寄存器reg_74373,再由两个寄存器到达运算器alu_74181,在运算器里经过运算得出结果,结果再由总线传输进入另外的一个寄存器reg_74373,输出。
实验环境软件介绍ISE的全称为Integrated Software Environment,即“集成软件环境”,是Xilinx公司的硬件设计工具。
它可以完成FPGA开发的全部流程,包括设计输入、仿真、综合、布局布线、生成BIT文件、配置以及在线调试等,功能非常强大。
ISE除了功能完整,使用方便外,它的设计性能也非常好,拿ISE 9.x来说,其设计性能比其他解决方案平均快30%,它集成的时序收敛流程整合了增强性物理综合优化,提供最佳的时钟布局、更好的封装和时序收敛映射,从而获得更高的设计性能。
模块介绍微程序控制器微程序控制器是一种控制器,同组合逻辑控制器相比较,具有规整性、灵活性、可维护性等一系列优点,因而在计算机设计中逐渐取代了早期采用的组合逻辑控制器,并已被广泛地应用。
在计算机系统中,微程序设计技术是利用软件方法来设计硬件的一门技术。
微程序控制的基本思想,就是仿照通常的解题程序的方法,把操作控制信号编成所谓的“微指令”,存放到一个只读存储器里。
当机器运行时,一条又一条地读出这些微指令,从而产生全机所需要的各种操作控制信号,使相应部件执行所规定的操作。
采用微程序控制方式的控制器称为微程序控制器。
所谓微程序控制方式是指微命令不是由组合逻辑电路产生的,而是由微指令译码产生。
一条机器指令往往分成几步执行,将每一步操作所需的若干位命令以代码形式编写在一条微指令中,若干条微指令组成一段微程序,对应一条机器指令。
在设计CPU时,根据指令系统的需要,事先编制好各段微程序,且将它们存入一个专用存储器(称为控制存储器)中。
微程序控制器由指令寄存器IR、程序计数器PC、程序状态字寄存器PSW、时序系统、控制存储器CM、微指令寄存器以及微地址形成电路、微地址寄存器等部件组成。
执行指令时,从控制存储器中找到相应的微程序段,逐次取出微指令,送入微指令寄存器,译码后产生所需微命令,控制各步操作完成。
算术逻辑单元ALU算术逻辑单元ALU集成了各种算术运算和逻辑运算部件的功能,包括加、减、乘、除等数值运算、逻辑运算、移位运算等。
把这些功能集成在一个逻辑部件ALU之中,使得ALU具有算术运算和逻辑运算功能。
这种设计方法可以使得功能比较紧凑,简化对逻辑运算部件和算术运算部件的使用。
同时还能最大限度的复用某些逻辑部件,从而减少逻辑电路的使用。
某些处理器中,将ALU切分为两部分,即算术单元(AU)与逻辑单元(LU)。
某些处理器包含一个以上的AU,如,一个用来进行定点操作,另一个进行浮点操作。
(个人计算机中,浮点操作有时由被称为数字协处理器的浮点单元完成)。
通常而言,ALU具有对处理器控制器、内存及输入输出设备的直接读入读出权限。
输入输出是通过总线进行的。
输入指令包含一个指令字,有时被称为机器指令字,其中包括操作码,单个或多个操作数,有时还会有格式码;操作码指示ALU机要执行什么操作,在此操作中要执行多少个操作数。
比如,两个操作数可以进行比较,也可以进行加法操作。
格式码可与操作码结合,告知这是一个定点还是浮点指令;输出包括存放在存储寄存器中的结果及显示操作是否成功的设置。
如操作失败,则在机器状态字中会有相应的状态显示。
实验目的1. 通过控制器的微程序设计,综合理解计算机组成原理课程的核心知识并进一步建立整机系统的概念。
2. 培养综合实践及独立分析、解决问题的能力。
实验内容整个过程由微程序控制,alu_74181由四位改成八位,而romc则由四位改为11位,它们分别代表:oen1,oen2,w1,w2,w3,gwe1, gwe2, gwe3,oen_n1, oen_n2, oen_n3。
当它们分别在相同时刻有效或无效时,表示一条微指令,则在不同时刻有不同微指令,而这些微指令则组成了实现程序过程的指令,从而实现程序。
第二章原理图第三章管脚分配###------------Atlys switch input----------NET "S[3]" LOC = P12; # Atlys sw4NET "S[2]" LOC = R5; # Atlys sw5NET "S[1]" LOC = T5; # Atlys sw6NET "S[0]" LOC = E4; # Atlys sw7###------------EES261 switch input----------NET "M" LOC = "U11"; #SW20NET " C_n " LOC = "R10"; #SW19NET " rst " LOC = "U10"; #SW18NET " CE" LOC = "R8"; #SW17#NET "Din1[7]" LOC = "M8"; #SW16NET "Din1[6]" LOC = "U8"; #SW15NET "Din1[5]" LOC = "U7"; #SW14NET "Din1[4]" LOC = "N7"; #SW13 #NET "Din1[3]" LOC = "T6"; #SW12 NET "Din1[2]" LOC = "R7"; #SW11 NET "Din1[1]" LOC = "N6"; #SW10 NET "Din1[0]" LOC = "U5"; #SW9 #NET "Din[7]" LOC = "V5"; #SW8 NET "Din[6]" LOC = "P7"; #SW7 NET "Din[5]" LOC = "T7"; #SW6 NET "Din[4]" LOC = "V6"; #SW5 #NET " Din[3]" LOC = "P8"; #SW4 NET " Din[2]" LOC = "V7"; #SW3 NET " Din[1]" LOC = "V8"; #SW2 NET " Din[0]" LOC = "N8"; #SW1###----------EES261 leds output------------NET "Qout<0>" LOC = "U16"; #LED1NET "Qout<1>" LOC = "U15"; #LED2NET "Qout<2>" LOC = "U13"; #LED3NET "Qout<3>" LOC = "M11"; #LED4NET "Qout<4>" LOC = "R11"; #LED5NET "Qout<5>" LOC = "T12"; #LED6NET "Qout<6>" LOC = "N10"; #LED7NET "Qout<7>" LOC = "M10"; #LED8###--------------END----------第四章微程序设计1.alu_74181entity alu_74181_2 isPort ( A : in STD_LOGIC_VECTOR (7 downto 4);B : in STD_LOGIC_VECTOR (7 downto 4);S : in STD_LOGIC_VECTOR (3 downto 0);M : in STD_LOGIC;C_n : in STD_LOGIC;F : out STD_LOGIC_VECTOR (7 downto 4);C_n_plus4 : out STD_LOGIC);end alu_74181_2;architecture Behavioral of alu_74181_2 issignal data_o_logic : STD_LOGIC_VECTOR (3 downto 0);signal data_o_arith : STD_LOGIC_VECTOR (4 downto 0);signal data_sub_tmp : STD_LOGIC_VECTOR (4 downto 0);signal C_n_arith : STD_LOGIC_VECTOR (4 downto 0);beginF <= data_o_logic when M = '1' elsedata_o_arith(3 downto 0);-- carry outC_n_plus4 <= not data_o_arith(4) when M = '0' else '1';C_n_arith <= "0000" & (not C_n);-- 74181 logic operationprocess(A,B,S,M)begincase (S) iswhen "0000" =>data_o_logic <= not A;when "0001" =>data_o_logic <= not (A or B);when "0010" =>data_o_logic <= (not A) and B;when "0011" =>data_o_logic <= (others => '0');when "0100" =>data_o_logic <= not (A and B);when "0101" =>data_o_logic <= not B;when "0110" =>data_o_logic <= (A xor B); when "0111" =>data_o_logic <= A and (not B); when "1000" =>data_o_logic <= (not A) or B; when "1001" =>data_o_logic <= (A xnor B); when "1010" =>data_o_logic <= B;when "1011" =>data_o_logic <= A and B;when "1100" =>data_o_logic <= "0001";when "1101" =>data_o_logic <= A or (not B);when "1110" =>data_o_logic <= A or B;when "1111" =>data_o_logic <= A;when others =>data_o_logic <= (others => '0');end case;end process;end Behavioral;2.romcentity romc isPort ( s0 : in STD_LOGIC;s1 : in STD_LOGIC;s2 : in STD_LOGIC;s3 : in STD_LOGIC;oen1 : out STD_LOGIC;oen2 : out STD_LOGIC;w1 : out STD_LOGIC;w2 : out STD_LOGIC;w3 : out STD_LOGIC;gwe1 : out STD_LOGIC;gwe2 : out STD_LOGIC;gwe3 : out STD_LOGIC;oen_n1 : out STD_LOGIC;oen_n2 : out STD_LOGIC;oen_n3 : out STD_LOGIC);end romc;architecture Behavioral of romc issignal addr : std_logic_vector(3 downto 0); --input signal rdata : std_logic_vector(10 downto 0); --outputbeginaddr <= s3 & s2 & s1 & s0 ;process(addr)begincase (addr) iswhen "0000" => rdata <= "10101000011";when "0001" => rdata <= "10101100110";when "0011" => rdata <= "10101000110";when "0010" => rdata <= "10111001001";when "0110" => rdata <= "10101001001";when "0111" => rdata <= "11000010011";when "1111" => rdata <= "10000010011";when others => rdata <= "00000000000";end case;end process;oen1 <= rdata(0);oen2 <= rdata(1);we1 <= rdata(2);we2 <= rdata(3);gwe1 <= rdata(3);gwe2 <= rdata(3);gwe3 <= rdata(3);oen_1 <= rdata(3);oen_2 <= rdata(3);oen_3 <= rdata(3); end Behavioral;。