西安交通大学组成原理课内实验.docx

上传人:b****8 文档编号:27986794 上传时间:2023-07-07 格式:DOCX 页数:28 大小:168.05KB
下载 相关 举报
西安交通大学组成原理课内实验.docx_第1页
第1页 / 共28页
西安交通大学组成原理课内实验.docx_第2页
第2页 / 共28页
西安交通大学组成原理课内实验.docx_第3页
第3页 / 共28页
西安交通大学组成原理课内实验.docx_第4页
第4页 / 共28页
西安交通大学组成原理课内实验.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

西安交通大学组成原理课内实验.docx

《西安交通大学组成原理课内实验.docx》由会员分享,可在线阅读,更多相关《西安交通大学组成原理课内实验.docx(28页珍藏版)》请在冰豆网上搜索。

西安交通大学组成原理课内实验.docx

西安交通大学组成原理课内实验

计算机组成原理课内实验报告

实验二

 

学生姓名高君宇

专业班级计算机15

学号2110505112

所在学院电信学院

提交日期2014年1月18日

实验二

1.实验目的

(1)理解计算机主存储器的分类及作用

(2)掌握ROM、RAM的读写方法

2.实验要求

1)实验设计目标

设计一个能够对实验台上的存储器读写的部件,满足以下目标:

(1)一个16位的存储器地址寄存器。

该寄存器在reset为低电平时清零,在时钟clk的上升沿加1,地址寄存器在超过ox000f后下一个时钟上升沿回到0。

(2)一个标志寄存器,在reset为低电平时复位为0,当存储器地址寄存器等于0x000f后,下一个时钟clk的上升沿标志寄存器翻转。

(3)在标志寄存器为0时执行存储器存数功能,从存储器的0单元开始存16个16位数。

按动一次单脉冲按钮,存一次数,存的数由内部产生,不由实验台开关输入。

(4)当标志寄存器为1时,执行从存储器的0单元开始的读数功能。

按动一次单脉冲按钮,读一次数,一直读16个数。

读出的数据送入一个16位信号R[15..0]暂存。

提示:

当需要从存储器读取数据时,首先将"ZZZZZZZZZZZZZZZZ"赋值给数据总线,然后才能读取存储器中的数据。

2)顶层设计实体的引脚要求

引脚要求对应关系如下:

(1)clk对应实验台上的时钟(单脉冲)。

(2)reset对应实验台上的CPU复位信号CPU_RST。

(3)存储器地址总线A[15..0]对应实验台上的指示灯A15—A0。

(4)存储器数据总线D[15..0]对应实验台上的数据指示灯D15—D0。

(5)16位信号R[15..0]对应实验台上的指示灯R15—R0。

(6)存储器读写信号FWR对应实验台上的FWR。

3.实验原理

存储器按存取方式分,可分为随机存储器和顺序存储器。

如果存储器中的任何存储单元的内容都可随机存取,称为随机存储器,计算机中的主存储器都是随机存储器。

如果存储器只能按某种顺序存取,则称为顺序存储器,磁带是顺序存储器,磁盘是半顺序存储器,它们的特点是存储容量大,存取速度慢,一般作为外部存储器使用。

如果按存储器的读写功能分,有些存储器的内容是固定不变的,即只能读出不能写入,这种存储器称为只读存储器(ROM);既能读出又能写入的存储器,称为随机读写存储器(RAM)。

实际上真正的ROM基本上不用了,用的是光可擦除可编程的ROM(EPROM)和电可擦除可编程的ROM(EEPROM)。

EEPROM用的越来越多,有取代EPROM之势,比如容量很大的闪存(FLASH)现在用的就很广泛,常说的U盘就是用FLASH做的。

按信息的可保存性分,存储器可分为非永久性记忆存储器和永久性记忆存储器。

ROM、EPROM、EEPROM都是永久记忆存储器,它们断电后存储内容可保存。

RAM则是非永久性记忆存储器,断电后存储器中存储的内容丢失。

TEC-CA实验台上HM6116的使用

在TEC-CA开放式CPU实验教学系统实验台上,有2片静态存储器器件HM6116。

HM6116有8位数据总线和11位地址总线。

2片HM6116构成了2kX16bits的静态存储器,与FPGA-CPU一起构成了能够运行测试程序的计算机。

图6-41是FPGA-CPU和2片HM6116连接示意图。

图6-41FPGA-CPU和2片HM6116连接示意图

对于FPGA-CPU来说,实验台上的2片HM6116的CS是接地的,因此不需要对它们的CS进行控制。

FPGA-CPU产生的16位存储器地址A15—A0只有11位地址A10—A0送往2片HM6116,其余5位地址A15—A11没有使用。

