毕业设计(论文)MCS51单片机CPU核的设计与仿真.doc

上传人:土8路 文档编号:11072478 上传时间:2021-06-26 格式:DOC 页数:36 大小:441.50KB
返回 下载 相关 举报
毕业设计(论文)MCS51单片机CPU核的设计与仿真.doc_第1页
第1页 / 共36页
毕业设计(论文)MCS51单片机CPU核的设计与仿真.doc_第2页
第2页 / 共36页
毕业设计(论文)MCS51单片机CPU核的设计与仿真.doc_第3页
第3页 / 共36页
毕业设计(论文)MCS51单片机CPU核的设计与仿真.doc_第4页
第4页 / 共36页
毕业设计(论文)MCS51单片机CPU核的设计与仿真.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《毕业设计(论文)MCS51单片机CPU核的设计与仿真.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)MCS51单片机CPU核的设计与仿真.doc(36页珍藏版)》请在三一文库上搜索。

1、浙 江 理 工 大 学 毕业论文(设计)诚信声明 我谨在此保证:本人所写的毕业论文(设计),凡引用他人的研 究成果均已在参考文献或注释中列出。论文(设计)主体均由本人独 立完成,没有抄袭、剽窃他人已经发表或未发表的研究成果行为。 如出现以上违反知识产权的情况,本人愿意承担相应的责任。 声明人(签名): 年 月 日 摘 要 MCS-51 单片机是在一块芯片中集成了 CPU、RAM、ROM、定时器/计数器和多功 能 I/O 等一台计算机所需要的基本功能部件,是业界广泛使用的单片机系列。基于 FPGA 平台的 8051 单片机 CPU 核与传统 MCS-51 单片机完全兼容,但速度约为传统单 片机的

2、 20 倍,且在 FPGA 内可轻松的集成许多高性能系统功能,这将使系统的设计 效率和系统性能获得极大的提高,这也是现代电子设计技术的发展方向。本课题用 硬件描述语言设计 MCS-51 CPU 核,从 CPU 的总体结构到局部功能的实现采用了自顶 向下的设计方法和模块化的设计思想,利用 FPGA,设计实现了八位 CPU 核。本设计 的 CPU 兼容 51 指令,在时钟频率和指令的执行效率指标上均优于传统的 MCS- 51CPU。本设计以硬件描述语言代码形式存在,可与任何综合库、工艺库以及 FPGA 结合开发出用户需要的固核和硬核,可读性好,易于扩展使用,易于升级,比较有 实用价值。本设计通过

3、FPGA 验证。 关键字:Verilog HDL; CPU; FPGA ABSTRACT MCS-51 MCU is a single chip integrated CPU, RAM, ROM, timer / counters and multi-function I / O such as a computers basic features required, is the industrys widely used microcontroller series. 8051 FPGA-based CPU platform with the traditional core is ful

4、ly compatible with MCS-51 microcontroller, but the speed is about 20 times that of traditional single chip, and the FPGA can be easily integrated within a number of high- performance system functions, which will enable the design of the system efficiency and system Be greatly improved performance, w

5、hich is the development of modern electronic design direction. The issue with the hardware description language design MCS-51 CPU core, from the CPU to the local function of the overall structure of the realization of using top-down design and modular design, the use of FPGA, design and implementati

6、on of the eight CPU cores. The CPU model in this paper can execute the MCS-51MCU assemble language instruction sets, and is better than the traditional MCS-51 MCU on both clock frequency and the execution efficiency of the instruction. This design was existed in a form of HDL source code,which can b

7、e reused in many SoC designsThis model can be read easily, updated easily and extended freely, so it has a practical value in SoC designThis design was implemented on FPGA. Keywords:Keywords: Verilog HDL ; CPU ; FPGA 目目 录录 摘 要 Abstract 第 1 章 绪论.1 1.1 选题背景1 1.2 国内外发展及现状1 1.3 课题的主要内容2 第 2 章 CPU 的结构及设计

