寄存器组模块

Report
支持指令流水的计算机系统的设计
与实现
1
计05 陈可卿 2010011347
计05 孙艺瀚 2010011356
流水段设计
取指(IF)
•得到当前
指令
•得到下一
步PC值
•将PC值传
递下去
译码(ID)
•分析指令
执行
(EXE)
•算术逻辑
运算
•取出寄存
器编号/
内存地址
/立即数
•控制信号
继续传递
•控制信号
的产生
访存(MEM)
写回(WB)
•访问内存
操作
•写回寄存
器堆
•存在旁路
和冒险检
测
•写后读冲
突:存在
旁路
•与IF阶段
存在结构
冲突
•划分寄存
器
2
数据通路
3
主要模块实现
PC寄存器模块
• 产生当前PC值
• 对下一个周期的PC值进行选择
Branch跳转控制模块
• Next_pc来自:
• PC+1
• PC+1+IMM
• IMM
IF/ID寄存器组模块
• 传递PC值
• 包含中断的时序
立即数扩展模块
• 有无符号
• 任意扩展
4
主要模块实现
寄存器划分模块
•主要的译码工作
•给出控制信号:
•ALU运算数选择
•是否需要写回
•是否对T寄存器操作
•T寄存器操作内容
•寄存器编号译码
寄存器组模块
•包括IH和T寄存器
•得到寄存器组中的值,未必是ALU的实际操作数
•主要时序:
•T寄存器的锁存
•寄存器写回
ID/EXE寄存器组模块
•传递控制信号
5
主要模块设计
算术逻辑单元模块
• 操作数的选择
• 寄存器堆
• 旁路
EXE/MEM寄存器组模块
• 传递控制信号
6
主要模块设计
内存模块
VGA
键盘模
UART SRAM
和显存
模块
模块
块
模块
7
内存模块
UART模块
•与串口通信
•通过状态机控制时序
SRAM模块
•使用RAM2作为内存
•倍频解决结构冲突
•前半周期用来取指,后半周期访存
VGA和显存模块
•显示模块
•只读存储器模块
•显存模块
键盘模块
•键盘数据接受和分析
•用类似串口的方式通信,为其分配端口:BF02和BF03
8
主要模块设计
MEM/WB寄存器组模块
• 传递控制信号
写回模块
• 寄存器数据可能来自:
• 立即数IMM
• ALU的第一个操作数A
• ALU的运算结果C
• 访存结果
• PC寄存器的值
9
扩展设计
冲突解决
中断处理
数据冲突
软件中断
结构冲突
外设
软件
其它贡献
VGA和显
存
双机通信
管脚自动
绑定
键盘
伪码解析
修改实验
指导书
控制冲突
10
冲突解决
数据冲突
• 数据旁路
• 流水线暂停
结构冲突
• 倍频
控制冲突
• 软件
11
数据冲突
写后读冲突
• 指令j的执行需要使用指令i的计算结果,但是它们在流水线中
重叠执行时,指令j可能在指令i将其计算结果写入之前就线性
对保存该计算结果的寄存器进行了操作。
旁路技术
• 把计算得到的结果尽快传送到它需要的位置。
• 旁路存在于:
• 上一条指令的EXE阶段对当前指令的ID段
• 上上一条指令的EXE阶段对当前指令的ID段
• 上上一条指令的MEM段对当前指令的ID段
• 上一条指令的MEM段对当前指令的EXE段
• 上上条指令的WB段对当前指令的EXE段
12
数据冲突
流水线暂停检测
• 上一个指令是Load指令
• 上一个指令的写入寄存器和当前指令的某一源寄
存器相同
流水线暂停处理
• 设置暂停信号为1
• 当前指令的控制信号全部为0,即不进行任何写入
操作
• 让PC值保持不变
• 让IF/ID段寄存器保持不变
13
结构冲突
冯诺依曼结构:数据和指令放在同一存储器中,去
直接断和访存阶段会造成存储器争用冲突
 将CPU主频设为内存时钟的四分频。
 有效的访存地址根据state选择

