摘要:本文实现了一个基于VerilogHDL的简单CPU,系统由运算器、控制器、译码器、存储器、指令计数器五大模块构成。在对各个模块时序仿真实验的基础上,系统整体功能测试成功。系统具有良好的稳定性和灵活性,指令集易扩展。
关键词:VerilogHDL;CPU;时序仿真
中图分类号:TP334
1 引言
VerilogHDL【1】是一种硬件描述语言(HDL:HardwareDiscriptionLanguage),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。由于Verilog接近C语言的语言规则,适合进行FPGA的开发和教学工作,得到了广泛的应用。
本文基于对CPU的研究,设计并实现了一个基于Verilog的简单CPU,并成功进行了仿真实验。
2 CPU的功能和结构
2.1 CPU的功能
本CPU模型由五大部分组成,分别是运算器、控制器、译码器、存储器、指令计数器。实现了一个简单指令集,包括停机指令,加,减,与,加载,存储等指令。同时能进行数据的存储和管理【2】。
2.2 CPU的结构
图2.2.1 CPU的架构图
CPU的整体结构如上面两个图所示,各个模块协调工作,共同完成CPU的每一次任务。指令格式为“Op+0+OPD1+OPD2”其中op为3位操作码,0为固定位(或者说是没用的一位),OPD1,OPD2为6位操作数的地址(之前已经写入内存)。寻址方式固定为立即数寻址。
3 CPU主要模块的实现
3.1 运算器模块ALU
算术逻辑运算单元ALU。根据输入的6种不同操作码分别实现相应的加、减、与、加载,存储,停机等6种基本操作运算。利用这几种基本运算可以实现很多种其它运算以及逻辑判断等操作:(1)HLT停机操作。该操作将空一个指令周期,即6个时钟周期;(2)ADD相加。该操作将取存储器中的两个数据相加;(3)AND相与。该操作将存储器中的两个数据相与;(4)SUB相减。该操作将存储器中的两个数据相减;(5)LDA读数据。该操作将指令中给出地址的数据放入累加器;(6)STA写数据。该操作将数据写入内存。
3.2 控制器模块control
控制器模块【4】对整个CPU的工作进行控制,决定本次任务要执行什么样的操作。
S0,S1,S2,S3,S4,S5分别控制指令运行中的各个步骤,其中s0有效时取指令,s1有效时译码,s2有效时从内存中读数据,s3有效时启动ALU进行运算,s4有效时写数据入内存,s5有效时pc加1。即这几个输出控制一条指令的整个执行过程。Addsel是用于决定数据的地址来自哪里,为1时从存储器中取数,为0时地址来与pc.Add_en,sub_en,and_en,pass_en为使能信号控制所进行的操作。由输入的opcode决定。
3.3 译码器encoder和存储器memory
译码器能够将代码特定的含义翻译出来,将操作数和操作码分离开来,以完成不同的工作。存储器主要实现:从存储器中读出数据,和将数据写入内存的功能。
WR为写控制端,有效时,把数据写入指定的存储器单元。Rd为读控制端,当有效时,从指定存储单元读数据。Addr为写入或者读出数据的地址。DRout和Grout为把数据读出写入到DR,GR的端口。
4 系统仿真测试
4.1 系统仿真方案
系统测试代码如下:
LDA001010001011
把10和11地址数据加载到GR和DR中
ADD001010001011
把10和11地址里面的数字相加送到GR
STA001100
把GR里面的值存入12地址
SUB001010001011
把10和11地址里面的数字相减送到GR
STA001101
把GR的值存入13地址
AND001010001011
把10和11地址里面的数字相与送到GR
STA001110
把GR的值存入14地址
HALT停止一个周期
LDA001100001101
把12和13地址数据加载到GR和DR中
LDA001110
把14地址里面的内容加载到GR
4.2 测试结果
经过时序仿真,我们观察内存中121314这三个地址中数据的变化即可得出指令是否正确执行。
测试结果是正确的,系统仿真成功。
5 结束语
VerilogHDL作为FPGA开发的优势越来越被人们接纳,本文实现了一个简单地CPU模型,并进行了成功的仿真实验。系统具有良好的稳定性和灵活性,指令集易扩展。
参考文献:
[1]潘松,黄继业.EDA技术实用教程[M].北京:科学出版社.
[2]王爱英.计算机组成与结构[M].北京:清华大学出版.
[3]肖海燕,杨建波.基于硬件描述语言的简单CPU[J].现代电子技术,2011(22):178-181.
[4]周宁宁,刘胜.基于FPGA技术的CPU模型机的设计与实现[J].南京邮电学院学报,2003(1):77-80.
作者简介:刘明达(1991.09.11-),男,山东,本科在读,FPGA开发、密码学;刘晓洁(1992.2-),广东揭东,本科在读,密码学。
作者单位:武汉大学计算机学院,武汉 430072