8、.4 2.1 CPU 的简介4 2.2 CPU 的结构4 2.2.1 时钟发生器.4 2.2.2 指令寄存器.5 2.2.3 累加器.6 2.2.4 算术运算器.6 2.2.5 数据控制器.7 2.2.6 地址多路器8 2.2.7 程序计数器8 2.2.8 状态控制器.9 2.2.9 外围模块.11 第 3 章 CPU 的功能.13 3.1 CPU 的操作.13 3.1.1 系统的复位和启动操作.13 3.1.2 总线读操作.13 3.1.3 总线写操作13 3.2 CPU 的寻址方式和指令集 14 3.3 汇编14 第 4 章 CPU 的仿真和验证.16 4.1 CPU 模块的仿真 16 4

9、.2 CPU 模块的综合 18 4.3 CPU 模块的优化和优局布线 25 第 5 章 总结和展望.27 参考文献.28 致 谢29 附 录30 第 1 章 绪论 1.1 选题背景 单片机自从被推出后开始迅速发展,应用领域也在不断扩大,现己成为微型计 算机的重要分支,单片机处理数据的能力在不断提高,速度也越来越快,长期以来被 广泛的应用在各领域。 同时随着集成电路和计算机技术的飞速发展,电子设计自动 化(EDA)以计算机的硬件和软件为基本的工作平台,已经发展成为可以代 替设计者 完成电子系统设计的重要工具。其中 FPGA 是一种新兴的可编程逻辑器件(PLD),与其 它可编程逻辑器件(PLD)相

10、比,具有更高的密度、更快的工作速度和更大的编程灵活 性。FPGA 是一种新兴的可编程逻辑器件,可以取代现有的全部微机接口芯片,实现 微机系统中的存储器、地址译码等多种功能,具有更高的密度、更快的工作速度和 更大的编程灵活性,被广泛应用于各种电子类产品中。单片机具有性能价格比高、 功能灵活、易于人机对话、良好的数据处理能力特点;FPGA 则具有高速、高可靠以 及开发便捷、规范等优点。以此两类器件相结合的电路结构会有很多的发展空间。 基于 FPGA 的高密度、高速度、现场可编程的能力和单片机强大的数据处理功能 设计的 CPU 采用了与传统单片机不同的实现架构,利用 FPGA 的边沿触发的特点,单

11、周期单指令,因而无论在时钟频率还是在汇编指令的执行效率上都明显优于传统的 MCS-51 单片机。这个设计的扩展接口控制器部分很好地扩充了传统单片机的功能, 而且由于具有 较好的可移植性,可以只利用扩展接口控制器部分实现对现有的单片 机进行升级,节约更换高性能 CPU 而带来的产品提升,达到适应新的要求。目前以 硬件描述语言所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。 1.2 国内外发展及现状 微控制器简称 MCU,又称单片机,是指将计算机的 CPU、RAM、ROM、定时计数 器和多种 IO 接口集 成在一块芯片上,形成芯片级

12、的计算机。单片机的出现的初 衷是面向工业控制,目前它己经广泛应用于各个领域及各个行业。 1976 年 Intel 公司推出低档 8 位单片机 (MCS-48 系列)。在 1980 年 Intel 公司 推出了 比 MCS-48 系列性能更为优越的 8 位单片机 8051(MCS-51 系列)。1983 年 Intel 公司又推 出了 CMOS 型 80C51、16 位单片机 5096(MCS-96 系列)。众多公司先 后推出了 32 位单片机、 64 位单片机。尽管单片机的设计技术在不断的发展,处理 能力越来越强,从 4 位到 8 位,再到 16 位、32 位,甚至出现了 64 位,但有一个现

13、 象却十分有趣,8 位单片机在经历了 三十多年之后,依然显示出强大而旺盛的生命 力,其市场占有率一直高居榜首。与从 8 位机迅速向 16 位、32 位、64 位过渡的通 用计算机相比,8 位微控制器从 20 世纪 70 年代初期诞生至今,虽历经从单片微型 计算机到微控制器、单片机和 SoC 的变迁, 8 位机始终是嵌入式低端应用的主要机 型,而且在未来相当长的时间里,仍会保持这个势头。这是因为嵌入式系统和通用 计算机系统有完全不同的应用特性,从而走向完全不同的技术发展道路。在 8 位单 片机能基本满足其响应速度要求后,数据宽度不是技术发展的主要矛盾。因此 8 位 微控制器会稳定下来,其技术发展

