论文

更新时间:2023-03-08 07:33:21 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

北京工业大学 毕业设计(论文)任务书

题目基于FPGA的CPU设计与实现专业电子信息工程学号12521323姓名麻宇鹏

主要内容、基本要求、主要参考资料等:

【主要内容】

课题需要进行多方案比较,实现基于FPGA的CPU设计。 建议采用Altera CycloneIII,学院裕兴杯比赛用开发板实现。 【基本要求】

1、通过调研、学习等方式明确项目研究的方向、意义及必要性,确定具体的内容与实现方式。

2、研究项目实现的方法、建立开发研究的软件平台。 3、选择确立设计开发的方案。 4、制定系统的测试方案。 5、实施开发方案及测试方案。 6、设计优化及调整,做毕业论文。

【主要参考资料】

【1】 金明录、刘倩.数字系统设计与VHDL[M].北京:电子工业大学出版社.2008.8 【2】 吴厚航.FPGA设计实战演练(逻辑篇) [M].北京:清华大学出版社.2015.1 【3】 于斌、米秀杰.ModelSim电子系统分析仿真[M].北京:电子工业出版社,2011.12

完成期限:2016年6月 指导教师签章: 专业负责人签章:

2016年1月

北工大学实验学院(论文)

摘 要

随着计算机行业不断发展,基于流水线结构CPU的研究是计算机体系结构中的重要研究方向。设计现代处理器的几种最基本的结构处理技术主要有:RISC结构、指令流水线结构等等。RISC结构支持指令流水并强调指令流水的优化作用,它们的目标是开发处理器的指令级并行性,提高处理器的执行速度。

本设计是基于流水线技术的8位RISC CPU 设计。在本次设计中的RISC CPU是高档微机中所采用的一种带有精简指令集的CPU。它的特点是:指令系统小,一个时钟周期内可以执行一条或者多条指令;采用标准长度指令;存储器访问只使用加载和存储两个指令等;采用硬布线逻辑控制为主。流水线技术CPU 是一种将指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理,以加速程序运行过程的技术。指令的每步有各自独立的电路来处理,每完成一步,就进到下一步,而前一步则处理后续指令。流水线增大了CPU的指令吞吐量,即单位时间完成的指令条数,但是它没有减少指令各自的执行时间。完成一些简单的加减乘除运算,并仿真产生相对应的波形。

关键词: 精简指令集;RISC CPU;指令流水线;吞吐量;

I

北工大学实验学院(论文)

Abstract

As the computer industry development, based on the research of pipeline structure CPU is an important research direction in computer architecture. Design several kinds of most basic structure of modern processor processing technology mainly include: RISC structure, the structure of the command line, and so on. RISC structure support instructions flowing water and to emphasize the optimization of water, their goal is to develop the processor's instruction level parallelism, improve the execution speed of the processor.

This design is based on the assembly line of 8-bit RISC CPU design. In the design of RISC CPU is adopted in high-grade microcomputer with a reduced

instruction set of the CPU. Its features are: small instruction system, a clock cycle can perform one or more instructions; Use standard length instruction; Memory access using only load and store two instructions, etc. The hard wiring logic control is given priority to. Pipeline technology is a CPU instructions) multiple steps, each step and make different instructions operation overlap, so as to realize a few instructions parallel processing, to speed up the technology in the process of program is running. Instruction of each has a separate circuit to deal with, each step, into the next, and subsequent handling instructions in the previous step. Lines increased CPU

instruction throughput, per unit of time to complete the instructions article number, but it did not reduce the instruction execution time. Operation to complete some simple addition, subtraction, multiplication, and division, and the simulation waveform should be relative.

Key words: Reduced instruction set. RISC CPU. Command line; handling capacity;

II

北工大学实验学院(论文)

目录

摘 要.............................................................................................................................. I Abstract ......................................................................................................................... II 目录.............................................................................................................................. III 1 绪 论.......................................................................................................................... 1 1.1 课题研究背景与意义

1.2.2 超标量技术........................................................................................ 1 1.2 CPU技术主要成果 ......................................................................................... 2 1.3 CPU技术研究的发展趋势和存在的问题 ..................................................... 3 1.4 论文章节安排................................................................................................. 4 2 主要技术及工具简介................................................................................................ 5

2.1 EDA和QUARTUS ......................................................................................... 5 2.2 QUARTUS II 13.0开发流程 .......................................................................... 5 2.3 FPGA器件 ...................................................................................................... 7 3.8位RISC设计 ........................................................................................................... 9

3.1 方案论证......................................................................................................... 9 3.2 整体结构设计............................................................................................... 10 3.3 指令集设计................................................................................................... 11 3.2.1 寄存器型(R型) .................................................................................... 11

3.2.2 立即数型(I型) ............................................................................. 12 3.2.3 立即移位型(J型) ......................................................................... 12 3.4 本章小结....................................................................................................... 13 4 基于QuartusII的8位RISC实现 ......................................................................... 14

4.1 取指阶段....................................................................................................... 14 4.2 译码阶段....................................................................................................... 15 4.3 执行阶段....................................................................................................... 18 4.4 访存阶段和回写阶段设计........................................................................... 19 4.5 本章小结....................................................................................................... 20 5 系统仿真.................................................................................................................. 21

5.1 8位RISC整体设计与仿真 .......................................................................... 21 5.2 系统软件仿真.............................................................................................. 21 5.3 硬件实物验证............................................................................................... 25 5.4 本章小结....................................................................................................... 25

III

北工大学实验学院(论文)

6 总结.......................................................................................................................... 26 致谢.............................................................................................................................. 27 参考文献...................................................................................................................... 28

IV

北工大学实验学院(论文)

1 绪 论

1.1 课题研究背景与意义

随着计算机行业不断发展,基于流水线结构CPU的研究是计算机体系结构中的重要研究方向。设计现代处理器的几种最基本的结构处理技术主要有:RISC结构、指令流水线结构等等。RISC结构支持指令流水并强调指令流水的优化作用,它们的目标是开发处理器的指令级并行性,提高处理器的执行速度。在现代计算机中,流水线技术是重要的加快处理器运算速度的基本技术,也是提高处理器速度的关键技术之一。借鉴了工业流水线制造的思想,现代CPU也采用了流水线设计。在CPU中采用流水线设计也有助于提高CPU的频率。CPU的工作也可以大致分为指令的获取、解码、运算和得出结果的四个步骤。采用流水线设计之后,指令就可以连续不断地进行处理。在同一个较长的时间段内,显然拥有流水线设计的CPU能够处理更多的指令。

