16位CPU
1、申请题目:16位CPU
我想完成的是基于FPGA的16位简化RISC_CPU,可以完成加、减、位操作、指令跳转、数据存储等较为简单的功能,可以正确的指示并处理数据溢出。同时它具有现场保护功能,在非正常断电后可以恢复现场,以便继续工作。希望能实现两条流水线。 2、课题背景:
作为硬件语言Verilog HDL的初学者,编写一个基于FPGA的RISC_CPU是一个不错的选择,既可以充分熟悉CPU结构,又可以检验语言的掌握程度,学习使用系统任务语句。现在CPU的发展越来越快,专用集成电路CPU不利于产品更新换代,而基于FPGA的CPU只需要下载程序便可以方便的升级,节省了大量的人力物力。本设计预计完成的CPU可以用来完成简单的运算和指令操作,存储少量信息。
3、项目规划:
本CPU预计完成MOV(移动)、PUSH(堆栈)、POP(弹栈)、ADC(进位带符号加)、SBB(借位带符号减)、 AND(位与)、OR(位或)、XOR(位异或)、INC(指令加1)、DEC(指令减1)、JMP(指令跳转)、STO(数据存储)、HLT(停机)等操作,对加减等操作希望能通过实验箱上键盘进行数据输入,并用LCD进行显示。工作时有绿色LED灯指示,若溢出有红色LED灯频闪警报。其他的指令功能演示可以通过系统语句进行跟踪显示。同时希望实现两条流水线。
4、实现
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
:
本设计所面临的主要问题有以下几个:
1、 RISC_CPU较为复杂的Verilog 实现;
2、 对溢出情况的处理;
3、 现场保护功能在FPGA上的实现;
4、 对CPU简单功能的模拟与演示;
5、 扩展:希望实现两条流水线;
解决办法:
1、 将整个RISC_CPU分块编程,分别调试,最终进行顶层组装和最后调试;
2、 建立标志字存储器,状态机根据标志字存储器的状态进行相应操作;
3、 使用两个FPGA板,一个作为外围存储设备始终供电,集成FLAGS和ROM,
可以下载测试程序、存储数据和保存工作现场。一个集成地址译码器、RAM
和CPU的处理模块,进行指令操作和数据处理,在处理时才通电下载程序。
4、 对加减、位操作等便于显示的指令,希望通过键盘输入数据,并将最终结果显
示在LCD上。对于其他不便于显示的操作,应通过系统语言将测试文件下
到ROM中,开机后执行相关测试任务。
5、系统结构:
, 系统框图 OPCODE [2:0] DATA[7:0] DATA[ 7: 0] opc_iraddr[15:0] OPC_IRADDRS[ 15:0] ENA RST RST REGISTER IR_ADDR[12:0] CLK1 CLK1 FETCH ALU_OUT[7:0] ALU_CLK CLK DATA[7:0] ACCUM[7:0] CLK
ENA ACCUMULATOR CLKGEN CLK1 RST
ACCUM[7:0]
ALU_OUT[7:0] DATA[7:0] ZERO ACCUM[7:0] ALU_CLOCK ALU OPCODE[2:0] OPCODE[2:0]
ZERO
CLK1 LOAD_ACC INC_PC ZERO LOAD_ACC FETCH LOAD_PC RD RD CONTROL RST WR WR (MACHINECTL LOAD_IR OPCODE[2:0] MACHINE) LOAD_IR HALT HALT DATACTL_ENA DATA_ENA DATA[7:0] DATA[7:0] IN[7:0] DATACTL DATA_ENA
INC_PC LOAD_PC ADDR[12:0] ADDR[12:0] FETCH IR_ADDR[2:0] IR_ADDR[12:0]
ADDR PC_ADDR[12:0]
PC_ADDR[12:0]
IR_ADDR[12:0] PC_ADDR[12:0] LOAD CLOCK COUNTER RST
, CPU及其外围电路
DATA[15:0]
CLK DATA[15:0] CLK ADDR[9:0] HALT DATA[15:0] ADDR[9:0] HALT RST RST RD read RD RISC_CPU WR write WR RAM ADDR[12:0] ADDR[12:0] ena
ADDR[12:0] ADDR[12:0] DATA[15:0] ram_sel
ROM& read ADDR_DECODE FLAGS ena rom_sel
, 模块功能描述
1、 RISC_CPU模块由时钟发生模块、指令寄存模块、累加模块、ALU模块、
状态控制模块、程序计数器模块和地址选择模块构成。
(i) 时钟发生 产生不同的时钟信号以满足其他模块的时钟要求;
(ii) 指令寄存 对指令进行寄存,采用16位总线;
(iii) 累加器 用来存放当前的运算结果;
(iv) 数据控制 控制累加器的数据输出;
(v) ALU 根据不同的操作码实现加、减、异或、跳转等基本操作
并控制;
(vi) 程序计数 提供改变指令地址,以便读取指令;
(vii) 地址选择 选择输出的地址是程序计数地址还是数据地址。
2、 RAM模块模拟CPU的快速随机存储器,可读可写;
3、 ADDR_DECODE模块是地址译码器,用来选通ROM或RAM;
4、 ROM&FLAGS模块中,ROM模拟CPU的外部存储设备,只可读不可写;
FLAGS为状态存储器,存放进位、借位、溢出、异常等状态字。 , 模块接口标注(参数、
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
)
时钟发生器
CLK1
CLK1
CLK ALU_CLK CLKGEN ALU_CLK CLK
FETCH RESET FETCH RESET
时钟发生器
指令寄存器
DATA[15:0] OPCODE[2:0] DATA[15:0]
LOAD_IR opc_iraddrs[15:0] ENA
CLK1 REGISTER IR_ADDR[12:0] CLK1
RESET
RST
累加器
ACCUMULATOR
ALU_OUT[15:0] DATA[15:0] ACCUM[15:0] LOAD_ACC ACCUM[15:0] ENA
CLK1 ACCUMULATOR CLK1 RST RST
ALU
DATA[15:0] ZERO DATA[15:0] ZERO
ALU_OUT[15:0] ALU ALU_OUT[15:0]
ACCUM[15:0] ACCUM[15:0] ALU_CLOCK OPCODE[2:0]
ALU_CLOCK OPCODE[2:0]
数据控制器
DATACTL
ALU_OUT[15:0]
IN[15:0]
DATA[15:0] DATA[15:0] DATACTL_ENA DATA_ENA
地址选择器
ADDRPC_ADDR[12 : 0]PC_ADDR[12 : 0]ADDR[12 : 0]ADDR[12 : 0]IR_ADDR[12 : 0] IR_ADDR[12 : 0]
FETCH
FETCH
程序计数器
COUNTER
IR_ADDR[12 : 0] IR_ADDR[12 : 0]
LOAD_PC LOAD PC_ADDR[12 : 0]
PC_ADDR[12 : 0] INC_PC CLOCK
RESET RST
状态控制器
CLK1INC_PCCLK1INC_PC
ZEROLOAD_ACCZEROLOAD_ACC
LOAD_PCFETCHLOAD_PCFETCH
MEM_RDmachinectl ENAENARDRSTRSTMEM_WRMACHINEWROPCODE[2:0]
OPCODE[2:0]LOAD_IRLOAD_IR
HALTINT_FLAGHALTINT_FLAG
DATACTL_ENADATACTL_ENA
6、状态
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图:
, 单流水线
开机
YES异常,
NO
指向开始地指向堆栈地
址址
取指
翻译指令YES
复位,
指令译码NO 器加1
YES停机HLT?
NO
JMP?其他?STO?
地址送程序计读地址数据送累加器数器
ALU进行运算
指向下一
条指令