14、方向转为最大限度地满足对象的采集、控制、可 靠性和低功耗等品质要求。鉴于嵌入式低端应用对象的有限响应要求,嵌入式系统 低端应用的巨大市场及 8 位机具有的速度潜力,可以预计在未来相当长的时间内, 8 位机仍然是嵌入式应用中的主流机型。 现今市场上流行的典型的 8 位微控制器,与传统的 8 位单片机相比,大多数 是由 VerilogHDL 实现的软处理器 IP Core,可以在各种 FPGA 上实现,设计灵活方 便而且易于进行功能扩展。因此,这些单片机将在基于可编程逻辑的应用领域中发 挥积极的作用。各大单片机厂家都推出了自己的 8 位单片机内核,如飞思卡尔的 RS08 内核、NEC 的 78K0

15、、Actel 的 Corc8051、Mkcrochip 的 PIC 内核等。因此研究 8 位单片机内核具有广泛的现实意义。由于其具有较高的处理性能和较少的资源占 用,故具有更加广泛的应用前景。 13 课题的工作内容 本次毕业设计主要是对 MCS-51 单片机 进行研究。用硬件描述语言设计 MCS- 51 CPU 核,对于 CPU 核的结构进行深入了解和认知,讨论并设计 CPU 的运算逻辑单 元、取址模块、译码执行模块,确定正确的方案。对于硬件描述语言和相关仿真软 件进行讨论确定,并调试代码,仿真通过。以 MCS-51 系列单片机的指令集为蓝本, 利用原理框图和硬件描述语言的输入方式完成实现了处

16、理器的各种功能。在 ASIC 或者 FPGA 上进行测试,完成所需要的逻辑功能。课题工作内容如下,共分为以下 几步: (1)确定 CPU 的总体结构,划分与定义各个层次模块的结构和功能。根据设计 的需要设计 CPU 体系架构形式,并选取与 MCS-51 兼容的指令集作为设计的指令集。 (2)研究 MCS-51CPU 的硬件架构及所有指令的工作过程,深入理解工作 原理和 设计方法,完成各个层次模块功能的划分与定义。 (3)使用硬件描述语言对 CPU 核进行具体的描述,书写代码。 (4) 调试代码,仿真通过。搭建测试平台,对设计完成的 CPU 进行完备的功能 测试。 (5) 对通过功能测试的进行优

17、化、布局布线,进行硬件验证。 第 2 章 CPU 的结构及设计 2.1 CPU 的简介 CPU 是一个复杂的数字逻辑电路,包含八个基本部件: 1) 时钟发生器 2) 指令寄存器 3) 累加器 4) 算术逻辑运算单元 5) 数据控制器 6) 状态控制器 7) 程序计数器 8) 地址多路器 各部件的具体结构和逻辑关系在下面的小节里逐一进行介绍。 2.2 CPU 的结构 2.2.1 时钟发生器 图图 2-12-1 时钟发生器时钟发生器 时钟发生器 clkgen (如图 2-1 所示)利用外来时钟信号 clk 来生成一系列 时钟信号 clk1、fetch、alu_clk 送往 CPU 的其他部件。其中

18、 fetch 是外来时钟 clk 的八分频信号。利用 fetch 的上升沿来触发 CPU 控制器开始执行一条指令,同 时 fetch 信号还将控制地址多路器输出指令地址和数据地址。clk1 信号用作指令寄 存器、累加器、状态控制器的时钟信号。alu_clk 则用于触发算术逻辑运算单元。 时钟发生器 clkgen 的波形见下图 2-2 所示: 其 Verilog HDL 程序见下面的模块: 2.2.2 指令寄存器 图图 2 2- -3 3 指指令令寄寄存存器器 指令寄存器如图 2-3 所示,主要用于寄存指令。 指令寄存器的触发时钟是 clk1,在 clk1 的正沿触发下,寄存器将数据总线送 来的