SRAM模块状态机
RO(Read Only)
设oe为0,state为00
转入IDLE1
IDLE1
设state为10,输出设为ram_data,oe为1
转入WR
WR(Write&Read)
State设为11,根据输入设定we和oe的值
转入IDLE2
IDLE2
State设为01,输出数据设为ram_data
转入RO
14
控制冲突
对于分支语句,若进行分支预测,即使准确率达到
90%以上,也不可能全部命中
 分支预测带来的效率问题一般是再有循环语句时出
现
 避开分支预测,将问题交给软件
 将循环语句内最后一句在不影响原意的前提下移出
 Branch delay slot始终执行有效语句

15
KERNEL运行展示
至此已经可以运行
kernel代码并运行在
kernel里写出的程序。
测试斐波那契数列代
码如右。
在kernel中测试斐波那契数列
16
中断
实现指令集中的INT指令
 在IF/ID阶段即可判断是否为指令中断。若是,进入
一个状态机

中断处理状态机
with state_int select
instruction_int <=
"1110111001000000" when "0001", -- <ee40> MFPC R6
"0100111000000000" when "0010", -- <4e00> ADDIU R6 00
"0110001111111111" when "0011", -- <63ff> ADDSP FF
"1101011000000000" when "0100", -- <d600> SW_SP R6 00
"011011100000" & imm_tmp when "0101", -- <6e00> LI R6 00
"0110001111111111" when "0110", -- <63ff> ADDSP FF
"1101011000000000" when "0111", -- <d600> SW_SP R6 00
"0110111000000111" when "1000", -- <6e07> LI R6 07
"1110111000000000" when "1001", -- <ee00> JR R6
instruction_in when others;
17
VGA和显存
VGA显示模块
•对输入的50MHz信号二分频,产生25MHz的信号
•产生行同步和场同步计数矢量及行同步和场同步信号
•行同步:656-752为低电平,其余为高
•场同步:490-492为低电平,其余为高
•坐标计算
•根据当前像素点坐标,计算属于屏幕哪一个分块
•去显存中得到相应的字符编号
•去ROM中读取每一个像素上的RGB值
•色彩输出
•在显示区域给每个像素点RGB进行赋值
•在整个消隐区,RGB赋值为0
ROM模块
•存储字符集
显存模块
•使用generic map中的RAM
•映射到一段内存地址:0xF800开始的一段内存
18
键盘模块
PS/2键盘中的数据信号
• 按下一个键产生一组串行数据
• 松开产生两组串行数据
• 每组数据有:起始位,8位数据位(扫描码),1位奇偶校验
位
• 扫描码分通码(按下时)和断码(释放时)
键盘接口处理过程
• 键盘产生的数据具有毛刺,需要滤波
• 接收数据
• 接受11个串行数据,串并转换
• 奇偶校验并提取8位扫描码
• 译码及输出
19
VGA和键盘测试
至此可以测试键盘响
应和VGA显示:写一
段汇编代码,其功能
是对于键盘输入的字
符(包括回车),将
会将其输出到屏幕上。
测试记录的照片如左
图所示。
Keyboard to VGA测试
20
VGA和键盘测试
21
键盘和VGA测试代码
双机通信
使用过两台THINPAD教学实验机,同时烧入我们的
计算机系统
 两台计算机的串口相连,通过串口,一台实验室就
可以接受另一台实验机发送的数据
 加入键盘和VGA模块,成为一个即时通信系统软件
 视频展示

22
伪码解析
在软件编写的过程中,经常用到一些常用语句的组
合
 设计一些伪指令并写了相应的脚本对其进行编译

伪码
解析后汇编码
PUSH R0
ADDSP 0xFF
SW_SP Rx0x0
Rx=Ry
ADDIU3 Ry Rx 0x0
Rx=0xABCD
LI Rx 0xAB
SLL Rx Rx 0x0
ADDIU Rx 0xCD
POP R0
LW_SP R0
ADDSP 0x1
23
其它贡献

自动绑定管脚
输入顶层单元文件,输出ucf文件
 修正了实验指导书上原有的管脚错误


实验指导书修改
24
25

similar documents