LC3设计要点.docx

上传人:b****9 文档编号:25957648 上传时间:2023-06-16 格式:DOCX 页数:26 大小:477.21KB
下载 相关 举报
LC3设计要点.docx_第1页
第1页 / 共26页
LC3设计要点.docx_第2页
第2页 / 共26页
LC3设计要点.docx_第3页
第3页 / 共26页
LC3设计要点.docx_第4页
第4页 / 共26页
LC3设计要点.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

LC3设计要点.docx

《LC3设计要点.docx》由会员分享,可在线阅读,更多相关《LC3设计要点.docx(26页珍藏版)》请在冰豆网上搜索。

LC3设计要点.docx

LC3设计要点

计算机系统概论LC-3模型机CPU设计若干要点

一、主要相关教材

㈠计算机系统概论--相关的重点章节

计算机系统概论IntroductiontoComputingSystems中/英文书籍,影印版下载网页:

⑴第3章3.7LC-3计算机数据通路P55影印电子版查找+27,下同

⑵第4章冯·诺伊曼模型P65

⑶第5章LC-3结构P77(其中LC-3指令集P78)

附录ALC-3指令结构P339

包括各指令的结构、功能、微操作、中断隐操作等,是设计的最基本的依据。

附录CLC-3微结构P367

包括结构与控制图、时序状态机图、中断与异常控制等。

其简化见LC-3结构状态图简化与修改.doc

⑷第7章汇编语言P120

⑸第8章输入输出8.5中断驱动I/OP140

⑹第10章栈P166

10.2中断驱动I/O

(2)P171

㈡教材:

计算机组成原理(唐朔飞新版)

二、具体设计要求、环境、提示

※选择类:

㈠、基本要求:

LC-3指令集中除去TRAP、非法指令none(Opcode=1101)、RTI及其外部中断请求响应。

推荐冯·诺伊曼型

㈡、通常要求:

LC-3指令集。

外中断请求IRQ(↑/↓沿触发)一个(因教学时间所限简化掉优先级),非法指令按外中断方式处理,但非法指令优先于外中断请求。

压/弹栈内容包括程序计数器和程序状态寄存器。

推荐冯·诺伊曼型。

㈢、哈佛流水线:

LC-3指令集,3-5级。

哈佛流水线系指有程序存贮器(或Progrmacache)和数据存贮器(或data_cache),但无外部主存及其保持一致控制逻辑(如空间映射表、DMA双向传送逻辑逻辑等)。

这样做原因是:

一是能达到熟悉掌握流水线的基本原理与实践相结合的要求。

二是因为实验教学时间所限(30-40学时),要做完整的流水线学生额外负担过重。

三是现用的实验平台上FPGA内部存贮器容量较小(能满足实验程序)。

※控制与方式:

㈠、单倍频(CPU工作时钟=外输入时钟即不分频,并行流水设计可按需倍频)。

㈡、组合控制或微程序控制或参数化(QuartusII-parameter)微程序控制

㈢、变周期:

时序周期集中设计或时序周期分散的类状态迁移或状态机时序。

㈣、行为描述或图形方式或两者结合(均包括调库),CPUCore设计可单层或多层次。

㈤、外部输入输出,推荐地址与数据非复用、数据双向(inout)

见五、㈡

※使用系统与平台

㈠、EDA系统:

QuartusII6.0为主或以上版本,推荐自身集成仿真器,直观方便,设计仿真平台下载可一气呵成,注意:

从QuartusII10.0起仅有第三方的仿真器—ModelSim。

安装使用见QuartusII文件夹。

㈡、FPGA实验平台

1)用作CPU的FPGA型号为Cyclone-EP1C12Q249C8。

⑴其顶层描述文件为ep1c12.v,其调用用户设计的CPUCore进行下载,模块输入输出信号与属性不可改(除备用信号)。

其引脚分配文件为ep1c12.qsf,不可改。

其内部存贮器总容量为239,616bit,且为同步(须CLOCK)、数据入/出分开型。

⑶对FPGA编程电缆即下载线(盒)usb_blaster(主机USB<=>实验平台JTAG)

或ByteBlasterMV(主机并口<=>实验平台JTAG)

2)实验平台调试监控

接口:

主机USB<=>实验平台USB,程序:

WinDebug

说明、安装、使用见platform文件夹

主文件是《CPU及其体系结构实验平台用户详尽手册.doc》

※提示与说明

㈠有关运行环境与说明