超级流水线技术是用在一个并行处理技术。超流水线技术是通过细化的流水,提高主频。使得机器在一个周期内完成一个甚至多个操作,其实质是用空间换取时间。 超流水处理器是相对于基准处理器而言的,一般CPU的流水线是基本的指令预取,译码,执行和写回结果四级。超流水线(superpiplined)是指某型CPU内部的流水线超过通常的5~6步以上,例如Pentium pro的流水线就长达14步。将流水线设计的步(级)数越多,其完成一条指令的速度越快,因此才能适应工作主频更高的CPU。P6的超流水线(Super Pipeline)在本质上仍为一种流水线技术,但它做了以下的改进。

A.流水线条数从奔腾的两条增至三条,还有十一个独立的执行单元并行支持。

B.在执行中采取了无序执行(out-of-orderprocessing)技术。即当某条指令需要一些数据而未能立即执行完毕时,它将被剔出流水线并等待数据,CPU则马上执行下条指令,就好比在装配线上发现某件产品不太合格,而被淘汰,等

待返工一个道理。这样,可以防止一条指令不能执行而影响了整个流水线的效率。

C.在P6中将指令划分成了更细的阶段,从而使逻辑设计、工序等等更为简化,提高了速度。在486芯片中,一条指令一般被划分为五个标准的部分,奔腾亦是如此。而在P6中,由于采用了近似于RISC的技术,一条指令被划分成了创纪录的十四个阶段。这极大地提高了流水线的速度。

1.2.2 超标量技术

超标量技术是RISC采用的有一种处理技术。它通过内装多条流水线来同时执行多个处理。其实质就是以空间换取时间。超标量(superscalar)试图在一个

1

北工大学实验学院(论文)

周期取出多条指令并行执行,是通过内置多条流水线来同时执行多个处理,其实质是以空间换取时间。但由于指令之间的相关性,即后一条指令需要前一条指令的结果,超标量CPU的性能是一个周期能执行1.2条指令,而为了取得这20%的性能改善,超标量CPU需要增加大量的硬件电路来调度这些同时取出的指令,比如寄存器重命名,预约站,重排序缓冲区等。超标量CPU不可能再进一步调高性能了,这是由于指令的并行度ILP所决定的,及时编译器可以使用诸如循环展开优化技术,超标量CPU对性能的改善也很有限。

1.2 CPU技术主要成果

在CPU领域,国外已经有如下成果:

1、SPAR处理器全称为“可扩充处理器架构”,是RISC微处理器架构之一。它最早于1985年由Sun电脑所设计,也是SPARC国际公司的注册商标之一。这家公司于1989年成立,其目的是向外界推广SPARC,以及为该架构进行符合性测试。此外该公司为了扩阔SPARC设计的生态系统,SPARC国际也把标准开放,并授权予多间生产商采用,包括德州仪器、Cypress半导体、富士通等。由于SPARC架构也对外完全开放,因此也出现了完全开放原始码的LEON处理器,这款处理器以VHDL语言写成,并采用LGPL授权。对于需要在所有应用层都提供高性能、一流可用性和无与伦比的可伸缩性的任务关键型应用程序而言,运行SPARC服务器是一个理想选择。Oracle制定了一个强有力的计划,可通过SPARC完全二进制兼容性确保最高级别的投资保护,这在二十多年以来的成百上千次部署中得到了验证。SPARC服务器为各种企业应用程序提供创世界纪录的性能只需大型机成本的一小部分即可获得无与伦比的任务关键型可靠性唯一包含片上加密和OracleSolaris安全框架的平台与Oracle数据库、业务应用程序、中间件软件和Oracle优化的解决方案完全集成利用全面、内置的零成本虚拟化功能提高系统利用率。

2、Alpha 处理器

Alpha处理器最早由DEC公司设计制造,在Compaq(康柏)公司收购DEC之后,Alpha处理器继续得到发展,并且应用于许多高档的Compaq服务器上。自1995年开始开发了21164芯片,那时的工艺为0.5um,主频为200MHz。1998年,推出新型号21264,当时的主频是600MHz。目前较新的21264芯片主频达到1GHz,工艺为0.18um。在该芯片具有完善的指令预测能力和很高的存储系统带宽(超过1GB/s),并且其中增加了处理视频信息的功能,其多媒体处理能力得到了增强。Alpha架构于1992年2月25日,在东京召开的一次会议上面被正式推介,新架构的关键特性都一一的被罗列出来。当时说Alpha只是产品开发的内部代号。新处理器采用完全64-bit RISC设计,执行固定长度指令(32 bits)。有32个64 bit整数寄存器,操作43-bit的虚拟地址(在后来能够扩充到64-bit)。和

2

北工大学实验学院(论文)

VAX相同,使用little-endian字节顺序,即低字节的寄存器占用低内存地址线。而不像如摩托罗拉等大多数处理器所使用的big-endian字节顺序,即低字节寄存器占用高内存地址线。除此之外,处理器还内建一个算术协处理器,有32个浮点64-bit寄存器,采用随机存取,而不是在x86协处理器上使用的堆栈存取方式,整个Alpha的生命周期被设计为至少25年。

3、MIPS 处理器

MIPS是世界上很流行的一种RISC处理器。MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。 MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。MIPS技术公司是一家设计制造高性能、高档次及嵌入式32位和64位处理器的厂商,在RISC处理器方面占有重要地位。

4、PA-RISC 处理器

第一款芯片的型号为PA-8000,主频为180MHz,后来陆续推出PA—8200、PA-8500和PA-8600等型号。HP公司开发的64位微处理器PA-8700于2001年上半年正式投入服务器和工作站的使用。这种新型处理器的设计主频达到800MHz以上。PA-8700使用的工艺是0.18微米SOI铜CMOS工艺,采用7层铜导体互连,芯片上的高速成缓存达到2.25MB,比PA-8600增加了50%。 HP公司陆续推出PA-8800和PA-8900处理器,其主频分别达到1GHz和1.2GHz。RA-RISC同时也是IA-64的基础。在未来的IA-64芯片中,会继续保持许多PA-RISC芯片的重要特性,包括PA-RISC的虚拟存储架构、统一数据格式、浮点运算、多媒体和图形加速等。