19、指令存入高 8 位或低 8 位寄存器中。但并不是每个 clk1 的上升沿都寄存数据总 线的数据,因为数据总线上有时传输指令,有时传输数据。什么时候寄存,什么时 候不寄存由 CPU 状态控制器的 load_ir 信号控制。load_ir 信号通过 ena 口输入到 DATA7:0 RST ENA CLK1 opc_iraddrs15:0 REGISTER INSTRUCTION REGISTER DATA7:0 LOAD_IR CLK1 RESET OPCODE2:0 IR_ADDR12:0 clk clk1 clk2 clk4 fetch alu_clk 图图 2 2- -2 2 时时钟钟发发

20、生生器器 c cl lk kg ge en n 的的波波形形 指令寄存器。复位后,指令寄存器被清为零。 每条指令为 2 个字节,即 16 位。高 3 位是操作码,低 13 位是地址。 (CPU 的地 址总线为 13 位,寻址空间为 8K 字节。 )本设计的数据总线为 8 位,所以每条指令需 取两次。先取高 8 位,后取低 8 位。而当前取的是高 8 位还是低 8 位,由变量 state 记录。state 为零表示取的高 8 位,存入高 8 位寄存器,同时将变量 state 置 为 1。下次再寄存时,由于 state 为 1,可知取的是低 8 位,存入低 8 位寄存器中。 2.2.3 累加器 图

21、图 2-42-4 累加器累加器 累加器如图 2-4 所示,用于存放当前的结果,它也是双目运算其中一个数据来 源。复位后,累加器的值是零。当累加器通过 ena 口收到来自 CPU 状态控制器 load_acc 信号时,在 clk1 时钟正跳沿时就收到来自于数据总线的数据。 2.2.4 算术运算器 DATA7:0 RST ENA CLK1 ACCUM7:0 ACCUMULATOR ACCUMULATOR ALU_OUT7:0 LOAD_ACC CLK1 RST ACCUM7:0 DATA7:0 ACCUM7:0 ALU_CLOCK OPCODE2:0 ZERO ALU_OUT7:0 ALU DAT

22、A7:0 ACCUM7:0 ZERO ALU_OUT7:0 ALU_CLOCKOPCODE2:0 图图 2-52-5 算术运算器算术运算器 算术逻辑运算单元(如图 2-5 所示) 根据输入的 8 种不同操作码分别实现相 应的加、与、异或、跳转等 8 种基本操作运算。利用这几种基本运算可以实现很多 种其它运算以及逻辑判断等操作。 2.2.5 数据控制器 图图 2-62-6 数据控制器数据控制器 数据控制器如图 2-6,它的作用是控制累加器数据输出,由于数据总线是各种 操作时传送数据的公共通道,不同的情况下传送不同的内容。有时要传输指令,有 时要传送 RAM 区或接口的数据。累加器的数据只有在需要

23、往 RAM 区或端口写时才允 许输出,否则应呈现高阻态,以允许其它部件使用数据总线。 所以任何部件往总线 上输出数据时,都需要一控制信号。而此控制信号的启、停,则由 CPU 状态控制器 输出的各信号控制决定。数据控制器何时输出累加器的数据则由状态控制器输出的 控制信号 datactl_ena 决定。 2.2.6 地址多路器 DATACTL IN7:0 DATA_ENA DATA7:0 ALU_OUT7:0 DATACTL_ENA DATA7:0 ADDR PC_ADDR12 : 0 IR_ADDR12 : 0 FETCH ADDR12 : 0 PC_ADDR12 : 0 IR_ADDR12 :