FPGA-CPU的16位存储器数据总线D15—D0和2片HM6116相连,1片HM6116的I/O7—I/O0接D7—D0,另1片HM6116的I/O7—I/O0接D15—D8。

FPGA-CPU输出的存储器控制信号FWR直接送2片HM6116的WE;FWR在实验台经过一个反相器反相后送2片HM6116的OE。

因此FPGA-CPU只要在存储器地址总线A10—A0设置好地址,在数据总线D15—D0上送出被写数据,然后在FWR上产生一个负脉冲,就能将数据写入指定的存储器单元;只要在存储器地址总线A10—A0设置好地址,然后使FWR为高电平,就能在数据总线D15—D0上接收到从指定的存储器单元读出的数据。

4.设计思路与源代码

libraryIEEE;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitymemoryis

port(reset,clk:

instd_logic;--复位、时钟

FWR:

outstd_logic;--RAM的读写

D:

inoutstd_logic_vector(15downto0);--数据A:

outstd_logic_vector(15downto0);--地址

R:

outstd_logic_vector(15downto0)--寄存器

);

endmemory;

architecturebehavofmemoryis

signalcounter:

std_logic_vector(15downto0);

signalwdata:

std_logic_vector(15downto0);

signalstart,flag:

std_logic;--开始计数(读写)、结束(状态)

begin

A<=counter;

wdata<="00000000001"&counter(4downto0);--数据16bit的形成

process(reset,clk)

begin

ifreset='0'then

counter<=x"0000";

elsifclk'eventandclk='1'then--计数

if(start='1')and(counter/=x"000f")then

counter<=counter+'1';

elsif(start='1')and(counter=x"000f")then

counter<=x"0000";

endif;

endif;

endprocess;

process(reset,clk)

begin

ifreset='0'then

start<='0';

elsifclk'eventandclk='1'then

start<='1';

endif;

endprocess;

process(reset,counter,clk)

begin

ifreset='0'then

flag<='0';

elsifclk'eventandclk='1'then

ifcounter=x"000f"then

flag<=notflag;

endif;

endif;

endprocess;

process(reset,counter,clk,start,flag,wdata,D)

begin

ifreset='0'then

FWR<='1';

elsifstart='1'then

ifflag='0'then

D<=wdata;

FWR<=clk;

else

D<="ZZZZZZZZZZZZZZZZ";

FWR<='1';

R<=D;

endif;

endif;

endprocess;--增加flag引出信号,观察他的变化。

endbehav;

5.实验步骤

(1)实验台设置成FPGA-CPU附加外部RAM运行模式“011”。

该调试模式要能够实现模拟FPGA-CPU对实验台存储器的存数、取数功能。

即REGSEL=0、CLKSEL=1、FDSEL=1。

使用实验台上的单脉冲,即STEP_CLK短路子短接,短路子RUN_CLK断开。

由于当FDSEL=0时,指示灯D15—D0显示的是开关SD15—SD0的值,因此开关FDSEL必须为1。

这种方式除了FPGA-CPU的时钟是单脉冲外,其余都与单片机控制FPGA-CPU调试模式完全一样。

(2)将设计在QuartusⅡ下输入,编译后下载到TEC-CA上的FPGA中。

首先按实验台上的CPU复位按钮,使存储器地址寄存器复位为0,然后不断观察实验台上的指示灯,察看结果与预想的是否一致。

6、实验现象:

reset信号使整个运行过程复位,clk脉冲有效是存入16个16位数,标志位变为1,按clk开始读存储器,此时可以通过观察指示灯的亮灭情况得到输出结果。

7、实验小结

本次实验中使我对Quartus有了更加充分的认识,在实验过程中,仿真的时候波形不正确,其中一开始是仿真过程不熟悉导致,后来解决时通过调整延长了地址有效时间,读取稳定。

这说明成功是需要不断尝试的!

 

计算机组成原理课内实验报告

实验三

 

学生姓名高君宇

专业班级计算机15

学号2110505112

所在学院电信学院

提交日期2014年1月18日

实验三

1、实验目的

(1)了解通用寄存器组的用途及对CPU的重要性。

(2)掌握通用寄存器组的设计方法。

(3)掌握VHDL中层次结构的设计特点和方法;学习和掌握component语句和port

map语句。

(4)进一步学习和掌握case语句及其他语句的用法,完成各种寄存器、译码器及选择

器的设计和实现。

2、实验要求

1)实验设计目标

设计一个通用寄存器组,满足以下要求:

(1)通用寄存器组中有4个16位的寄存器。

(2)当复位信号reset=0时,将通用寄存器组中的4个寄存器清零。

2)顶层设计实体的引脚要求