因在无操作系统系统下运行,TRAP、非法指令none、外中断的矢量地址分别固定为0010H、0044H、0040H,检测主程序和硬件设计应保证矢量地址的一致性,检测程序应包括主程序和堆栈指针设置、TRAP、非法指令none、外中断的服务程序。

在检测主程序的开始,要首先将服务程序的指针(开始地址)写入相应的矢量地址,设置堆栈指针,然后方可进行TRAP、非法指令none、外中断的操作。

堆栈指针设置上,也因不用OS,而不分USP(用户)与SSP(系统),统称SP。

㈡有关中断

中断隐操作过程:

外部随机请求IRQ→升起取样寄存器IRQ_R(据触发极性情况可省缺)→中断标志寄存器INT_R(同时清“0”取样寄存器IRQ_R)→指令结束周期(原教材在取指令周期不普遍)升起中断响应服务寄存器ISR(同时“0”INT_R,INT_F保持到返回指令)→栈指针SP-1,程序或系统状态字PSR/PSW压栈→栈指针SP-1,程序计数器PC压栈→查表该中断向量地址并读取相应的中断服务程序指针→PC<=中断服务程序指针→执行中断服务程序,到返回指令,清“0”ISR→返回主程序。

注意:

PC机有SP-1,压CS程序段寄存器。

具体可参考:

计算机系统概论附录A.4.1中断(P351+27=378)

LC-3是取指令响应中断,因无普遍性,且压PC前,要先做PC-1。

不推荐。

计算机组成原理(唐朔飞新版)8.4中断系统

中断逻辑设计参考《1_部件实验内容1.doc》8.外中断系统及其硬堆栈设计

㈢程序启动首地址与CPU复位向量的软硬件一致性

为了保证在存贮器内的首个程序能在CPU运行,程序启动首地址必须与CPU复位向量相等,如X86的复位向量在FFFF0H(最初的16位地址是FFF0H)与BIOS程序启动首地址一致,ARM处理器在复位时从地址“0”取第一条。

这与系统的空间分配相关。

Always@(posedgeclkornegedgereset)//复位低有效定义negedgereset实现异步复位

begin

if(!

reset)//必须异步复位

begin//3000H是系统规定的用户程序空间(见下面㈣)

pc<=16'h3000;//必须与汇编中的首条指令地址相同。

若用.ORIGx3000

...........//其下行必须是指令,而非数据或字符串;否则要计算。

end

..............

end

因在没有OS下运行,再加所用FPGA存贮器容量小,本设计确定程序启动首地址与CPU复位向量是60H。

㈣LC-3CPU启动首地址、模块外特性与流程表

见后面五、六、LC-3微操作周期时序流程表

三、LC-3指令集及其功能存在的缺陷与改进

LC-3指令集较精简,结构功能上具有代表性。

但存在缺少溢出(或进位)判别机制、没有程序状态字的读写机制,没有移位(左/右),这给程序设计带来诸多的不便和程序加长或运行时间加长许多。

改进方法如下:

㈠溢出(或进位)判别----巧用BR指令的编码(nzp=000)+溢出硬件检测逻辑

在没有溢出/进位判别机制下,每个加法ADD指令后,都必须立即转入“-overflowor+overflow”处理子程序(JSROVERFLOW),否则,一旦产生overflow,不仅ADD结果符号位不正确,后续的相关操作结果错误,而且,因符号位不正确,造成误判,程序将出现混乱。

因此,必须对增加加法溢出判别功能,判别原理如下:

⒈运算器的运算结果正负数与溢出检测机制原理----4种方法:

①双符号位(变形码)判决法:

仅判别运算结果的2个符号位

均00表示正号,11表示负号。

如果进位将会导致符号位不一致,从而检测出溢出。

结果的符号位为01时,称为上(正)溢;为10时,称为下(负)溢。

如:

设x=0.1101,y=-0.0111,符号位改为双符号位,用补码求x+y,x-y

  [x]补+[y]补=001101+111001=000110结果为正数

[x-y]补=[x]补+[-y]补=001101+000111=010100结果上溢

设x=-0.1101,y=-0.0111,符号位改为双符号位,用补码求x+y,x-y

[x]补+[y]补=110011+111001=101100结果下溢

[x-y]补=[x]补+[-y]补=110011+000111=111010结果负数

注:

按位加(不进位)运算符号

2.LC-3可使用溢出判别方法

可用在CPU逻辑设计中加检测逻辑,也可用程序判别。

根据LC-3指令集与条件跳转指令功能,因为指令无判别进位功能,所以不论是程序判别溢出,还是硬件检测逻辑,都只能使用上述④即根据运算前后的符号位进行溢出的判别。

