SE22综合性实验报告剖析Word格式.docx

上传人:b****6 文档编号:19436263 上传时间:2023-01-06 格式:DOCX 页数:32 大小:301.66KB
下载 相关 举报
SE22综合性实验报告剖析Word格式.docx_第1页
第1页 / 共32页
SE22综合性实验报告剖析Word格式.docx_第2页
第2页 / 共32页
SE22综合性实验报告剖析Word格式.docx_第3页
第3页 / 共32页
SE22综合性实验报告剖析Word格式.docx_第4页
第4页 / 共32页
SE22综合性实验报告剖析Word格式.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

SE22综合性实验报告剖析Word格式.docx

《SE22综合性实验报告剖析Word格式.docx》由会员分享,可在线阅读,更多相关《SE22综合性实验报告剖析Word格式.docx(32页珍藏版)》请在冰豆网上搜索。

SE22综合性实验报告剖析Word格式.docx

实现上,用实验4所用的简单通用寄存器组(4个寄存器+1个2-4译码器+2个4选1多路开关)设计方法,替代参考代码中的通用寄存器组部分。

(3)学习和掌握控制逻辑。

设计一套指令集(可在原参考代码指令集的基础上做删减,从中选取16条基本的指令),并修改控制器中指令集的译码部分。

(4)执行部件,ALU的改造。

可在原参考代码的基础上,改变某些运算功能的实现方式,比如加、减、增1、减1等算术运算。

实现上,原参考代码采用了最少编码量的“+”、“-”号实现。

可以改用通过portmap语句调用系统自带的加法器,也可以进一步自己编写加法器,然后用portmap语句调用。

(5)存储器部分的加入。

原参考代码采用的带外部存储器的模式。

实现上,可以在实验3的基础上,设计一个适合加到本CPU系统的存储器部分,通过与原参考代码系统连接外带存储器的数据线、控制线和地址线相连接。

此部分设计中,存储器的指令置入是一个难点。

可以考虑简单点的作为只读模式把指令写死在存储器中(可用于验证指令的执行);

或者考虑在reset的那一拍里,实现存储器中待指令的置入。

存储器模块单独调试可行后再加到系统上。

(九)总结构图

(十)指令集

(参考实验大纲中的示例,结合各小组自己的设计),撰写内容可参照参考材料的实践报告.doc中的指令系统总体说明(p9-11页)

(1)指令格式分类(按指令字长和操作数不同):

单字单操作数指令

74

32

10

OPCODEDEST_REG0000

OPCODEOFFSET

包括:

DEC,SHL,SHR,JR,JRC

单字双操作数指令

OPCODEDEST_REGSOUR_REG

ADD,AND,CMP,XOR,OR,MVRR,ADC,LDRR,STRR

③双字单操作数指令

OPCODE00000000

ADR

JMPA

④双字双操作数指令

DATA

MVRD

(2)指令的分组及节拍:

由于没有中断操作,本机指令的执行步骤可概括如下:

读取指令:

地址寄存器<

-指令地址,修改PC内容使其指向下一条将要执行的指令;

读内存,指令寄存器<

-读出的内容。

分析指令

执行指令:

通用寄存器之间的运算或传送,可1步完成;

读写内存,通常要两步完成。

根据指令的执行步骤不同,可以把全部指令分为A、B两组。

其中A组指令完成的是通用寄存器之间的数据运算或传送,或其他一些特殊操作,在取指之后可一步完成,包括:

ADD,AND,CMP,XOR,OR,MVRR,DEC,SHL,SHR,ADC,JR,JRC;

B组指令完成的是一次内存读写操作,在取指之后可两步完成,包括:

JMPA,LDRR,STRR,MVRD。

在编码的时候以指令操作码的最高两位来区分A、B组指令,00,01,10为A组指令,11为B组指令。

在控制器方面我们选用了组合逻辑控制器方案。

使用节拍来标记每条指令的执行步骤。

由指令而定,在我们的系统中不同的执行步骤只有5个,故使用3位节拍就足够了。

000

001

B组指令

101111

A组指令

011

(3)指令汇总表:

指令格式

汇编语句

操作数个数

CZVS

指令类型 

功能说明

0000DRSR

ADDDR,SR

2

****

 

DR<

-DR+SR

0001DRSR

ANDDR,SR

A 

-DRandSR

0010DRSR

CMPDR,SR

DR-SR

0011DRSR

XORDR,SR

-DRxorSR

0100DRSR

MVRR

….

-SR

0101DR00

DECDR

1

-DR-1

0110DR00

SHLDR

*…

DR,C<

-DR*2

0111DR00

SHRDR

-DR/2

1000DRSR

ADCDR,SR

-DR+SR+C

1001OFFSET

JRADR

无条件跳转 

1010OFFSET

JRCADR

C=1时跳转

1011DRSR

ORDR,SR

-DRorSR

11000000ADR

JMPAADR

B

无条件跳转到ADR