引脚要求对应关系如下:

(1)clk对应实验台上的时钟(单脉冲)。

(2)reset对应实验台上的CPU复位信号CPU_RST。

(3)SR[1..0]对应实验台开关SA1、SA0。

(4)DR[1..0]对应实验台开关SA3、SA2。

(5)DRWr对应实验台开关SA5。

(6)目的操作数用实验台上的指示灯A15—A0显示,源操作数用实验台上的指示灯R15—R0显示。

3.实验原理

通用寄存器组是CPU的重要组成部分。

从存储器取来的数据要放在通用寄存器中;从外部设备取来的数据除DMA方式外,要放在通用寄存器中。

向存储器输出的数据也是从通用寄存器中取出的;向外部设备输出的数据除DMA方式外也是从通用寄存器中取出的。

由于从通用寄存器组中取数据比从存储器或者外部设备取数据速度快得多,因此参加算术运算和逻辑运算的数据一般是从通用寄存器组中取出的,它向算术逻辑单元ALU提供了进行算术运算和逻辑运算所需要的2个操作数,同时又是运算结果的暂存地。

通用寄存器组内寄存器的数目与CPU性能有关,CPU性能越高,通用寄存器组内的寄存器数目越多。

由于算术逻辑运算需要2个操作数,因此通用寄存器组有2个读端口,负责提供进行算术逻辑单元需要的源操作数和目的操作数。

通用寄存器组有1个写端口,负责将运算结果保存到指定的寄存器内。

根据通用寄存器组的功能要求,一个只有4个16位寄存器的通用寄存器组的框图如图所示。

6)4选1多路选择器:

*多路选择器1从4个寄存器R0、R1、R2和R3的输出Q[15..0]选择1路送到DR_data[1..0],给算术逻辑单元提供目的操作数;选择信号sel[1..0]接DR[1..0]。

*多路选择器2从4个寄存器R0、R1、R2和R3的输出Q[15..0]选择1路送到SR_data[1..0],给算术逻辑单元提供源操作数;选择信号sel[1..0]接SR[1..0]。

4、设计思路与源代码

设计思路:

主要运用层次结构设计的方法,首先设计了底层的3个实体:

16位寄存器,具有复位功能和允许写功能;一个2-4译码器,对应寄存器写选择;一个4选1多路开关,负责

'1')then

ifsel='1'andwrite='1'then

q_output<=d_input;

endif;

endif;

endprocess;

enda;

2.设计实体decoder2_to_4

libraryieee;

useieee.std_logic_1164.all;

entitydecoder2_to_4isport(

sel:

instd_logic_vector(1downto0);

sel00:

outstd_logic;

sel01:

outstd_logic;

sel02:

outstd_logic;

sel03:

outstd_logic);

enddecoder2_to_4;

architecturebehavioralofdecoder2_to_4is

begin

sel00<=(notsel

(1))and(notsel(0));

sel01<=(notsel

(1))andsel(0);

sel02<=sel

(1)and(notsel(0));

sel03<=sel

(1)andsel(0);

endbehavioral;

3.设计实体mux4_to_1

libraryieee;

useieee_std_logic_1164.all;

entitymux4_to_1is

port(input0,input1,input2,input3

:

instd_logic_vector(15downto0);

sel:

instd_logic_vector(1downto0);

out_put:

outstd_logic_vector(15downto0));

endmux4_to_1;

architecturebehavioralofmux4_to_1is

begin

mux:

process(sel,input0,input1,input2,input3)

begin

caseselis

when"00"=>out_put<=input0;

when"01"=>out_put<=input1;

when"10"=>out_put<=input2;

when"11"=>out_put<=input3;

endcase;

endprocess;

endbehavioral;

4.顶层设计实体regfile

libraryieee;

useieee_std_logic_1164.all;

entityregfileis

port(wr_port:

instd_logic_vector(1downto0);

rd_port:

instd_logic_vector(1downto0);

reset:

instd_logic;

wen:

instd_logic;

clk:

instd_logic;

data:

instd_logic_vector(15downto0);

data_out:

outstd_logic_vector(15downto0)

);

endregfile;

 

architecture

port(input0,input1,input2,input3

:

instd_logic_vector(15downto0);

sel:

instd_logic_vector(1downto0);

out_put:

outstd_logic_vector(15downto0));

endcomponent;

signalreg00,reg01,reg02,reg03:

std_logic_vector(15downto0);

signalsel00,sel01,sel02,sel03:

std_logic;

begin

Areg00:

register_16portmap(--16位寄存器R0

reset=>reset,--该语句将底层芯片的引脚reset与顶层的

端口信号reset连接起来了;

d_input=>data,--顶层设计实体的外部输入信号data

clk=>clk,--顶层设计实体的外部输入信号clkwrite=>wen,--顶层设计实体的外部输入信号wen

sel=>sel00,

q_output=>reg00

);

Areg01:

register_16portmap(--16位寄存器R1

reset=>reset,--顶层设计实体的外部输入信号reset

d_input=>data,--顶层设计实体的外部输入信号data

clk=>clk,--顶层设计实体的外部输入信号clk

write=>wen,--顶层设计实体的外部输入信号wen

sel=>sel01,

q_output=>reg01

);

Areg02:

reggister_16portmap(--16位寄存器R2

reset=>reset,--顶层设计实体的外部输入信号reset

d_input=>data,--顶层设计实体的外部输入信号data

clk=>clk,--顶层设计实体的外部输入信号clk

write=>wen,--顶层设计实体的外部输入信号wen

sel=>sel02,

q_output=>reg02

);

Areg03:

reggister_16portmap(--16位寄存器R3

reset=>reset,--顶层设计实体的外部输入信号reset

d_input=>data,--顶层设计实体的外部输入信号data

clk=>clk,--顶层设计实体的外部输入信号clk

write=>wen,--顶层设计实体的外部输入信号wren

sel=>sel03,

q_output=>reg

sel03=>sel03

);

mux:

mux_4_to_1portmap(--4选1多路器

input0=>reg00,

input1=>reg01,

input2=>reg02,

input3=>reg03,

sel=>rd_port,--顶层设计实体的外部输入信号rd_port

out_put=>data_out--顶层设计实体的输出信号q_out

);

endstruct;

5、实验现象

在实验台指示灯A15—A0和R15—R0上观察各寄存器的值如下所示。

A15—A0

R15—R0

R0

R1

R2

R3

R0

R1

R2

R3

(1)reset后

0000

0000

0000

0000

0000

0000

0000

0000

(2)R0写入0x3333后

3333

0000

0000

0000

3333

0000

0000

0000

(3)R1写入0x5555后

3333

5555

0000

0000

3333

5555

0000

0000

(4)R2写入0xAAAA后

3333

5555

AAAA

0000

3333

5555

AAAA

0000

(5)R3写入0xFFFF后

FFFF

FFFF

可以看到实验结果实现了寄存器的传递数据的功能。

6、实验总结

本次的实验让我对VHDL语言有了更加深刻的理解,软件和硬件的逻辑等价性在这种语言的描述中发挥的淋漓尽致!

同时也使得我对于寄存器有了更加深刻的了解和认识,对于寄存器的传递数据的功能,与cpu进行直接的数据传输等功能了解更加深刻,在实验过程中自己对于寄存器的结构以及作用有了一个很好地掌握!

 

计算机组成原理课内实验报告

实验四

 

学生姓名高君宇

专业班级计算机15

学号2110505112

所在学院电信学院

提交日期2014年1月18日

实验四:

指令译码器

一.实验目的

(1)理解指令译码器的作用和重要性。

(2)学习设计指令译码器。

二.实验要求

1)实验设计目标

本实验要求根据实验CPU中使用的指令系统设计指令译码器,本实验指令译码器的设计相对比较简单,节拍(t1、t2和t3)因素只在存储器读写时需要对存储器地址分时使用时需要考虑,这里暂不考虑节拍脉冲t,也就是说微操作控制信号只是指令操作码In和Bj的函数:

Cm=f(In,Bj)

式中的In主要代表指令操作码IR[15..12],还有辅助操作码(如算术逻辑指令时的IR[2..0],我们这里要求只考虑指令操作码IR[15..12]。

Bj代表进位标志C和结果为0标志Z。

要求产生的微操作控制信号如下:

op_code控制ALU进行8种运算操作的3位编码。

c_z_j_flag为1表示需要条件转移。

lj_instruct为1表示本条指令是条“JMPADR”指令。

DRWr为1表示在t3的下降沿将本条指令的执行结果写入目的寄存器。

Mem_Write为1表示本条指令有存储器写操作,存储器的地址是目的寄存器的内容。

DW_intruct为1表示本条指令是双字指令。

change_z为1表示本条指令可能改变z(结果为0)标志。

change_c为1表示本条指令可能改变c(进位)标志。

sel_memdata为1表示本条指令写入目的寄存器的值来自读存储器。

2).顶层设计实体的引脚要求

引脚要求的对应关系如下:

(1)指令IR[15..12]对应实验台开关SD3—SD0

进位C对应实验台开关SD4

结果为0标志Z对应实验台开关SD5

(2)控制信号对应如下:

op_code[2..0]指示灯R2、R1、R

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1