1、计算机组成原理课程设计报告计算机组成原理课程设计指导教师: 学生班级: 学生姓名: 学 号: 班内序号: 课设日期:2012/12/172012/12/281、设计目的12、设计要求13、设计方案14、较详细的设计过程25、编程与调试程序方法的介绍196、结果及分析207、收获、体会及建议21一、设计目的 1. 主要掌握微程序控制结构计算机的设计方法,通过对机器指令和相对应微程序的设计,加深对微程序控制器的理解,加深对微程序设计特点的了解,加深对计算机各部件的理解以及对整机结构的理解。 2掌握几种寻址方式的控制执行过程。 3了解多累加器计算机的特点。 4熟悉VHDL语言的编程。2、设计要求1硬
2、件设计,包括运算器、寄存器、寄存器、微程序控制器的VHDL描述。2软件设计,包括指令系统设计及应用程序的设计。3硬件和软件联合调试,利用设计的模型计算机执行应用程序,通过数码管显示结果。 三、设计方案1首先设计整机逻辑框图,并分析各主要部件中所使用的关键器件,彻底理解主要芯片的工作原理。根据设计要求,对实验仪硬件模块进行逻辑剪辑组合,便可设计出该实验计算机的整机逻辑框图。为利于调试,应在逻辑框图上表明各器件的控制信号及必要的输出信号。 2指令系统和指令执行流程设计 指令系统需确定实验计算机的指令系统具体由哪里指令组成,包括哪几种类型指令,指令操作数有哪几种寻址方式,以及指令编码等。 指令执行流
3、程 应根据实验计算机整机逻辑图来设计指令系统中每条指令的执行流程。 一条指令从内存取出到执行完,需要若干个机器周期(节拍)。任何指令的第一个机器周期都是“取指令周期”,或称为公操作周期。而一条指令共需几个机器周期取决于指令在机内实现的复杂程度。 3微操作控制信号和微程序设计 微操作控制信号及其实现方法综合实验计算机指令系统各指令执行流程中所涉及到的微操作控制信号,统计总共需要多少个微控制信号,每个信号的有效性,决定这些信号中哪些由软件(微指令)直接产生,哪些需用硬件实现。 设计微指令格式,微指令由32位组成,设计出每位微操作的定义。 确定微程序控制方式设计任务包括设计各微程序入口地址的形成方法
4、和控存的顺序控制(即下地址形成)方法。4 编写各指令的微程序根据指令流程和微指令格式仔细地逐条填写微指令各码位。为减少填写错误,可边把本条微指令用到的微码(微操作控制信号)按预定的有效性填入,检查无误后,再对本条微指令用不到的微码(微操作控制信号)填入与预定的有效性相反的代码,核对无误后,最后将这32位微码缩写成8位十六进制微指令。4设计接线表要仔细设计接线表,因为它是组装计算机的依据。 为了避免遗漏,应按模块逐个归纳整理,明确各模块中器件各控制信号的处理方法。 对于模块中不用的器件,也应有所处理。4、较详细的设计过程1先熟悉课程设计任务。2实现基本门电路。利用如右图所示软件,启动,建立一个新
5、工程。具体操作步骤,参考第二章 电路生成与下载步骤.ppt最后,我们可以得到如下图。 电路生成结束,再来实现电路的下载。启动桌面图标,选择下载配置,加载下载文件,再实现电路下载。可得下图:3熟练掌握VHDL语言。4用VHDL描述计算机各部件,包括存储器的VHDL描述、寄存器的VHDL描述、运算器的VHDL描述以及总线的VHDL描述。1存储器的VHDL描述 a.存储器的硬件描述图 b.存储器实验过程与信号 首先利用开关S0S7设置一个8位的数据,用于写入内存时使用。 第二步,利用开关S8、S9的组合生成一个4个字节的内存,内存地址如下:地址S9S8000101210311第三步,当S10=0 A
6、ND S11=1时,发出写内存信号,将开关S0S7设置的8位数据写入由开关S8、S9的组合指定的内存地址单元。第四步,当S10=1 AND S11=0时,发出读内存信号,将由开关S8、S9的组合指定的内存地址单元中的数据读出,由发光二极管L9L12显示。 c.存储器的VHDL描述Library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;use IEEE.std_logic_arith.all; entity busv1 is Port ( CI: buffer std_logic_vector(19 dow
7、nto 0); CO: in std_logic_vector(11 downto 0) );end busv1;architecture busv1_behav of busv1 issignal mux:std_logic_vector(1 downto 0);signal WR,RD:std_logic;beginmux = CO(9 downto 8);RD = CO(11);WR = CO(10);CI( 11 downto 0 ) TMP1 := CO(7 downto 0); -写入地址0号 when 01 = TMP2 := CO(7 downto 0); -写入地址1号 wh
8、en 10 = TMP3 := CO(7 downto 0); -写入地址2号 when others = TMP4 := CO(7 downto 0); -写入地址3号 end case; elsif (WR=1 and RD=0) then -读内存 case mux is when 00 = CI(19 downto 12) CI(19 downto 12) CI(19 downto 12) CI(19 downto 12)= TMP4; -读地址3号 end case;end if;end process; end busv1_behav;2寄存器的VHDL描述 a.寄存器的硬件描述图
9、 b.寄存器实验过程与信号首先利用开关S0S7设置一个8位的数据,寄存在74LS244A,使开关S13(U244AOE)为低电平,使寄存在74LS244中的数据向总线输出。第二步,利用S8S10的组合在R0R7中选择一个寄存器,选择表如下:S10S9S8R0000R1001R2010R3011R4100R5101R6110R7111第三步,当WRE(写寄存器)脉冲信号从0变1时,将总线上的数据写入某寄存器。第四步,当RDE(读寄存器)脉冲信号从0变1时,将某寄存器的值输出到74LS244B。 c.计算机部件实验之寄存器的VHDL描述library IEEE;use IEEE.STD_LOGIC
10、_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following lines to use the declarations that are- provided for instantiating Xilinx primitive components.-library UNISIM;-use UNISIM.VComponents.all;entity jicunqi isport( CI: inout std_logic_vector(12 downto 0);
11、CO: in std_logic_vector(14 downto 0);end jicunqi;architecture Behavioral of jicunqi issignal RS:std_logic_vector(2 downto 0);signal R0,R1,R2,R3,R4,R5,R6,R7:std_logic_vector(7 downto 0);signal WRE,RDE,U244AOE,U244BOE:std_logic;signal U244A,U244B:std_logic_vector(7 downto 0);signal DBB,DBX:std_logic_v
12、ector(7 downto 0);constant bz:std_logic_vector:=ZZZZZZZZ;Function sizeIt(a:std_logic;len:integer)return std_logic_vector is variable rep:std_logic_vector(len-1 downto 0); begin for i in reprange loop rep(i):=a;end loop; return rep; end sizeIt; begin-Define three-state ports U244A = CO(7 downto 0); D
13、BX = (SizeIt(U244AOE,8) and U244A) or (SizeIt(U244BOE,8) and U244B); CI(7 downto 0) = DBX when (U244AOE or U244BOE)=1) else bz; DBB = CI(7 downto 0); RS R0R1R2R3R4R5R6R7 U244B U244B U244B U244B U244B U244B U244B U244B = R7; end case;end if; end process; U244BOE = CO(14);U244AOE = CO(13);WRE = CO(11)
14、;RDE = CO(12);CI(12 downto 8) = CO(12 downto 8);end Behavioral;3运算器的VHDL描述a.运算器的硬件描述图 b.运算器实验过程与信号首先利用开关S0S7设置一个8位的数据,寄存在74LS244A,使开关S13(U244AOE)为低电平,使寄存在74LS244中的数据向总线输出。L13反映S13的状态。在总线上的数据可以通过L0L7看到。第二步,把总线上的数据送入74LS377保存,当S14为低电平(U377EN=0)并且S15有一个脉冲信号时从它输出送ALU的A端。第三步,利用开关S0S7设置一个8位的数据,寄存在74LS244A
15、,使开关S13(U244AOE)为低电平,使寄存在74LS244中的数据向总线输出。L13反映S13的状态。在总线上的数据可以通过L0L7看到。第四步,当S16、S17都为1时,控制74LS373从总线接收数据,寄存。当当S16为1、S17为0时,控制74LS373中的数据送ALU的B端。第五步,利用S8S10的组合在8种计算中选择一个进行计算,选择表如下:(L8L10反映S8S10的状态,CIN由开关S11确定,L11反映S11的值)。FFS10S9S8FA + CIN000FA - CIN001FA or FB010FA and FB011FA + FB + CIN100FA - FB -
16、 CIN101FA * FB110FA xor FB111计算结束后,运算结果F送74LS244B,L15反映向高位的进位COUT。第六步,当S12为0时(L12反映S11的值),将74LS244B中的值送总线,一次运算结束。 c.计算机部件实验之运算器的VHDL描述library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following lines to use the declarations that are
17、- provided for instantiating Xilinx primitive components.-library UNISIM;-use UNISIM.VComponents.all;entity yunsuan isport( -DB:inout std_logic_vector(7 downto 0); CI: inout std_logic_vector(15 downto 0); CO: in std_logic_vector(17 downto 0);end yunsuan;architecture Behavioral of yunsuan issignal U3
18、77Q:std_logic_vector(7 downto 0);signal U373Q,U244A,U244B:std_logic_vector(7 downto 0);signal DBB,DBX:std_logic_vector(7 downto 0);signal U377CLK,U377EN,U373GT,U373OE,U244AOE,U244BOE: std_logic;signal FA,FB,FF:std_logic_vector(8 downto 0);signal S:std_logic_vector(2 downto 0); signal CIN,COUT:std_lo
19、gic;constant bz:std_logic_vector:=ZZZZZZZZ; - sizeIt replicates a value to an array of specific length. Function sizeIt(a: std_Logic; len: integer) return std_logic_vector is variable rep: std_logic_vector( len-1 downto 0); begin for i in reprange loop rep(i) := a; end loop; return rep; end sizeIt;
20、begin-Define 74377 process (U377CLK) begin if (U377CLKevent and U377CLK=0) then if (U377EN=0) then U377Q = DBB; end if; end if; end process;-Define 74373 U373Q = DBB when (U373GT=1and U373OE=0) else (11111111 and U373Q); -define the ALU FA= 0&U377Q; FB= 0&U373Q; FF= FA + CIN when S =000 else FA - CI
21、N when S =001 else FA or FB when S =010 else FA and FB when S =011 else FA + FB + CIN when S =100 else FA - FB - CIN when S =101 else FA * FB when S =110 else FA xor FB when S =111; COUT=FF(8); U244B = FF(7 downto 0); -Define three-state ports U244A = CO(7 downto 0); DBX = (SizeIt(U244AOE,8) and U24
22、4A) or (SizeIt(U244BOE,8) and U244B); CI(7 downto 0) = DBX when (U244AOE or U244BOE)=1) else bz; DBB = CI(7 downto 0);-CI(7 downto 0) is the BUSCIN = CO(11);U244BOE = CO(12);U244AOE = CO(13);U377EN = CO(14);U377CLK = not CO(15) or U377EN;U373OE = CO(16);U373GT = CO(17);S(2 downto 0) = CO(10 downto 8
23、);CI(14 downto 8) = CO(14 downto 8);CI(15) = COUT;end Behavioral;4总线的VHDL描述 a.总线的硬件描述图 b.总线实验过程与信号1. 实验设计:使用VHDL来完成本实验时,需注意以下问题:1).透明锁存7应使用组合电路实现。2).XC2S150的RAM应外加三态门。3).RAM,244,373,374四个三态门可用一个多路开关加一个三态门构成。2. 实验步骤1).输入并编译生成BIT文件,下载到XC2S150中。2).从开关通过244把数据(如10010110)输入到373中。3). 从开关通过244把数据(如10100101
24、)输入到374中。 4).把373的数据传送到RAM中。 5).把374的数据写到373中。 6).把RAM的数据传送到374中。 7).通过377检查373和374的内容。首先利用开关S0S7设置一个8位的数据,寄存在74LS244A,使开关S13(U244AOE)为低电平,使寄存在74LS244中的数据向总线输出。第二步,利用S8S10的组合在R0R7中选择一个寄存器,选择表如下:S10S9S8R0000R1001R2010R3011R4100R5101R6110R7111第三步,当WRE(写寄存器)脉冲信号从0变1时,将总线上的数据写入某寄存器。第四步,当RDE(读寄存器)脉冲信号从0变
25、1时,将某寄存器的值输出到74LS244B。 c.计算机部件实验之总线的VHDL描述Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_arith.all; entity busv1 is Port ( DB:inout std_logic_vector(15 downto 0); AB:buffer std_logic_vector(15 downto 0); MUX: in std_logic_vector(0 to 2); CLKG,CLK,RESET,RUN: in std_logic; CI: inout std_logic_vector(31 downto 0); CO: in std_logic_vector(31 downto 0); CWR,CRD,IOW,IOR,CTRL1,CTRL2,CTRL3,CTRL4,MCLK: buffer std_logic; PRIX,KRIX:in std_logic );end busv1;architecture busv1_behav of busv1 is signal U377Q:std_l
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1