24、 0 FETCH ADDR12 : 0 图图 2-72-7 地址多路器地址多路器 地址多路器如图 2-7,它用于选择输出的地址是 PC(程序计数)地址还是数据/ 端口地址。每个指令周期的前 4 个时钟周期用于从 ROM 中读取指令,输出的应是 PC 地址。后 4 个时钟周期用于对 RAM 或端口的读写,该地址由指令中给出。地址的选 择输出信号由时钟信号的 8 分频信号 fetch 提供。 2.2.7 程序计数器 COUNTER IR_ADDR12 : 0 LOAD CLOCK RST PC_ADDR12 : 0 PC_ADDR12 : 0 IR_ADDR12 : 0 LOAD_PC INC_P

25、C RESET 图图 2 2- -8 8 程程序序计计数数器器 程序计数器如图 2-8,它用于提供指令地址。以便读取指令,指令按地址顺 序存放在存储器中。有两种途径可形成指令地址:其一是顺序执行的情况,其二 是遇到要改变顺序执行程序的情况,例如执行 JMP 指令后,需要形成新的指令地 址。下面就来详细说明 PC 地址是如何建立的。 复位后,指令指针为零,即每次 CPU 重新启动将从 ROM 的零地址开始读取指令 并执行。每条指令执行完需 2 个时钟,这时 pc_addr 已被增 2,指向下一条指令。 (因为每条指令占两个字节。 )如果正执行的指令是跳转语句,这时 CPU 状态控制器 将会输出

26、load_pc 信号,通过 load 口进入程序计数器。程序计数器(pc_addr)将 装入目标地址(ir_addr) ,而不是增 2。 2.2.8 状态控制器 图图 2 2- -9 9 状状态态控控制制器器 状态控制器如图 2-9,它由两部分组成: 1)状态机(上图中的 MACHINE 部分) 2)状态控制器(上图中的MACHINECTL部分) 状态机控制器接受复位信号 RST,当 RST 有效时通过信号 ena 使其为 0,输入 到状态机中停止状态机的工作。 状态控制器的 VerilogHDL 程序见下面模块: /-/ module machinectl( ena, fetch, rst)

27、; output ena; input fetch, rst; reg ena; always (posedge fetch or posedge rst) begin if(rst) ena=0; else ena=1; end endmodule /-/ 状态机是 CPU 的控制核心,用于产生一系列的控制信号,启动或停止某些部件。 CLK1 OPCODE2:0 INT_FLAG ENAENA FETCH RST machinectl CLK1 ZERO ZERO FETCH RST OPCODE2:0 INT_FLAG INC_PC LOAD_ACC LOAD_PC RD WR LOAD_

28、IR HALT DATACTL_ENA INC_PC LOAD_ACC LOAD_PC MEM_RD MEM_WR LOAD_IR HALT DATACTL_ENA MACHINE CPU 何时进行读指令读写 I/O 端口,RAM 区等操作,都是由状态机来控制的。状 态机的当前状态,由变量 state 记录,state 的值就是当前这个指令周期中已经 过的时钟数(从零计起) 。 指令周期是由 8 个时钟周期组成,每个时钟周期都要完成固定的操作。 1)第0个时钟,因为CPU状态控制器的输出: rd和load_ir为高电平,其余均为 低电平。指令寄存器寄存由 ROM送来的高8位指令代码。 2)第1

29、个时钟,与上一时钟相比只是 inc_pc从0变为1故PC增1,ROM送来低8位 指令代码,指令寄存器寄存该 8位代码。 3)第2个时钟,空操作。 4)第3个时钟,PC增1,指向下一条指令。若操作符为 HLT,则输出信号HLT为 高。如果操作符不为 HLT,除了PC增一外(指向下一条指令),其它各控制线输出 为零。 5)第4个时钟,若操作符为 AND、ADD、XOR或LDA,读相应地址的数据;若为 JMP,将目的地址送给程序计数器;若为 STO,输出累加器数据。 6)第5个时钟,若操作符为 ANDD、ADD或XORR,算术运算器就进行相应的运 算;若为LDA,就把数据通过算术运算器送给累加器;若