1.3 CPU技术研究的发展趋势和存在的问题

鉴于RISC的设计特点以及其无可比拟的优点,根据专家以及计算机学家预计,RISC体系结构处理器今后将继续从如下三方面进行发展:一是增加处理器的并行性;二是扩展支持可伸缩并行计算机系统的功能;三是提高工艺水平。RISC的新技术围绕增加处理器并行性,出现了许多新思路和新技术,其中具有代表性的有:多路超标量处理器、超级推理处理器、向量IRAM处理器、示踪处理器。多路超标量处理器:目前的超标量处理器大多数是3路或4路发送设计的。美国的Michigan大学的研究组正在进行16路或32路发送超标量处理器的研究工作,它的基本思想是通过无序执行实现更高的指令级并行性。超级推理处理器:美国Carnegie Mellon大学的研究组正在开展通过扩大取指令宽度和队列

3

北工大学实验学院(论文)

长度、改善处理器推理和猜测执行能力来提高处理性能的研究工作。

结构相关、数据相关以及控制相关。结构相关由于我们的设计中不包含缓存,且指令和数据存放在同一个存储器中,当执行访存指令时就会和取指阶段冲突,即会有取指和访存的冲突,这叫做结构相关。数据相关是在一个程序中,如果必须等前一条指令执行完毕后,才能执行后一条指令,那么这两条指令之间就发生了数据相关。另外控制相关主要由程序流控制语句引起。如果程序中要求某一个运算任何完成后进行控制转移,则这个操作和控制转移的操作就不能同时进行。在指令流水线中,控制相关主要由转移指令引起,它也会使流水线性能明显下降。当执行转移指令时,依据条件判断是否为真,可能将程序计数器PC内容改变成转移地址目标,也可能只是使得PC加上一个常数,指向下一条指令的地址。另外RISC代码密度不高,可执行文件体积较大,汇编代码可读性差。代码密度不高是值得关注的问题:若不使用cache,会需要更大的指令存储控件,取指时也占用更大的内存带宽;若采用cache,又会降低cache的命中率。而从CPU的设计上来讲,由于RISC的核心代码要少很多,使得其结构相应简化,因此在体积、造价、功耗、散热和价格上都具有优势。

1.4 论文章节安排

本文将分为五章来描述,具体章节安排如下:

第一章绪论,介绍本文研究背景以及CPU的发展,技术成果以及发展方向,并简单说明本文所设计的CPU的可行性及优点。并介绍本文的章节安排

第二章为相关技术以及工具的简介,主要介绍了QUARTUS集成开发环境及开发流程,EDA技术以及FPGA器件,并简单说明利用QUARTUS和FPGA实现CPU电路的优点。

第三章为CPU的方案论证,整体结构设计以及指令集设计。确定了CPU电路8位单周期的特性,同时确定了8位指令集。

第四章为其余QUARTUS软件实现CPU及调试步骤,详细描述了CPU取指阶段,译码阶段,执行阶段,访存阶段和回写阶段的主要器件,基本结构和代码细节。

第五章为CPU设计的系统仿真和实物验证部分,利用ModelSim 仿真软件和Altera Cyclone IV EP4CE15F17C8 FPGA芯片完成了系统的仿真,仿真结果显示CPU运行正确,功能正常,设计正确。

4

北工大学实验学院(论文)

2 主要技术及工具简介

本设计采用的是ISE,EDA技术,FPGA器件。下面,我们针对这些器件与软件,进行一一的介绍。

2.1 EDA和QUARTUS

电子设计自动化,简称EDA(Electronic Design Automation) 技术作为现代电子设计技术的核心,他一来功能强大的计算机。在EDA工具软件平台上,对以硬件描述语言HDL (Hardware Description Language) 为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、逻辑化简、逻辑综合、结构综合,以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。

在现代高新电子产品的设计和生产中,微电子技术和现代电子设计技术实现互促进、相互推动又相互制约的两个技术环节.前者代表了物理层在广度和深度上硬件电路实现的发展,后者则反映了现代先进的电子理论[3][4]、电子技术、仿真技术、设计工艺和设计技术与最新的计算机软件技术有机的融合和升华.因此,严格地说,EDA技术应该是这两者的结合,是这两个技术领域共同孕育的奇葩[5]。 全球提供EDA软件工具的厂商有近百家之多,大体分为两类:一类是专业软件间公司开发的EDA开发工具,独立与半导体器件厂商;另一类是半导体器件厂商为销售本公司可编程逻辑器件PLD产品开发的EDA软件工具,只能开发该公司的PLD器件.这里介绍的QUARTUS II开发工具属于后者,是由Altera公司开发的EDA软件工具。

Quartus II是Altera提供的FPGA/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一。Quartus II提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。由于Quartus II 开发工具人机界面友好、易于使用、性能优良,并自带编译、仿真功能,Quartus II已经成为是世界上使用最为广泛的EDA工具之一。

2.2 QUARTUS II 13.0开发流程

Quartus II 是Altera公司的综合性PLD/FPGA集成开发环境,是该公司上一代可编程逻辑器件的集成开发环境MAX+plusII的更新换代产品。Quartus II集成开发环境支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。它向下屏蔽硬件特性,能够使设计者在无需了解FPGA硬件结构的前提下方便的进行设计开发。Quartus II 13.0可以在Unix和Windows操作系统上使用,本设计使用Quartus II 13.0的Windows版本。

5

北工大学实验学院(论文)

为提高系统开发效率,Quartus II集成开发环境拥有使用既有知识产权模块(Intellectual Property,IP)的功能。知识产权模块是一些预先设计好的电路模块,他们以软核形式呈现,即未被加工制造,仅完成了输入模型的建立。这些模块常常被复用,因此在设计中使用它们可以简化设计提高设计效率。

Quartus II集成开发环境另外一个特点是允许嵌入第三方工具。例如Modelsim,Hspiec。利用这些工具能够更好的完成时序验证,逻辑综合等任务[19]。 完整的FPGA系统开发设计流程包括以下几大步骤。

1、设计输入/RTL编码:这一阶段主要为硬件电路建模。即设计者通过Verilog HDL、VHDL、AHDL或者原理图的形式将算法模型转变成为硬件电路模型。

