计组实验课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机组成实验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 IS
CONSTANT 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 IS
PORT(
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 IS
SIGNAL 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); --累加寄存器
BEGIN
status_change: PROCESS(reset, clock, status )
BEGIN
IF reset = '0' THEN
status <= 0 ;
A <= (OTHERS=>'0');
MAR <= (OTHERS=>'0');
ELSIF clock'EVENT AND clock = '0' THEN
CASE status IS
WHEN 0 =>
IF IR(15 DOWNTO 12)/=Stop THEN
MAR <=pc;
END IF;
CASE IR(15 DOWNTO 12) IS
WHEN shlp|shrp =>
CASE IR(11 DOWNTO 10) IS-- Rx to A
WHEN"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 A
WHEN"00"=> A<=R0;
WHEN"01"=> A<=R1;