30、为 SKZ,先判断累加器的 值是否为0,如果为0,PC就增1,否则保持原值;若为 JMP,锁存目的地址;若为 STO,将数据写入地址处。 7)第6个时钟,空操作。 8)第7个时钟,若操作符为SKZ且累加器值为0,则PC值再增1,跳过一条指令,否 则PC无变化。 2.2.9 外围模块 为了对 CPU 进行测试,需要有存储测试程序的 ROM 和装载数据的 RAM、地址 译码器。 (1).地址译码器 module addr_decode( addr, rom_sel, ram_sel); output rom_sel, ram_sel; input 12:0 addr; reg rom_sel, r

31、am_sel; always ( addr ) begin casex(addr) 13b1_1xxx_xxxx_xxxx:rom_sel,ram_sel=2b01; 13b0_xxxx_xxxx_xxxx:rom_sel,ram_sel=2b10; 13b1_0 xxx_xxxx_xxxx:rom_sel,ram_sel=2b10; default:rom_sel,ram_sel=2b00; endcase end endmodule 地址译码器用于产生选通信号,选通 ROM 或 RAM。 FFFFH-1800H RAM 1800H-0000H ROM (2).RAM 和 ROM modul

32、e ram( data, addr, ena, read, write ); inout 7:0 data; input 9:0 addr; input ena; input read, write; reg 7:0 ram 10h3ff:0; assign data = ( read always (posedge write) begin ramaddr=data; end endmodule module rom( data, addr, read, ena ); output 7:0 data; input 12:0 addr; input read, ena; reg 7:0 mem

33、ory 13h1fff:0; wire 7:0 data; assign data= ( read endmodule ROM 用于装载测试程序,可读不可写。 RAM 用于存放数据,可读可写。 第 3 章 CPU 的功能 3.1 CPU 操作 一个微机系统为了完成自身的功能,需要 CPU 执行许多操作。以下是 CPU 的 主要操作: (1)系统的复位和启动操作; (2)总线读操作; (3)总线写操作。 3.1.1 系统的复位和启动操作 CPU 的复位和启动操作是通过 reset 引脚的信号触发执行的。当 reset 信号 一进入高电平, CPU 就会结束现行操作,并且只要 reset 停留在高

34、电平状态, CPU 就维持在复位状态。在复位状态, CPU 各内部寄存器都被设为初值,全部为 零。数据总线为高阻态,地址总线为 0000H,所有控制信号均为无效状态。 reset 回到低电平后,接着到来的第一个 fetch 上升沿将启动 RISC_CPU 开始工 作,从 ROM 的 000 处开始读取指令并执行相应操作。 3.1.2 总线读操作 每个指令周期的前 0-3 个时钟周期用于读指令,在状态控制器一节中已详细 讲述,这里就不再重复。第 3.5 个周期处,存储器或端口地址就输出到地址总线 上,第 4-6 个时钟周期,读信号 rd 有效,数据送到数据总线上,以备累加器锁 存,或参与算术、逻

35、辑运算。第 7 个时钟周期,读信号无效,第 7.5 个周期, 地址总线输出 PC 地址,为下一个指令做好准备。 3.1.3 总线写操作 每个指令周期的第 3.5 个时钟周期处,写的地址就建立了,第 4 个时钟周期输 出数据,第 5 个时钟周期输出写信号。至第 6 个时钟结束,数据无效,第 7.5 时钟 地址输出为 PC 地址,为下一个指令周期做好准备。 3.2 CPU 寻址方式和指令集 CPU 的指令格式如下图 3-1 所示: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 指令 地址 图图 3 3- -1 1 C CP PU U 的的指指令令格格式式 它的指令系统

36、仅由 8 条指令组成。 1) HLT 停机操作。该操作将空一个指令周期,即 8个时钟周期。 2) SKZ 为零跳过下一条语句。该操作先判断当前 alu中的结果是否为零,若 是零就跳过下一条语句,否则继续执行。 3) ADD 相加。该操作将累加器中的值与地址所指的存储器或端口的数据相 加,结果仍送回累加器中。 4) AND 相与。该操作将累加器的值与地址所指的存储器或端口的数据相与, 结果仍送回累加器中。 5) XOR 异或。该操作将累加器的值与指令中给出地址的数据异或,结果仍送 回累加器中。 6) LDA 读数据。该操作将指令中给出地址的数据放入累加器。 7) STO 写数据。该操作将累加器的