A程序程序判别法:

累加方式:

ADDR0,R0(第一),R19(第二)累加方式,必须先保护第一操作数DATA0(R0)到未用的寄存器如R2或存贮器。

运算后有R0、R2、R1判别溢出。

否则,因运算后,R1的符号位已经是结果的符号位,第一源数据符号位已丧失,将无法在处理溢出的子程序中用两个源数据的符号位与运算结果的符号位的判别法判别溢出,并进行符号位取反,

…………….

ADDITONLDR0,DATA0;

LDR2,DATA0;保护第一操作数

LDR1,DATA1;

ADDR0,R0,R1;accumulation_sumtoR0

JSROVERFLOW;goto:

+/-overflowjudgement

…………….

通常方式:

ADDR0,R1,R2加,如需累加计算结果,在判别溢出返回后,再将上次结果送到R1。

以进行累加。

…………….

ADDITONLDR0,DATA0;

LDR1,DATA1;

ADDR0,R1,R2;accumulation_sumtoR1

JSROVERFLOW;goto:

+/-overflowjudgement

ADDR1,R0,#0;R1<=R0

………………

显而易见,每次“加”类运算,必须要goto:

+/-overflow判别,虽然仅用一个溢出判别子程序,但程序运行每次“加”均要执行,因而运行时间变得沉长,特别是数组累加,所花费时间将超过“累加”本身时间的多倍。

所以使用逻辑判别法十分必要。

B逻辑判别法:

设计中该功能尽量选择

⑴巧用条件转移指令

BR

条件转移指令BR的8种汇编格式:

条转

为取指令后的PC+1值

⑵增加指令BR判别溢出功能

①条件转移指令BR(指令码bit[15:

12]=0,0,0,0):

其bit[11:

9]即n,z,p位,经LC3汇编器编译后用手工修改n,z,p=0,0,0时,功能修改如下:

原功能:

状态N/Z/P=1,则转移。

现该功能判别要求,与BRnzp同功能。

所以可改

新功能:

为判别溢出+VF1=1或-VF1=1转移,设置状态字PSR[3]、PSR[4]

转移后,再判别状态字PSR[3]、PSR[4],做正溢或负溢不同处理。

②溢出判别逻辑描述如下:

设Xs、Ys、Zs分别表示运算器的两个输入数X、Y和运算结果的符号位。

表达式均用VerilogHDL的运算符。

VFp<=!

Xs&!

Ys&Zs设置状态字PSR[3]=1

VFn<=Xs&Ys&!

Zs设置状态字PSR[4]=1

※组合逻辑中有关ADD、ADDI运算逻辑描述如下:

………………

begin

………………

if(IR[5]==0)

_DR=_SR1+_SR2;//ADD

else

begin

if(IR[4]==0)

_DR=_SR1+{11'b00000000000,IR[4:

0]};//ADDI,+imm5

else

_DR=_SR1+{11'b11111111111,IR[4:

0]};//ADDI,-imm5

end

end

//ADD,ADDI:

+/-overflowjudgeandNOTsymbolbitwhen+/-overflow