1101DR00DATA

MVRDDR,DATA

-DATA

1110DRSR

LDRRDR,[SR]

-[SR]

1111DR0000

STRR[DR],SR

[DR]<

(十一)各部分设计

1.取指及调试

(0)是否加到最后整组的系统中

(1)修改后是否编译通过(指加到整个小组的系统里)

(2)修改后是否可运行(指加到整个小组的系统里)

(3)概要描述

调试汇编程序如下:

Movax,9

Movbx,14

Andax,bx

Cmpax,bx

Xorax,bx

Mvrrax,bx

Decax

Shlax

Shrax

Adcax,bx

MOVAX,9

LDRRBX,[AX]

JMPAX

写入内存指令如下:

ram(0)<

="

11010000"

;

--mov

ram

(1)<

00001001"

ram

(2)<

11010100"

ram(3)<

00001110"

ram(4)<

00010001"

--and

ram(5)<

00100001"

--cmp

ram(6)<

00110001"

--xor

ram(7)<

01000001"

--dr<

-sr

ram(8)<

01010000"

--dec

ram(9)<

01100000"

--shl

ram(10)<

01110000"

--shr

ram(11)<

10000001"

--adc

ram(12)<

ram(13)<

ram(14)<

11101000"

--ldrrdr,[sr]

ram(15)<

11000000"

--jmp

ram(16)<

00000000"

取指、调试模块:

部分代码说明如下:

libraryieee;

useieee.std_logic_1164.all;

entityreg_testais

port(clk,reset:

instd_logic;

input_a:

instd_logic_vector(2downto0);

input_b:

input_c:

cin:

rec:

instd_logic_vector(1downto0);

pc_en,reg_en:

q:

outstd_logic_vector(7downto0);

-----q<

=temp

q1:

outstd_logic_vector(7downto0));

-----q2<

=temp2

endreg_testa;

architecturebehaveofreg_testais

begin

process(clk,reset,input_a,input_b,input_c,cin,rec,pc_en,reg_en)

variabletemp:

std_logic_vector(7downto0);

variabletemp2:

begin

temp:

='

0'

&

input_a&

'

input_b;

-----每个观察端口为8位;

temp2:

=cin&

input_c&

rec&

pc_en&

reg_en;

ifreset='

then

q<

="

q1<

elsifclk'

eventandclk='

1'

then

q<

=temp;

q1<

=temp2;

endif;

endprocess;

endbehave;

2.控制逻辑

如果回答为否,可跳过第

(1)和

(2)问。

可以编译通过

可以运行

1.将组内讨论选取的指令进行编码。

2.在Controler的源代码中,将对应指令的编码,用自己新编的替代

3.修改Controler中,变量,输入,输出的位数

4.删除未被选中指令的代码

5.修改与Controler关联的一些小部件的代码(timer,offset等),主要是修改位数。

(4)相关的源代码、电原理图和其它说明表格。

BSF图:

Vhd:

entitycontrolleris

port(timer:

instruction:

instd_logic_vector(7downto0);

c,z,v,s:

dest_reg,sour_reg:

outstd_logic_vector(1downto0);

offset:

outstd_logic_vector(3downto0);

sst,sci,rec:

alu_func,alu_in_sel:

outstd_logic_vector(2downto0);

en_reg,en_pc,wr:

outstd_logic);

endcontroller;

architecturebehaveofcontrolleris

process(timer,instruction,c,z,v,s)

variabletemp1,temp2:

std_logic_vector(3downto0);

variabletemp3,temp4:

std_logic_vector(1downto0);

variablealu_out_sel:

std_logic_vector(1downto0);

forIin3downto0loop

temp1(I):

=instruction(I+4);

temp2(I):

=instruction(I);

endloop;

forIin1downto0loop

temp3(I):

=instruction(I+2);

temp4(I):

casetimeris//从这里往上修改的是位数,将位数减半

when"

100"

=>

//这里往下是节拍前3节拍还是改位数

dest_reg<

00"

sour_reg<

offset<

0000"

sci<

sst<

11"

alu_out_sel:

alu_in_sel<

000"

alu_func<

wr<

='

rec<

when"

01"

10"

001"

011"

//这个节拍中对应的指令编码都修改了

//还有修改位数

casetemp1is

when"

--ADD

dest_reg<

=temp3;

sour_reg<

=temp4;

offset<

sci<

sst<

alu_out_sel:

alu_in_sel<

alu_func<

0001"

--AND

010"

0010"

--CMP

0011"

--XOR

0100"

--MVRR

0101"

--DEC

0110"

--SHL

101"

0111"

--SHR

110"

1000"

--ADC

1001"

--JR

=temp2;

1010"

--JRC

=c&

"

0"

1011"

=(nots)&

whenothers=>

null;

endcase;

//这里以下是B组指令

1100"

|"

1101"

rec<

1110"

1111"

111"

wr<

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

当前位置:首页 > 人文社科 > 军事政治

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

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