2、功能验证(RTL): 当电路模型建立完毕后,需要对电路实现的功能进行检测,这一阶段主要就是对电路功能进行验证。对硬件电路加入测试信号后,利用Modelsim等工具可以产生电路输出的波形图,根据波形图则可以分析出电路功能是否正确。这个阶段的波形图不包含时序信息,即未考虑电路延时,仅反映逻辑功能。

3、逻辑综合:这一阶段是将前面建立的电路模型转变为实际器件的连接模型。但这一步的器件仅仅是逻辑功能上的器件,即没有将各器件与FPGA内部资源对应起来,因此这一阶段的产生文件也不包含器件的延时信息。

4、布局布线:这一阶段的主要是把经过综合得到的电路器件与FPGA内部资源对应起来,并分配每个器件的位置与线路连接。从而使得开发者的设计能够在FPGA中实现。这一阶段完成后,报表中包含了电路的器件延时信息。

5、时序验证:上一阶段已经完成了从设计者电路模型到FPGA内部资源的映射。此时电路的逻辑功能由于包含有器件延时,不一定完全符合设计者原先的设计。因此需要进行时序严重,即查看电路中各个路径上的延时信息,查看运行时间是否满足电路设计。如果时序存在问题,需要调整主频甚至组合逻辑的设计。直到电路满足时序要求。

6、器件编程:当时序验证通过后,就可以将编译通过的程序加载带FPGA器件中去执行,从而从硬件上验证效果完成设计。

下图3-2 是利用QUARTUS II 13.0设计开发FPGA系统的流程图

6

北工大学实验学院(论文)

设置输入 综合 功耗分析 布局布线 调试 时序验证 工程更改管理 仿真 时序逼近 编程和配置 图2-1 QUARTUS开发流程图

2.3 FPGA器件

FPGA是现场可编程门阵列(Field-Programmable Gate Array)的简称。它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

集成电路在发展的过程中经历和很多阶段,从一开始的小规模集成电路到大规模集成电路再到超大规模集成电路,集成电路的开发难度与开发成本越来越高,开发周期也越来越长。这些集成电路都是为某特定领域开发的专用集成电路(Application-Specific Integrated Circuits)。制造完成后其功能就被固化,就算设计存在缺陷,也无法修改。因此系统设计师迫切需要一种半定制电路,能够允许设计师们可以通过编程对其功能进行

二次开发,并能够在试验室里就对其进行测试。这样就算设计存在缺陷,也能够快速弥补,可以大大降低开发成本。正式由于这种需要,可编程逻辑器件出现了。经过一系列的发展演变,逐渐形成了今天广为使用的FPGA。

FPGA实现可编程逻辑是基于查找表(LUT)技术。查找表实质就是一块SRAM。程序编因此LE的数量可以衡量出一个FPGA的水平,LE越多则能够实现更复杂的逻辑运算。

7

北工大学实验学院(论文)

目前主流的FPGA器件厂商主要是Altera、Xilinx和Lattice。不同品牌的FPGA需要配合使用不同的开发环境。本设计中选择使用Altera公司的FPGA芯片,因此配合使用该公司的QUARTUS II 13.0开发环境作为设计工具。

8

北工大学实验学院(论文)

3.8位RISC设计

3.1 方案论证

一、指令集

常用的指令集包括复杂指令集和精简指令集两种。复杂指令集(CISC)包含大量的内存操作指令,因此可以很灵活的访问内存,对于编写程序有很大的便利。但是因此,复杂指令集通常结构多样,指令长度可变,在CPU控制部件译码上存在很多困难。为了解决这些困难,复杂指令集的CPU需要花更多的逻辑电路去解决这些问题,因此存在功耗大的问题。

相比之下,精简指令集(RISC)采用定长的指令结构。并且不包含内存运算指令,只拥有访问和读取内存的指令。这样简化了指令集的数量,将使用较多的指令保留下来。为CPU译码提高了很多便利,同时功耗较小。伴随着编译器的发展,越来越多的CPU采用精简指令集,如ARM、MIPS等。

综上,本课题采用精简指令集实现一个简单的8位的CPU。该CPU包含ADD,SUB,AND,OR四条运算指令,LOAD和STOR两条访问内存的指令,BEQ和JUMP两条跳转指令。 二、执行周期

CPU的执行方式通常分为单周期,多周期和流水线三种结构。

单周期方式是每一条指令采用一个时钟周期,在这一个周期中完成取指,译码,执行,访存和回写五个操作。这样的执行方式比较简单,但是问题在于在一个周期中完成如此多操作,需要花很长世间,因此时钟周期较长,相应的,主频较低。运算速度较慢。

在实际指令中,并不是每一条指令都需要经历上诉五个阶段,例如ADD等运算指令并不需要进行访存阶段,因此如果可以跳过这一步直接进行回写阶段,会节省很多时间。多周期的执行方式正是考虑到这种情况,选择将一条指令的执行分到多个周期中去,利用有限状态机去控制指令的转移方式,让指令跳过不需要的步骤。

在指令进行多周期划分后,人们发现其实当前一条指令进行译码操作时,不需要让取指电路空闲,而可以进行下一个条指令的取指操作,这样可以使得指令并行起来,大大提升了执行效率。然后在实际设计中,由于指令的相关性,流水线中前后的指令存在数据相关或控制相关。解决这些相关性需要复杂的逻辑电路,造成电路复杂,功耗增高。

对比以上三种结构,考虑到FPGA的电路不能太为复杂,因此选用单周期的执行结构。

9

北工大学实验学院(论文)

综上,本文实际一种单周期的精简指令集CPU。

3.2 整体结构设计

CPU主要完成取指,译码,执行,访问内存和回写五个步骤。

取指:将指令从指令存储器中取出。由指令存储器和PC寄存器构成。PC又叫程序计数器,用于存储下一条指令的地址。每取出一条指令,PC中数值加1,指向下一条指令的地址。在每一个时钟周期到来时,CPU按照PC中所存地址,将指令取出。

译码:取出指令后,需要确定指令类型和相应的操作数。这个过程叫做译码,由CPU的主要控制结构CU(控制单元)完成。CU按照指令集定义,确定指令的操作数和操作码。然后访问寄存器堆,找到源操作数的实际数值。准备送入ALU 执行:按照指令的进行数学运算。这个过程由ALU完成。一般每一条指令包含两个源操作数,因此ALU有两个操作数输入端,一个操作码输入端。本系统设计的ALU能够完成加法,减法,逻辑与和逻辑或四种运算。完成运算后,将结果送出。

