[FPGA]MIPS CPU及ISA设计

CPU

CPU功能简介

  • 该CPU支持32条基础MIPS汇编指令(包含mfc0, mtc0, syscall三条中断相关的特权指令)。支持32位加减运算、逻辑判断、内存操作等操作。
  • 对于各种外设的控制是由lw,sw两条命令对于特定地址空间操作来实现
  • 支持16个中断设备,并且支持中断嵌套。

支持指令

指令类型 指令名
R-type add
R-type sub
R-type and
R-type or
R-type xor
R-type nor
R-type slt
R-type sll
R-type srl
R-type sllv
R-type srlv
R-type jr
R-type mfc0
R-type mtc0
I-type addi
I-type andi
I-type ori
I-type xori
I-type lui
I-type lw
I-type sw
I-type lh
I-type sh
I-type lb
I-type sb
I-type beq
I-type bne
I-type slti
J-type j
J-type jal
J-type syscall
J-type eret

中断

中断相关指令

  • 读CP0指令 mfc0 rt, rd : GPR[rt] <= CP0[rd]
  • 写CP0指令 mtc0 rd, rt : GPR[rd] <= CP0[rt]
  • 异常返回 eret : PC <= EPC
  • 系统调用 syscall : EPC = PC + 4 ; PC <= 异常处理位置 ; CP0中Cause和Status寄存器变化
  • $v0=系统调用号
  • $a0~$a3、$f12, 返回值在$v0

CP0主要寄存器说明

寄存器 编号 作用
Status 12 状态寄存器、特权、中断屏蔽位及使能可控位
Cause 13 中断异常类型及中断持起位
EPC 14 中断返回地址

CP0中断协处理数据通路

CP0_data_path.png
  • mfc0 读cp0指令
    control模块控制mfc0(1:0)信号选择Cause_out, Status_out, EPC_out中的一个选择输出作为CP0_out
  • mtc0 写cp0指令
    control模块控制mtc0=1,将CP0中的寄存器输入数据都选择为data(31:0)。同时控制器会控制wcau、wsta、wepc三个信号中的一为1,来控制写入哪一个寄存器。
  • syscall 系统调用
    1. control模块控制exc=1,mtc0=0,wsta=1。使得status=sta_left,也就是让status左移16位保护其中断(如果中断过程嵌套中断,那么后续可以软件用mtc0来写入);control模块控制inta,wpc根据具体场景将当前pc或者pc+4存入EPC中;control模块控制wcau=1将cause存入cause模块中。
    2. 在主CPU中,根据Cause取得中断向量表的值,存入PC中。
  • eret 系统调用返回
    1. control模块控制exc=1,mtc0=0,wsta=1。使得status=sta_right,也就是右移恢复status,重新接受中断
    2. 将EPC_out输出到主CPU的PC中
  • int 硬件中断
    在CP0中的做法同syscall。只是CPU时序状态上有差别。

CPU数据通路实现

datapath.png
  • 控制方式
    在这个数据通路下,我们支持的指令都是可以通过control模块来控制信号来实现。
  • 控制信号输入
    图示左边一列是所有的输入控制信号,这些信号用于控制数据通路中的各种各样的选择器来达到数据通路控制的效果。
  • 数据输出
    图示右边一列是所有的输出信号,根据不同的数据输入将输出不同的数据(data_out)、总线地址(M_addr)、PC地址(PC_current),用于沟通外设或执行动作。

CPU时序状态转移

state_diagram.png
  • 其中蓝色的正常的指令。红色的中断CP0相关指令。
  • mfc0,设置好控制信号,在该周期结束的上升沿即可将cp0寄存器中的数据存入CPU寄存器中
  • mtc0,设置好控制信号,在该周期结束的上升沿即可将CPU寄存器中的数据存入cp0寄存器中
  • int_mem_read,设置好控制信号,在该时钟周期结束的上升沿,根据Cause查找中断向量表中的地址存入EPC中
  • Store_cp0,设置好控制信号,在该时钟周期上升沿,将EPC的地址(刚才中断向量返回的地址)写入PC中,同时将pc或npc的值写入EPC中(即保存放回值),结束后即进入中断处理程序。
  • eret,设置好控制信号,在该时钟周期的上升沿,将EPC的地址写入到PC中。恢复程序的进行。
  • 附注
  • syscall指令执行的时候,要经过IF->ID->int_Mem_read->WB_int
  • 硬件中断的时候,运行到当前指令结束,直接跳到int_Mem_read阶段。

CPU数据通路信号控制

cpu_control.png

这些控制信号直接地对应于上面那个时序状态图。也就是在某个状态的时候控制数据通路的控制信号输入的值。那么数据通路就会根据输入的值执行不同的操作即可执行相应的结果。

RAM

RAM简介

  • 性能参数
    该RAM为Kintex-7片上的一块block memory,RAM的大小为256KB。最小存取周期为10ns,需要时钟进行同步操作。

VGA外设

VGA显示接口模块简介

  • 该VGA支持支持字符模式:每个字符占32bit,高24位为颜色,低8位为字符ascii
  • 显存vram为双端口block memory,大小为8*2400 = 2400byte。可以同时供时钟和vram进行独立地读写。

显示器接口模块

VGA接口模块.png

VGA显示器接口模块的核心是vgac也就是controller模块,controller模块根据扫描时钟送出行/场同步信号hsync/vsync给VGA显示器,同时送出已经转化好的该时钟周期内扫描像素点的行/列位置row_addr/col_addr。将行/列位置进行计算后得到一个内存的地址,通过选择器与CPU_DATA经过条件选择后送入vram,取得当前像素的显示数据,包括颜色和ascii码。将ascii码送入font_dev得到点阵的数据data,在和之前的color进行与运算将最终的RGB送入VGA显示器,这样就完成了整个VGA接口模块的显示过程。

键盘外设

键盘简介

键盘模块可以接受键盘发来的扫描码,并且内部具有32位的硬件缓冲区。当缓冲区中有数据的时候将会将int位置位高,表示当前存在中断,用于通知CPU进行处理。

键盘外设模块

ps2_keyboard.png

Ps2键盘模块的核心为ps2_kbd模块。Ps2_kbd模块根据扫描时钟clk不断地对PS2C,PS2D进行扫描并存入队列中,如果队列中非空,那么ready=1也就是处于有键盘输入,通知CPU中断。当wea置为0的时候,也就是表示为读取状态,其内部的FIFO队列将在当前时钟周期结束时弹出一个扫描码,如果FIFO队列为空,那么重新将ready置为0,表示已经读完数据,不对CPU进行中断。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容