wireadd_i=(IR[15:

12]==4'b0001);

regVF_n,VF_p;

wireVF_np=VF_n|VF_p;

reg_DR2[15:

0];

always@(IR[15:

0]or_SRor_SR1)//

begin

begin

if(IR[5]==0)

begin

VF_n=_SR1[15]&_SR2[15]&!

_DR[15]&add_i;

VF_p=!

_SR1[15]&!

_SR2[15]&_DR[15]&add_i;

end

else

begin

VF_n=_SR1[15]&IR[4]&!

_DR[15]&add_i;

VF_p=!

_SR1[15]&!

IR[4]&_DR[15]&add_i;

end

end

_DR2={(VF_np&!

_DR[15]|!

VF_np&_DR[15]),_DR[14:

0]};

//NOTsymbolbitwhen+/-overflow

End

※时序逻辑中,有关ADD、ADDI运算逻辑描述如下:

………………

begin

case(IR[11:

9])//

3'h0:

R0<=_DR2;//_DR2:

NOT_DR'ssymbolbitwhen+/-overflow

3'h1:

R1<=_DR2;

3'h2:

R2<=_DR2;

3'h3:

R3<=_DR2;

3'h4:

R4<=_DR2;

3'h5:

R5<=_DR2;

3'h6:

R6<=_DR2;//R6isSP

3'h7:

R7<=_DR2;//R7savePC

endcase

N<=_DR2[15];

Z<=(_DR[14:

0]==0)&!

(VF_n|VF_p);//notoverflow

P<=!

_DR2[15];

VFn<=VF_n;

VFp<=VF_p;

………………

end

………………

㈡新增指令功能----本设计中有能力者可选择

NOTDR,SR;IR[5:

0]=111111,利用其IR[5:

0]≠111111,新增指令如下表:

IR

汇编符

OP

15:

12

目标R

11:

9

源R

8:

6

辅助OP

5:

0

功能说明

LS

1001

DR

SR

00xxxx

xxxx左移次数≤15

RS

1001

DR

SR

01xxxx

xxxx右移次数≤15,

RRS

1001

DR

SR

100000

右循环移位一次,见表下*1

DPS

1001

DR

PSR

100001

读程序状态字,PSR:

000

WPS

1001

PSR

SR

100010

写程序状态字,PSR:

000

NOP

1001

0000

0000

000000

不操作指令

*1:

VFp→DR7,SR7-1→DR6-0,SR0→Cy,置VFp、Z,VFp代进位Cy

㈢现行汇编器LC3Edit.exe和虚拟仿真器Simulate.exe均不支持非法指令NONE=1101op,现本设计要求按内部异常中断处理的功能。

可使用注释隐藏与程序模拟的等方式使用上述汇编器或在仿真器运行。

见lc3_test.asm按

以上3点的实现均需要改进后的编译器和仿真器的支持。

三、解决流水线中相关冲突问题的补充----设计者据自身能力使用或选用

解决流水线中相关冲突除使用设置数据和指令存贮器(指令和数据CACHE)、气泡信号、填NOP指令、旁路寄存器或提前写寄存器(互锁或定向技术)、乱序执行(硬编译动/静态调度)、转移预测或目标缓冲技术以及分支延迟(槽)、非法指令陷阱处理等方法外,还可以用下方法:

㈠每个阶段(站/级)可据需要设置1-N节拍,摒弃一级一个节拍脉冲的传统观念

如取指令Fetch(IF)可4个节拍,编码Decode(ID)可2个节拍,执行Execute(EX)可5-10个节拍(浮点10个),存贮器MEM、回写WB等等类似。

另外有的阶段还可设置延迟间隙,详见CPUC6000的soft2_流水线和中断_2008[1].pdf

㈡脉冲控制或D型寄存器的允许控制

⑴使用TTL电路74S120脉冲同步控制器相应的逻辑描述_74120sv.v(平台提供,功能见同步器74120使用.doc或自据原理设计),可同步控制停止时钟、单个脉冲、若干个脉冲(需另外设计计数器)、连续脉冲,并保证脉冲的完整性。

每个流水线节拍脉冲均使用_74120sv.v逻辑控制产生CLK[n:

1],n为总节拍数。

相关所产生的冲突信号(包括条件转移和中断信号)去禁止需要停止工作的节拍脉冲或某阶段所有节拍脉冲。

⑵每个流水线节拍的时序逻辑,均用带允许端的D型寄存器,允许共EN[n:

1],n为总节拍数,相关所产生的冲突信号去(包括条件转移和中断信号)禁止需要停止工作的某节拍寄存器或某阶段所有节拍的寄存器。

这样设计带来好处是第i节拍的时序逻辑用CLKi或ENi,不必担心串混问题,也不用填NOP指令或气泡信号,而且流水开始与结束控制也简单(开始与结束控制不好,会破坏内存或寄存器内容,引起错误)。

上述的也可相互结合、灵活使用。

㈢条件转移指令后均填NOP指令或气泡信号

条件转移指令用猜测或分支流水(转移/不转移),常常要改变相关的寄存器或存贮器单元,保护恢复、猜错返回既花时间又逻辑复杂。

因此,可采用条件转移指令后均填NOP指令或气泡信号,等到条件产生,才开始取指令。

虽然多用几个节拍,但总的计算,不见得比猜测或分支流水多花费时间,但逻辑设计却简单得多、免除后续指令改变转移指令程序中的相关的寄存器或存贮单元内容而造成相关处理。

必转类指令的类似方法,直到转移执行完,才开始取指令,免得后续指令改变必转类指令程序中的相关的寄存器或存贮单元内容而造成相关处理。

㈣最大时间差流水线技术

通常因流水线的工作CLK的周期由任意相邻两节拍间各信号的最大延迟确定,设计中尽量设法减少这个最大延迟。

而最大时间差流水线技术则是相反即反向思维,尽量使流水线的各相邻两节拍间信号的延迟一致,对延迟小的,设法延迟,使之延迟接近最大的,这样各各相邻两节拍间信号延迟时间差可很小,但在全部流水线相邻两节拍间信各信号总有个最大的时间差△Tmax=Tmax-Tmin,以△Tmax作为流水线的工作CLK△的周期,工作速度就大为提高,这就是最大时间差流水线技术。

实际这时邻近两节拍间延迟CLK△远小于原通常流水设计CLK的周期,甚至有可能使系统的工作CLK周期接近加工技术提供的物理极限速度----逻辑门最高速度,但不影响流水操作。

只是发生流水发生相关中断时,保护和恢复控制较复杂。

该技术在1968年由中国科学院计算所夏培肃院士提出其工作原理。

1986年有其指导副研究员林琦根据该原理用TTL电路设计试制成功算术(含乘法)/逻辑运算部件(GF-10/13),1990年其与研究员王玉祥等合作完成相应的高速算术逻辑部件芯片的研制。

2000年其指导博士陈岚完成《最大时间差流水线技术实用化设计的研究》,2005年副研究员陈岚进行了《最大时间差流水线技术在SoC设计中的应用》研究,并开发了WLAN核心算法维特比编解码算法、64点FFT算法、信号检测算法等集成电路IP和解码芯片"凤芯1号"等。

但目前尚未应用到通用CPU的流水线设计上。

从速度分析上看,IntelCPU速度已达3.4G左右,即CLK周期是0.3ns左右,可以说是半导体门的极限速度。

因此我们可以猜测IntelCPU已应用了最大时间差流水线技术。

参考1.一体化设计高速流水线技术。

计算机学报,10(11),1987,(与林琦等合作)。

2.TheDesignandImplementatuonofaVeryFastExperimentalPipeliningComputer.J.ComputerScienceandTechnology,3

(1),1988,(withQ.Lin).

3.高速算术逻辑部件芯片的研制。

高速高精度信号处理系统集成技术论文集,1990,(与王玉祥等合作)。

4.最大时间差流水线技术实用化设计的研究陈岚中科院计算所现研究员

5.最大时间差流水线技术在SoC设计中的应用陈岚中科院计算所现研究员

㈤流水线中的中断(文中PM见六、㈠)

⑴中断隐操作即对随机的中断请求信号的采样寄存IRQR(可能异步,设置中断允许寄存器包括分类允许与总允许要相应设置允许位才可采样)→同步寄存中断请求标志INTR同时清除采样寄存IRQR)→判别是否允许响应中断(据多中断的优先级别约定)→若响应中断,则查询确定中断向量、置响应标志INTF同时清除中断请求标志INTR、PM=0,同时置入中断向量到程序计数器PC,到取中断处理程序首条指令,全部在取指令阶段完成。