访问内存:如果一条指令需要读取数据存储器或者写数据存储器,就必须经过访存阶段。这个过程主要是CPU对内存的信息交互过程。在CU的控制信号下完成。

回写:回写是指将运算结果回写至寄存器堆。每一个运算完成后,都需要将结果保存。CPU中利用寄存器堆来暂存运算结果。在所有过程执行完后,ALU或者内存将数据送入到寄存器堆入口端,在CU的写使能控制下,将数据暂存进去。

完成以上五个步骤,才算完成一条指令。

图3-1 流水线CPU的结构

10

北工大学实验学院(论文)

3.3 指令集设计

指令系统直接与计算机系统的性能和硬件结构的复杂程度等密切相关,它是设计一台计算机的起始点和基本依据。本次设计的指令集总共包含12条,能够执行加法、减法、逻辑或、逻辑与及乘法和除法。主要有三种类型,即R型、I型和J型。可以进行四种操作,下面对所用到的三种指令形式逐一说明。

3.2.1 寄存器型(R型)

指令中最常见的类型就是R型,本指令集中属于该类型的有add、sub、and和or指令。R型指令是指操作数全部为寄存器变量,其寻址方式为寄存器寻址。每条指令由一个操作码,两个源操作数寄存器,和一个目的寄存器组成,如add r3 r1 r2。如图3-2给出了典型的R型指令,如ADD R1,R2,R3。所有指令都有3位操作码(Opcode),操作码是用来确定哪一种类型的指令将被执行。

15 13 12 10 9 7 6 4 3 0

Opcode Rd Rs 图3-2 R型指令格式

在本指令系统中,R类型的指令及其OPCODE如下:

指令 Add Sub And Or 下表为所有R型指令的指令格式及其含义。 指令格式 Add r1 r2 r3 sub r1 r2 r3 And r1 r2 r3 Or r1 r2 r3 操作 r1 = r2 + r3 r1 = r1 - r3 r1 = r2 & r3 r1 = r2 | r3 Opcode 00001 00010 00011 00100 Rt non 11

北工大学实验学院(论文)

3.2.2 立即数型(I型)

I型指令结构如图3-4所示。其与R型指令区别在于指令中只包含一个源寄存器变量,另一个元操作数由立即数表示。

15 13 12 10 9 7 6 0

Opcode Rd 图3-3 I型指令格式

如addi r3 r1 #7,该指令表示r1中的值与立即数7相加,储存于寄存器r3中。本设计的指令集中,属于该类型的指令还有subi,lw,sw和beq指令。下表为指令格式,操作码及操作。 指令格式 Addi r1 r2 imm Subi r1 r2 imm Lw r1 r2 offset Sw r1 r2 offset Beq r1 r2 offset Opcode 00011 00100 10000 10001 11000 操作 r1 = r2 + imm r1 = r2 - imm [r2 + offset] -> r1 r1 -> [r2 + offset] If r1 == r2 -> PC +2+ offset 在以上指令中,Addi和Subi比较容易理解。Lw,Sw和Beq需要解释一下。Lw表示加载指令,即从内存中加载一个数据至寄存器。从上表中可以看到,本条指令先用两个源操作数求和,然后将结果作为内存地址,称为变基址寻址,得到地址后,就可以读取相应的数据,最后将结果储存于目的寄存器中。同理,sw是储存指令,与Lw类似。Beq指令为跳转指令,当r1和r2中数字相等的时候,则跳转到PC + 2 + offset处。由于opcode占5位,r1占3位,r2占3位,因此offset只有5位,可以储存的值最大只有32。同时由于16位指令地址低二位不需要储存,因此实际寻址范围为2^7 = 128,即只能实现跳转到当前PC+2的-64~+64处。

Rs Imm 3.2.3 立即移位型(J型)

由于beq指令跳转范围有限,为了实现长跳转,必须给指令集添加新的指令。在本文设计的指令集中,由Jump指令完成。该指令由一个5位操作码opcode和一个10位的立即数组成,立即数表示需要跳转的绝对地址。下表是Jump指令的指令格式及opcode

12

北工大学实验学院(论文)

15 13 12 8 7 0 Opcode Non 图3-4 J型指令格式

指令格式 Jump #imm Opcode 00011 操作 -> imm Imm 3.4 本章小结 本章主要介绍了CPU的方案论证,整体结构设计以及指令集设计。确定了本文的设计的CPU为8位单周期精简指令集CPU。再确定了方案的基础上,绘制了CPU的结构图,完成了CPU结构设计。最后详细确定了CPU的指令集。为后续实现CPU打下基础。

13

北工大学实验学院(论文)

4 基于Quartus II的8位RISC实现

4.1 取指阶段

取值阶段主要包括四个器件,一个寄存器PipePC,用于储存程序计数器PC的值;一个计算PC+1的专用加法电路adder2;一个多路选择器,用于选择程序计数器的更新值得来源,如图中的XLXI_117所示;最后一个器件是instmem,用于存放程序指令。IF阶段结构如图3-6所示。每个周期的正跳变到来的时候,程序计数器的储存值进行更新,由npc引脚输入新的地址信号,并从pc引脚送出。Instmem接收到新的程序地址信号。从而将相应地址处的指令通过q引脚端送出,为后续阶段提供新的指令。这个过程被称为取指令操作。程序计数器代码如下所示:

module PipePC( input [7:0] npc, input clk, input clear, output reg [7:0] pc );

always @(negedge clear,posedge clk)

begin end

if(clear == 0)

pc <= 0; pc <= npc; else

end module

always @(negedge clear,posedge clk)

触发块中包含两个触发信号,clear表示复位信号,当该信号下跳变时,执行always,并且由于if(clear == 0)成立,因此pc被赋值为0,用于CPU上电复位。当CPU运行正常后,每一个时钟上跳变,触发一次always功能块。此时将npc引脚输入信号幅值给寄存器pc,将更新寄存器pc的值。当取值操作完成后,PC同时送入到adder2模块中,该模块中执行assign sum = a + 8'd1;操作,即将PC值加1,为下一周期更新pc值做准备,运算结果送入到多路选择器Mux2中。Mux2是一个双路选择器,其数据来源一个是adder2的运算结果,表示程序顺序