37、数据放入指令中给出的地址。 8) JMP 无条件跳转语句。该操作将跳转至指令给出的目的地址,继续执行。 CPU 是 8 位微处理器,一律采用直接寻址方式,即数据总是放在存储器中,寻址 单元的地址由指令直接给出。这是最简单的寻址方式。 3.3 汇 编 汇编程序是为了调试软核而开发的,手工编写机器码很容易出错并且工作量很 大。在调试过程中修改指令集时,汇编程序也要作相应的修改。所以要求编译器的 结构简单性能可靠,在程序中必要的地方可以用堆叠代码方法实现,不必考虑编程 技巧和汇编器效率问题。汇编程序用于测试 CPU 的基本指令集,如果 CPU 的各条指 令执行正确,停止在 HLT 指令处。如果程序在

38、其它地址暂停运行,则有一个指令出 错。程序中,符号后的十六进制表示存储器的地址,每行的/后表示注释。下面是 本文设计的一小段程序代码,编译好的汇编机器代码装入虚拟 ROM,要参加运算的 数据装入虚拟 RAM 就可以开始进行仿真。 机器码 地址 汇编助记符 注释 00 /地址声明 101_11000 /00 BEGIN: LDA DATA_2 0000_0001 011_11000 /02 AND DATA_3 0000_0010 100_11000 /04 XOR DATA_2 0000_0001 001_00000 /06 SKZ 0000_0000 000_00000 /08 HLT /A

39、ND doest work 第 4 章 CPU 模块的仿真和验证 4.1 CPU 模块的仿真 为了对所设计的 CPU 模型进行验证,需要把 CPU 包装在一个模块下,这样其内 部连线就隐蔽起来,从系统的角度看就显得简洁,还需要建立一些必要的外围器件 模型,例如储存程序用的 ROM 模型、储存数据用的 RAM 和地址译码器等。这些模型 都可以用 VerilogHDL 描述,由于不需要综合成具体的电路只要保证功能和接口信号 正确就能用于仿真。也就是说,用虚拟器件来代替真实的器件对所设计的 CPU 模型进 行验证,检查各条指令是否执行正确,与外围电路的数据交换是否正常。可在下面 的仿真中来代替真实的

40、器件,用于验证 CPU 模型是否能正确地运行装入 ROM 和 RAM 的程序。在 CPU 的电路图上加上这些外围电路把有关的电路接通,见图 4-1。最核 心的就是的左边 RSC 模块,对指令的译码和执行都是在 RSC 模块内部完成的,而且 RSC 模块还对其余三个模块进行控制。 图右上角是一块有着 256 个字节的装载数据 的 RAM,RSC 有四个信号对它实现了读写操作。第一个信号就是写使能 write_ram; 第二个信号就是读使能 read_ram;第三个信号是 RAM 的地址信号 _addr_ram;最后一个就是通用数据总线 data_ram。图右下角是一 个存储测试程序的 ROM 存

41、储器,因其容量为 4k,有 12 根地址线,命名为 addr_rom;数据输出为 data_rom . 另外在左下角有一个 Addr_decode 模块,命名为 addr ,有 2 个数据线 ram_sel 和 rom_sel 分别 连接着 RAM 模块和 ROM 模块。同时也可以用 VerilogHDL 模块调用的方法把这些外围 电路的模块连接上,这跟用真实的电路器件调试情况很类似。 图图 4-14-1 CPUCPU 总体模块图总体模块图 按照 CPU 总体模块图,可实现 CPU 模块的仿真。步骤如下:首先按照表示各 模块之间连线的电路图编制测试文件,即定义 Verilog 的 wire 变

