20132184朱彦荣_计组课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算机组成实验C》

课程设计

适用专业:电子信息类专业

专业:软件工程

班级: 2班

学号: ********

*名:***

指导教师:***

实验学期: 2015-2016上学期

西南交通大学

信息科学与技术学院

简化计算机系统的设计

一.实验目的:

通过学习简单的指令系统及其各指令的操作流程,用Verilog HDL 语言实现简单的处理器模块,并通过调用存储器模块,将处理器模块和存储器模块连接形成简化的计算机系统。

二. 实验内容

1. 底层用Verilog HDL 语言实现简单的处理器模块的设计。

2. 调用存储器模块设计64×8 的存储器模块。

3. 顶层用原理图方式将简单的处理器模块和存储器模块连接,形成简单的计算机系统。

4. 将指令序列存入存储器,然后分析指令执行流程。

三. 预习要求:

1、学习简单指令集。

2、学习各指令的操作流程。

四. 实验报告

1. 顶层原理图设计文件(BLOCK 图)

2.底层模块的Verilog HDL源程序设计

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_unsigned.ALL;

USE ieee.std_logic_arith.ALL;

ENTITY cpu IS

PORT(

M_data_in: IN std_logic_vector(7 DOWNTO 0); --输入

M_data_out: OUT std_logic_vector(7 DOWNTO 0); --输出

cpupc:out std_logic_vector(11 downto 0); --pc寄存器

cpustatus: out integer RANGE 0 TO 6; --状态信息,共7种

cpuR0,cpuR1,cpuR2,cpuR3,cpuA:out std_logic_vector(7 DOWNTO 0);

cpuIR: out std_logic_vector(15 downto 0); --存放指令本身

reset : IN std_logic; --清零信号低电平有效

clock : IN std_logic; --时钟

overflow: OUT std_logic ; --溢出

Write_Read: OUT std_logic; --读写信号,'1'为写,‘0’为读

M_address: OUT std_logic_vector(11 DOWNTO 0); --地址12根,不全用

SEL:buffer STD_LOGIC_VECTOR(2 DOWNTO 0);

LED7:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)

);

END;

ARCHITECTURE zyr20132184_behavior of cpu IS

CONSTANT idle : std_logic_vector(3 DOWNTO 0) :="0000";

--无操作,PC++

CONSTANT load : std_logic_vector(3 DOWNTO 0) :="0001";

--R0<-I,PC++

CONSTANT move : std_logic_vector(3 DOWNTO 0) :="0010";

--Rx<-(Ry);PC++

CONSTANT addx : std_logic_vector(3 DOWNTO 0) :="0011";

--Rx <- (Rx)+(Ry);PC++

CONSTANT subp : std_logic_vector(3 DOWNTO 0) :="0100";

--Rx <- (Rx)+(Ry);PC++

CONSTANT andp : std_logic_vector(3 DOWNTO 0) :="0101";

--Rx <- (Rx) and (Ry);PC++

CONSTANT orp : std_logic_vector(3 DOWNTO 0) :="0110";

--Rx <- (Rx) or (Ry);PC++

CONSTANT xorp : std_logic_vector(3 DOWNTO 0) :="0111";

--Rx <- (Rx) xor (Ry);PC++

CONSTANT shrp : std_logic_vector(3 DOWNTO 0) :="1000";

--Rx<-(Rx)逻辑右移;PC++

CONSTANT shlp : std_logic_vector(3 DOWNTO 0) :="1001";

--Rx<-(Rx)逻辑左移;PC++

CONSTANT swap : std_logic_vector(3 DOWNTO 0) :="1010";

--A<-(Ry);Ry<-(Rx);Rx<-(A);PC++

CONSTANT jmp : std_logic_vector(3 DOWNTO 0) :="1011";

--pc++;pc<-addr

CONSTANT jz : std_logic_vector(3 DOWNTO 0) :="1100";

--pc++; if(R0)=0 then pc<-addr else pc++

CONSTANT read : std_logic_vector(3 DOWNTO 0) :="1101";

--pc++;R0<-(addr);pc++

CONSTANT write : std_logic_vector(3 DOWNTO 0) :="1110";

--pc++;addr<-(R0);PC++

CONSTANT stop : std_logic_vector(3 DOWNTO 0) :="1111";

--无操作,pc不变

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 6; --状态寄存器

shared VARIABLE PC:std_logic_vector(11 DOWNTO 0); --程序计数器

shared VARIABLE R0,R1,R2,R3: std_logic_vector(7 DOWNTO 0); --通用寄存器

shared VARIABLE A: std_logic_vector(7 DOWNTO 0); --临时寄存器

SIGNAL DATA:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(clock)

BEGIN

IF clock'EVENT AND clock='1'

THEN

IF SEL>="001" THEN SEL<="000";

ELSE SEL<=SEL+1;

END IF;

CASE SEL IS

WHEN "000"=> DATA<=M_data_in(3 downto 0);

WHEN "001"=> DATA<=M_data_in(7 DOWNTO 4);

WHEN OTHERS =>NULL;

END CASE;

相关文档
最新文档