14

北工大学实验学院(论文)

运行的时候的PC+1值,一个是由控制器件CU送出,表示程序需要跳转的时候的PC跳转目的值。当下一个周期到来时,新的NPC值被写入到程序计数器中。

图3-6 IF取指令段的结构

4.2 译码阶段

CPU译码阶段主要负责对指令进行译码,确定指令中的源操作数,目的寄存器和具体运算类型。同时从相应的寄存器号下取得寄存器值。译码的主要部件是控制部件,即Control Unit,该部件如下图所示:

以下为CU中与译码相关的代码。 wire [3:0] op = Inst[15:13];

wire i_add = ~op[2]&~op[1]&~op[0];

wire i_sub = ~op[2]&~op[1]& op[0]; wire i_and = ~op[2]& op[1]&~op[0]; wire i_or = ~op[2]& op[1]& op[0];

15

北工大学实验学院(论文)

wire i_load = op[2]&~op[1]&~op[0]; wire i_store = op[2]&~op[1]& op[0]; wire i_beq = op[2]& op[1]&~op[0]; wire i_j = op[2]& op[1]& op[0];

Inst变量为CU的输入变量,是一个16位的总线型信号,为指令信号的输

入端。表示16位的指令。通过wire [5:0] op = Inst[15:11];操作,建立一个5位的总线变量op,解析出Inst的15至11位,即opcode部分。接下来根据opcode的不同,确定该指令是什么指令。例如在wire i_add = ~op[2]&~op[1]&~op[0];操作中,通过与运算,当op的高四位为0同时低位为1时,则认为是add指令,此时将i_add线型变量赋值为1,即输出高电平信号。该信号为后级处理做准备。确定指令类型后,接下来需要确定运算类型。

即确定ALU的操作码。在本设计中,ALU可以执行加法,减法,逻辑或,逻辑与四种运算,因此需要两位信号线来区分这四种运算。在CU中,用aluc表示,相关代码如下:

assign aluc[0] = i_sub | i_or;

assign aluc[1] = i_and | i_or;

可以看到aluc包含两位,根据aluc的含义,为每一位进行复制。aluc即对应的运算如下表:

Aluc 00 01 10 11 运算 + - & | 由于aluc第一位只有当减法运算和逻辑或运算的时候1,因此利用ssign aluc[0] = i_sub | i_or ;为aluc[0]进行赋值。同理aluc[1]和aluc[2]也用此方法进行赋值。完成这两句后,就完成了操作码的解析。最后需要完成的是访问寄存器堆,获得相应寄存器号对应的寄存器值。访问寄存器堆。若为R型指令,需要访问寄存器堆,获得两个源寄存器号对应的值。若为I型指令,需要访问一个寄存器堆,获得一个源寄存器号对应的值同时将立即数imm或者offset进行位扩充,扩充方式为符号扩展,从5位扩展至16位,以便下一周期参与运算。扩展代码如下:

assign offset = Inst[6]==1?{1'b1,Inst[6:0]}:{1'b0,Inst[6:0]}; 寄存器堆设计如下:

16

北工大学实验学院(论文)

上图中rs1和rs2信号引脚是3位的数据总线,表示寄存器的地址信号,当CU部件解码完成后,将rs1和rs2送入到这两个引脚,寄存器堆则根据寄存器号读取到相应的寄存器值,分别从DOrs1和DOrs2送出,可以看到DOrs1和DOrs2为两个8位的总线信号,用于表示8位的运算数。

若指令为beq或者Jump指令,CU需要做出特殊处理,即确定npc的值,即程序计数器的跳转目的PC值。实现代码如下:

always @(*) begin

if(i_j)

npc = Inst[7:0];

else if(i_beq && (rsvalue == rtvalue) && Inst[5] == 0)

npc = pc + Inst[5:0]; npc = pc - Inst[5:0]; npc = 0;

else if(i_beq && (rsvalue == rtvalue) && Inst[5] == 1) else

end

本段代码是用always描述的组合逻辑。在always块中,包含五个分支语句。针对五种情况对npc进行赋值。第一种情况表示当前指令是一个jump指令,则npc被赋值为Inst[7:0],Inst[7:0]为跳转目的地址。当指令为beq指令,同时满足rsvalue和rtvalues相等的条件,且Inst[5]为0的时候,则执行npc = pc + Inst[5:0]。其中rsvalue和rtvalue分别表示从寄存器堆中获得的相应寄存器的值。只有当两个值相等的时候,才会执行跳转指令,同时当Inst[5]等于0的时候,表示跳转偏移量为一个正数,因此执行npc 的值等于当前PC值加上偏移量,否则等于当前PC减去偏移量。

17

北工大学实验学院(论文)

4.3 执行阶段

该阶段进行CPU的核心运算操作,其基本结构如图3-19所示。EXE执行段的主要部件是ALU,还包括一个双路选择器Mux2。

图3-19 执行阶段的结构

在前一周期指令译码阶段准备好了指令要处理的操作数之后,就开始执行有效地址计算。从图中可以看到ALU包含三个输入信号,a,b和op,分表表示参与运算的两个操作数和一个运算码。A操作数直接来源于寄存器堆的读取结果,op来源为CU的解码结果。而b可以看到来源于双路选择器Mux2的输出端。这是因为b操作数有两种来源,当该指令是一条R类型的指令,即两个操作数都为寄存器值的时候,b运算数的来源同a一样,从寄存器堆的读取结果中获得;当该指令为I类型的指令时,b操作数为一个立即数,此时,该数由CU符号扩展后的offset充当。双路选择器就是用于选择这两个信号,channel为选择信号,连接到CU的alu_b输出端。根据对指令操作码部分的译码结果,ALU对两个16位的操作数完成算术、逻辑、移位或置位的运算,然后输出结果。Aluc代码如下:

always @(a or b or op)

begin

case(op)

3'b000:

res = a + b; res = a - b; res = a & b; res = a | b; res = a * b;

18

3'b001: 3'b010: 3'b011: 3'b100:

北工大学实验学院(论文)

end

3'b101:

res = a / b;

end case

以上代码为用always功能块实现的组合逻辑。敏感信号包括运算数a,b和运算符代码op,利用case语句完成多路的选择,例如当op == 000时,则执行res = a + b,res为运算结果,是alu模块的一个输出信号。由上图可以看到,输出结果连接至RegMem进行暂存,等到下一个周期的到来。信号输入输出的时序控制由ID段锁存器ID/EXE和EXE段锁存器EXE/MEM完成。