若不允许响应中断,则保留中断请求标志,每个节拍时钟均判别是否可响应当前的中断请求标志(也可能多个),直到一一被全部响应。

注意:

在置入中断向量到程序计数器PC并同时保护返回PC时,压栈保护的PC值要作先减n(n为指令长度的字节数)的操作,或者若有确定的中断请求标志时,取指令时,PC值禁止加n,压栈保护的PC值则无需作减操作,

⑵中断隐操作分散到流水线的各阶段,对中断请求的采样在取指令阶段进行,置中断标志,判别允许中断、查询确定中断向量、置响应标志在后续阶段操作,但置入中断向量到程序计数器PC到取中断处理程序首条指令回到取指令阶段操作。

同样要注意压栈保护的PC值的处理,方法类同上述⑴注意点。

无论如何在中断返回指令RTI的执行结束时,必须清除中断响应标志INTF、置PM=1。

对多个中断,其IRQR、INTR、INTF寄存器要定义数组。

㈥程序解决相关冲突

目前流水线是是使用硬的乱序执行(硬编译动/静态调度)指令缓冲池来调整指令的执行时序,以消除一些局部程序相关冲突。

但作用有限,做到全局性困难。

而从程序解决相关冲突是个前景广阔而有效的途径,特别是应用最大时间差流水线技术,将会大大减少甚至可取消为解决程序本身引起相关冲突与流水中断的复杂逻辑设计问题(注意:

对内或外中断请求引起的流水中断处理逻辑必须有),而出现意想不到的效果。

这里程序解决相关冲突系指程序设计上,在程序存贮器和数据存贮器分开的基础上,如果是用汇编程序设计,程序员在用通常方法设计完成后,再根

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

当前位置:首页 > 高中教育 > 高考

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

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