42、量作为连线,连接 各功能模块之间的引脚,并将输入信号引入,输出信号引出。如若需要,可加入必 要的语句显示提示信息。例如, cpu 的测试文件就是 cputop.v。其次,使用仿真 软件进行仿真, ,以下介绍 Modelsim 的使用。在进入 Modelsim 的环境之后,在 file 项选择 change direction 来确定编制的文件所在的目录,然后在 design 项选 择或创建一个 library,完成后即可开始编译。在 design 项选 compile项,进入编 译环境,选定要编译的文件进行编译。完成编译后,还是在 compile项,选择 load new design 项,选

43、中编译后提示的 top module 的名字,然后开始仿真。在 view 项可选波形显示,信号选择,功能和操作简单明了,下图 4-2 这是 ModelSim SE6.0 进行波形仿真的结果。在 ISE 中可以运行 Timing Analyzer 生成详细的时序 报告,本设计中 Minimum period: 12.032ns (Maximum Frequency: 83.112MHz), Minimum input arrival time before clock: 6.479ns,Maximum output required time after clock: 9.767ns。 图图 4

44、-24-2 仿真时序图仿真时序图 4.2 CPU 模块的综合 在对所设计的 CPU 模型进行验证后,如没有发现问题就可开始做下一步的工作 即综合。综合工作往往要分阶段来进行,这样便于发现问题。 所谓分阶段就是指: 第一阶段:先对构成 CPU 模型的各个子模块,如状态控制机模块(包括 machine 模块,machinectl 模块) 、指令寄存器模块( register 模块) 、算术逻 辑运算单元模块( alu 模块)等,分别加以综合以检查其可综合性,综合后及时 进行后仿真,这样便于及时发现错误,及时改进。 第二阶段:把要综合的模块从仿真测试信号模块和虚拟外围电路模型(如 ROM 模块、RA

45、M 模块、显示部件模块等)中分离出来,组成一个独立的模块,其中 包括了所有需要综合的模块。然后给这个大模块起一个名字,如本章中的例子, 我们要综合的只是 CPU 并不包括虚拟外围电路,可以给这一模块起一个名字,例 如称它为 RSC_CHIP 模块。如用电路图描述的话,我们还需给它的引脚加上标准的 引脚部件并加标记,见图 4-3。 图图 4-34-3 RSCRSC 模块模块 第三阶段:加载需要综合的模块到综合器,本例所使用的综合器是 Synplify, 选定的 FPGA 是 Altera FLEX10K,针对它的库进行综合。 也可以使用 QuartusII 或其他综合工具进行综合。综合器综合的结

46、果会产生一 系列的文件,其中有一个文件报告用了所使用的基本单元,各部件的时间参数以 及综合的过程。见下面的报告 ,它就是这个 CPU 芯片所用的综合报告,综合所用 的库为 Altera FLEX10K 系列的 FPGA 库,约定的失踪频率为 80MHz。 /- CPU 芯片综合结果报告开始 -/ #Program:Synplify Pro 8.1 #OS:Windows_NT $ Start of Compile #Fri Jul 01 10:11:03 2009 Synplify Verilog Compiler, version 3.1.0, Build 049R,built May 3

47、2005 Copyright (C) 1994-2005, Synplicity Inc. All Rights Reserved I:”C:Program FileSynplicityfpga_81libalteraaltera.v” I:”C:Program FileSynplicityfpga_81libalteraaltera_mf.v” I:”C:Program FileSynplicityfpga_81libalteraaltera_lpm.v” I:”C:vlogexeex17_2cpu.v” I:”C: vlogexeex17_2cpu.v”:“C:vlogexeex17_2c

48、lk_gen.v” I:”C: vlogexeex17_2cpu.v”:“C:vlogexeex17_2accum.v” Verilog syntax check successful! Compiler output is up to date. No re-compile necessary Selecting top level module cpu N:”C:vlogexeex17_2clk_gen.v”:2:7:2:13Synthesizing module clk_gen N: CL201:“C:vlogexeex17_2clk_gen.v”:18:0:18:5Trying to extract state machine for register state Extracted state machine for register state State machine has 9 reachable states with original encodings of: 00000000 000000

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1