4.4 访存阶段和回写阶段设计

访存阶段和回写阶段的结构如图所示。主要由数据储存器dmem和寄存器堆组成。数据存储器负责储存程序运行时需要的数据。本设计中采用Quartus II提供的IP核来完实现。从图中可以看到,dmem包含四个输入信号,分别为地址信号,时钟信号,数据信号和写使能信号。Address连接到alu的res输出结果端。data连接到寄存器堆的DOrs2。Wren由CU控制,连接到CU的wmem输出端。在本文设计的指令集中,只有store和load指令需要访问内存。例如load r3 r0 1。Alu计算出r0 + 1的结果并将其作为地址送入到dmem的address信号接口处,在clock时钟的驱动下,dmeme的q引脚会输出对应地址的数据。当当前指令若为store指令,例如store r2 r0 1,r2寄存器的值会被送入到data信号出,同时CU将wren置为高电平,在clock时钟的驱动下,data被写入到address表示的地址处

图3-25 访存段的内部结构

完成访存操作后,就到了CPU运行的最后一个阶段,回写阶段。该阶段的目的是把运算或dmem读取结果写入到寄存器堆中。寄存器堆上包含we,data和rd管脚。这三个信号的作用于内存上类似,只需要通过rd向寄存器堆提供写入寄存器的地址,通过data提供需要写入的数据,同时we端高电平使能,就能

19

北工大学实验学院(论文)

完成回写操作。

4.5 本章小结

本章主要介绍了利用QUARTUS完成CPU实现及代码编写的完整步骤,在分析了CPU的工作流程和细节的基础上,详细描述了CPU各个阶段的实现方法,结合代码解析了CPU中各个部件的作用以及各个信号的意义。

20

北工大学实验学院(论文)

5 系统仿真

5.1 8位RISC整体设计与仿真

Quartus II软件中的电路图:

图5.1 顶层模块电路图

5.2 系统软件仿真

为了验证所设计的可行性,需要向InstMem中加入一些指令,通过观察运行后的寄存器堆和数据存储器中的数据来判定系统是否正常运行。下面是本系统向InstMem中加入的指令代码。加载指令的方式是通过MIF文件为instmem提供相应的初始化值。下面是本文用到的MIF文件。

DEPTH = 256; -- The size of data in bits WIDTH = 16; -- The size of memory in words

ADDRESS_RADIX = HEX; -- The radix for address values DATA_RADIX = BIN; -- The radix for data values CONTENT -- start of (address : data pairs) BEGIN

00 : 1000000010000000; -- lw r1 r0 0 01 : 1000000100000001; -- lw r2 r0 1 02 : 0000000000000000; -- nop 03 : 0000010100110000; -- r3 = r1 + r2 04 : 1010000110000100; -- store r3 r0 4 END;

第一条代码为一条load指令,从内存中加载一个数据至寄存器。根据本CPU的指令集,第一条指令的含义是将地址为[r0+1]的内存储存的值取出来,并储存于寄存器r1中,由于CPU初始状态下,寄存器r0中值为0,因此[r0+1]表

21

北工大学实验学院(论文)

示地址1,第一条指令实际上为将地址1的数据加载到寄存器r1中,同理第二条指令为地址为2的数据加载到r2中。

完成加载后,利用一个加法运算测试一下ALU性能,第三条代码是一条空指令,用于测试CPU停止运行的状态。第四条指令用于测试CPU的运算能力,实际含义为将r1中的值和r2进行加法运算,将结果储存到r3中。最后测试一条store指令,把r3中的值储存至内存地址为[r0+4]的内存中。下面看内存中的初始化值。

DEPTH = 256; -- The size of data in bits WIDTH = 8; -- The size of memory in words

ADDRESS_RADIX = HEX; -- The radix for address values DATA_RADIX = BIN; -- The radix for data values CONTENT -- start of (address : data pairs) BEGIN

00 : 00000001; -- memory address : data 01 : 00000010; 02 : 00000011; 03 : 00000100; 04 : 00000101; 05 : 00000110; 06 : 00000111; 07 : 00001000; END;

根据以上分析,按照上诉内存初始化值,执行完后,寄存器堆中各寄存器的值如下:

R0 = 0;r1 = 1;r2 = 2;r3 = 3;r4 = 0;r5 = 0;r6 = 0;r7 = 0; 同时内存中的值为:

DMem[0] = 1;DMem[1] = 2; DMem[2] = 3;DMem[3] = 4; DMem[4] = 3;DMem[5] = 6; DMem[6] = 7;DMem[7] = 8;

如果程序运行完后,寄存器堆中的值和内存中的值与上诉情况一致,则说明CPU电路正确运行了。在QUARTUS II 15.0中,集成了Modelsim 的接口,可以直接在QUARTUS II 开发环境中打开Modelsim 。在调用之前需要进行相

22

北工大学实验学院(论文)

关设置。主要设置内容如下。

(1)在开发环境左下角task栏中将下拉列表选项选为RTL Simulation,如图所示:

图5-2 RTL Simulation菜单

(2) 完成后双击“Edit Settings”打开下图所示窗口。在“Tool name”下拉列表中选择Modelsim-SE工具,下方Comple test bench单选框中选中。

图5-3 仿真工具编辑菜单

(3)然后点击右边Test Benches按钮。打开如下图所示窗口。该窗口表示需要用户添加TestBench文件。

23

北工大学实验学院(论文)

图5-4 添加TestBench

(4) 点击“New”按钮选择添加一个新的TestBench文件,弹出以下窗口。

图5-5 设置TestBench

这里在Test Bench Name栏填入编写的TestBench文件名。在Design instance name in test bench中填入待测试的模块文件名。在下方File name栏选择TestBench的目录。完成以上设置后点击“OK”。回到开发环境主界面,完成设置。 设置完成后就可以开始正式的仿真工作,在主界面左下方Task栏中双击RTL Simulation,便可自动开始仿真。仿真结果如下图所示。下面具体分析该波形。首先看数据输入模块的仿真波形。 下面是仿真后的运行结果:

24

北工大学实验学院(论文)

