基于VerilogHDL的简单CPU.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于VerilogHDL的简单CPU设计   摘要:本文实现了一个基于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这三个地址中数据的变化即可得出指令是否正确执行。

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档