该图是运行后的内存中的数据。可以看到地址为6的地方,被正确的存入了数据5,符合程序运行结果。从内存来看,程序运行正常。

该图是运行后的寄存器堆中的数据。寄存器r0到r7的值分别为0 1 2 3 0 0 0 0。同样符合程序运行结果。从以上两个图像中可以看出程序运行正确。

5.3 硬件实物验证

通过了软件仿真,还需要经过FPGA实物验证,才能最终说明代码的可行性。因此本设计最后在FPGA硬件上进行了测试。本文用的硬件为Altera Cyclone IV EP4CE15F17C8,利用QUARTUS的集成工具In-System Sources and Probes Editor在线查看硬件实物的内存信息,从而确定CPU是否正常运行。下图为CPU电路烧写至FPGA中后,内存中的数据,可以看到内存中数据地址为4的地方,正确的被改写为了3,与预测一致,说明程序正确运行。

5.4 本章小结

本章主要介绍利用Modelsim 软件对系统进行RTL级别的功能验证以及利用FPGA芯片对CPU进行了实物验证。从两个方面的验证结果可以看出,系统输出波形正确,CPU运行后,寄存堆和内存中的数据与程序运行的应有结果一致。验证结果表明系统功能达到设计预期,设计正确。

25

北工大学实验学院(论文)

6 总结

本课题研究内容为利用FPGA实现一款8位单周期精简指令集CPU。该CPU能够实现加法,减法,逻辑与和逻辑或运算。同时具备读读取内存,写入内存指令,以及调准指令BEQ和JUMP。通过对CPU的功能分析,QUARTUS II开发工具的学习使用,最终利用FPGA硬件系统实现了设计提出的数字密码锁系统。软件及硬件测试均显示所设计的系统工作正常,能够满足提出的功能要求。 课题研究取得了一些成果,但由于设计中忽视的一些问题,本系统依然存在一些缺陷以及不足之处。主要表现在以下几个方面:

1、指令集扩展。本次设计的CPU仅能完成最为基本的加法减法和逻辑运算,对于一款成熟的CPU而言,需要其具备更为丰富的运算能力,因此接下来需要进一步扩展指令集,使得其能够运算乘法和除法。同时增强立即数的加法减法操 作。在控制指令上,也需要增加跳转指令和访存指令的数量,使得编程更加容易。

2、改进CPU结构。本CPU为了便于验证且便于实现,采用了单周期的指令结构,虽然单周期CPU电路结构简单,但是并没有最高效的利用系统硬件资源。因此接下来考虑采用流水线的CPU结构,可以很大程度的提高CPU运算性能。

3、提高系统主频。由于QUARTUS中提供的RAM和ROM读写速率较低,为了保证CPU运行时序,本设计降低了主频,采用6M的时钟频率作为主频,在运算上性能不足,因此接下来需要仔细的设计CPU时序,从而提高CPU运算性能。

以上是本次设计中的一些主要的不足。在接下来的研究中,将会对以上提出的问题逐一解决。相信随着研究的深入与不断改进,本系统能够更加实用,成为功能齐全的精简指令集CPU。

26

北工大学实验学院(论文)

致谢

看着毕业时间一天天的来到,我意识到自己的学生生涯马山就要结束了,这金色的年华就要逝去。回想着大学生活的点点滴滴,此时此刻每个点滴之间就仿佛发生在眼前,从刚上大一时的青涩,再到如今即将迈出校园的不舍,一遍一遍的从眼前飘过。

这四年的学习生活是充实而多彩的。大一时的兴奋,大二时的彷徨,大三时的忙碌,再到此时的不舍。大一的时候是兴奋,不知道大学的生活是什么样子。那时的我参加了学生会并参与了很多次的活动,但那时并没有因此而耽误自己的学业。然而到了大二,已经适应了大学生活的我,去不知道自己未来要做什么,无时无刻都感到彷徨而且无助。而后来在大二的时候VHDL的课程中我遇到了殷卫真老师,是她在我为未来感到彷徨的时候,如同黑暗中的一盏明灯,使我找到了未来的路通向何方,为此我非常感谢殷卫真老师。

到了大四的时候,我选择了殷卫真老师的毕业设计课题。因为在大学期间,有关于FPGA的课程并不是很多,只有32学时,所以我对FPGA这方面了解的不是很多。是殷卫真老师详细的为我讲解了有关于FPGA的知识并向我推荐了许多相关书籍,让我为完成毕业设计奠定了坚实的基础。而在做毕业设计的过程中,在我遇到了很多很多的困难时,都是殷卫真老师对我的帮助让我克服了这些难关,并给了我很多的鼓励,让我有动力继续前行。若没有殷卫真老师的帮助和指导,我不知道我的未来会变成什么样子。

在这毕业即将到来的时候,我真诚地向殷卫真老师说一声谢谢您,殷老师。并且谨向所有教育和帮助过我的老师,和关心我的朋友们表达深深的谢意。

27

北工大学实验学院(论文)

参考文献

[1] 向余熊. 基于 FPGA的信号测频变频系统设计[D]. 电子科技,2006 [2] 周长春. 数据流硬分类器的研究与设计[D]. 东南大学,2007 [3] 赵峥. FPGA支持软件的汇编技术[D]. 西安电子科技大学,2008 [4] 魏少涵. 面向对象软件测试方法分析与研究[D]. 厦门大学,2009

[5] 李康. VLSI物理设计中布局及有约束的布局优化[D]. 电子科技大学,2010 [6] 王军. 集成保护中数据同步采集的研究与实现[D]. 北京交通大学,2008 [7] 刘潇婷. 基于FPGA的红外遥控电子密码锁的实现[D]. 大连海事大学 2008 [8] 曹开田. 基于单片机的红外遥控密码锁的设计与实现[J]. 中国仪器仪表.

2006(03)

[9] 刘东汉,余宏生,皮大能,陈学珍. 基于微处理器解码多功能遥控系统的设计

[J]. 现代电子技术. 2006(08)

[10] 宋锦. 电子密码锁设计与调试[J]. 电脑知识与技术. 2011(33)

[11] 王卫兵,刘克刚,朱秋萍. 用FPGA的电子密码锁[J]. 电子技术. 2005(01)

吴秋兰,耿霞. 基于ISP技术的电子密码锁设计[J]. 电子工程师. 2004(12)

28

本文来源:https://www.bwwdw.com/article/j063.html

Top