摘 要:目前,EDA技术已成为现代电子设计领域的基本手段,涵盖印制电路板(PCB)的设计、可编程逻辑器件开发、专用集成芯片设计及系统验证等诸多领域。本文主要介绍了使用EDA工具来设计一个简单电子应用系统的过程。本文利用A1tera公司提供的设计工具Quartus II并结合Verilog HDL语言,采用硬件编程的方法对系统进行设计。本次设计的主要内容即一个能够实现简单命令的处理器。要求处理器能够控制寄存器读入和读出数据,实现数据的转移和运算。
本文思路大致如下:1、本文对处理器的结构和指令系统等进行了分析,确定了该处理器的总体架构以及实现指令功能的过程。2、采用Verilog HDL语言从系统的最底层开始进行了系统设计和仿真,对关键模块应用了有限状态机的形式予以实现,接下来对整个系统进行了仿真测试与功能验证。3、将程序下载至硬件电路进行实际验证。本次实验采用了A1tera公司提供的EP2C70F896C6型芯片进行实验。
关键词: 寄存器;处理器;时钟;Verilog HDL;Quartus II;
正 文
1.
引言
Verilog HDL语言为主流的HDL语言之一(另一个是VHDL语言),在全球范围内具有广泛的用户群,具有超过80%的行业覆盖率。在美国,使用Verilog HDL进行设计的工程师大概有10万人,占整个HDL设计行业工程师90%左右,并有200多所大学开设Verilog HDL语言相关课程,包括斯坦福大学这样的名校。在中国,工业界大约有一半以上的人使用Verilog HDL 语言,并且这样的比例还在上升。Verilog HDL语言要比VHDL简单得多,语法与C语言相近,更容易被在校大学生接受。
现场可编程门阵列(FPGA)是作为专用集成电路领域中的一种半定制电路而出现的,它既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA内部有丰富的触发器和I/O引脚,其采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。由于FPGA灵活可重复编程和方便系统重构的特性,得到了广泛应用。
随着微电子技术和计算机技术的进步,电子设计自动化(Elect ro nic Design Automat ion, EDA)技术也在近十多年中有了巨大发展。电子设计工程师已经从传统的手工设计、计算机辅助设计进入到了使用EDA 工具进行电子系统设计的阶段。采用Quartus II软件可以对FPGA进行编程,将硬件功能以软件设计来描述,提高了产品的集成度,缩短了系统的开发周期。本次设计就是利用EDA软件设计一个简单的处理器,使它能完成简单的数据操作。
2. 任务分析
首先,由题目介绍详细了解系统的结构和相应的功能。可以将整个系统分为两部分:主体模块和扩展模块。
2.1 主体模块
主体模块的电路系统如图1所示,可将其分为五部分:(1)八个16位的通用寄存器R0-R7,它们既可以存入数据,也可以读出数据;(2)三个特殊功能寄存器:A、G、IR,其中A存储加/减单元所需的被加(减)数,G存储加/减单元的运算结果,IR则存储控制器要执行的指令代码;(3)多选器,控制器用它选择执行命令时对应的单元;(4)加/减单元,对数据进行加减运算;(5)控制单元,用来控制系统执行指令规定的操作。
外部数据通过16位的DIN输入。经由16位的多选器,数据可加载到多个寄存器,比如:R0,… ,R7和A。当然,多选器也可以使数据从一个寄存器传输到另一个寄存器。图中多选器的输出叫做总线,通常用来作为数据通道。控制器通过寄存器的控制端口对寄存器进行读或写操作。
第1页
加法器或减法器的执行过程:首先通过多选器加载一个16位的数据到寄存器A。然后在总线上加载另一个16位的数字。加/减单元执行指定的运算,结果输出到寄存器G。最后,G中的数据可按需求传输到其他寄存器。
图1 主体部分结构图
本次设计有四条基本指令,执行指令时的整个工作流程如下:外部存储器给控制器一个指令,处理器接受指令并译码后发出控制信号给数据通路来执行相应的操作。每条指令执行所需的时间不同,相应的控制信号也不同,将其列表如下:
表1 指令表
由于加/减指令要在总线上多次传输数据,需要多于一个时钟周期才能完成。控制单元使用一个2位的计数器来逐步执行这些指令。当Run信号有效,处理器开始执行DIN输入指令;当指令结束,Done置位。DIN为分时复用端口,T0
第2页
阶段输入命令,T1-T3输入数据。
每条指令以9位的IIIXXXYYY的形式存储在IR寄存器中,其中III表示指令,XXX表示Rx寄存器,YYY表示Ry寄存器。虽然4条指令只需要2位就可以编码,为了以后可以添加指令,我们使用3位来编码。因此,IR必须连接到DIN的16位中的9位,如图1所示。指令是将数据总线上的数据存入寄存器中,指令是将一个寄存器中的数据转移至另一寄存器中,和指令是加减运算指令,运算结果存入Rx中。
2.2 扩展模块
本部分的任务是为处理器外加一个只读存储器和计数器,存储器的大小为16位,32字。计数器则用来产生存储器的地址。计数器的计数值作为地址输给存储器,存储器将该地址存储的16位数作为指令码输出给控制器,然后控制器控制系统执行相应操作。为了方便,存储器和控制器使用了不同的时钟,其结构图如图2所示。
图2 扩展部分结构图
本部分要求使用Quartus II软件LPM库中的存储器来实现,因此本部分较简单,设计的重点与难点为系统的主体部分。可以先设计完成主体模块后再完成此部分扩展。
3. 实现方案
由以上分析知,可以将系统分为两部分设计,即主体模块设计和扩展模块设计,下面将分别讨论这两部分内容。
3.1 主体模块设计
首先,介绍本设计中用到的一些底层模块:
upcount (Clear,Clock,Tstep_Q); //2位计数器 regn(R,Rin,Clock,Q); //16位寄存器
第3页
dec3to8(W,En,Y); //3线-8线译码器
分析主体模块时,依据表1可以将指令执行分为四个阶段,并对它们使用有限状态机的方法分析,此处使用upcount模块的输出值Tstep_Q(两位二进制数)对四个状态编码:T0=2'b00,T1=2'b01,T2=2'b10,T3=2'b11。由表1可知T0阶段只有控制信号IRin有效,控制器取得指令。接下来的三个阶段起作用的信号如表1中所示,由于XXX表示Rx寄存器,YYY表示Ry寄存器,故而要经过译码单元dec3to8译码,得到相应的Rin和Rout的值Xreg和Yreg。由表1可知信号AddSub决定加/减单元进行加法或减法操作;当一条指令执行完毕时,Done信号有效。
此处使用了两级case语句嵌套的方法通过判断Tstep_Q和I的值使相应的控制信号有效,而其他信号则处于无效状态。故而在此处对应的always部分的开始将所有控制信号置零。当指令和所处的状态发生改变时,相应的控制信号也发生改变,由此易写出此always部分的敏感信号列表,如下所示:
always @(Tstep_Q or I or Xreg or Yreg)
当控制数据输入的信号有效时,通过regn单元将总线BusWires上的数据存入相应的寄存器;而当控制数据输出的信号有效时,通过Sel的值判断哪个寄存器输出数据,而Sel的组成如下:
Sel={Rout,Gout,DINout}
对于加/减单元,其由一个always部分和一个regn模块组成。其中always部分主要进行算数运算,得到结果Sum;当Gout信号有效时,通过regn模块将运算结果Sum传输至总线上。
将以上各部分的程序进行综合、分析,写出整个主体模块的程序。然后建立顶层模块,进行引脚分配,至此主体模块设计基本完成。可进行下一步的仿真分析。
3.2 扩展模块设计
此模块要应用Quartus II软件LPM库中的存储器来实现,应注意以下几点:(1)此处用到的是LPM库中ROM:1-PORT;(2)所选存储器大小为32字16位;(3)此处存储器为只读存储器,故需建立一个MIF文件以设定存储器存储的数值。
由于存储器为32个字,此处建立了一个5位的计数器确定存储器的地址。它应用了与处理器不同的时钟MClock。
以上工作完成后,建立顶层模块,进行引脚分配。然后进行仿真分析。
4. 仿真分析
当程序设计完成后,要进行仿真分析,以检验程序是否有错误出现。当程序出错后,分析仿真结果进而推出错误之处,返回程序修改代码。重复以上过程,直至仿真无误后进行硬件实验。
第4页
本次设计主要是通过波形仿真进行验证的,建立VWF文件进行波形仿真。仿真结果如下:
图3 仿真结果图
该图使控制器依次处理下列指令: load R0, #002A load R1, #0055 load R2, #0022 add R1, R0 mov R3, R1 sub R3, R2
为了方便,此处使用的通用寄存器只有R0-R3。观察仿真结果,每条指令执行完毕后Done信号有效,相应寄存器的值也发生变化。以第一条指令为例:执行该命令对应的指令码IIIXXXYYY=001000000,首先,数据总线上的据应为002A,当复位信号无效,而Run信号有效时,开始执行指令。经过两个时钟周期,指令执行完毕,Done信号有效,R0寄存器中的数值也变为002A,系统重新回到T0状态(计数器数值为0),此时可继续执行下一条指令。
有仿真结果可知,系统设计没有错误,此时即可将程序下载至硬件电路中,进行硬件实验。由于条件限制,此处没有进行硬件实验。硬件实验时,只需按照引脚的对应关系,赋给相应引脚数值,然后观察显示结果。显示结果与理论值无误时,表明本次设计正确可行,完成本次的设计任务。
第5页
结 语
本次实验我们学会了使用Verilog语言对FPGA进行设计,使其能够执行一些简单的指令。设计系统时,先对给出的任务进行分析,将电路分成各个模块,然后对每个模块进行设计,最后再进行综合。设计时可以遵循自顶向下或自下而上的方法。编程完成后进行仿真分析,若有错误进行相应的改正。最后,将程序下载至电路验证。
对硬件描述语言有了更充分的认识:硬件描述语言(HDL)是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。它可以使数字逻辑电路设计者利用这种语言来描述自己的设计思想,然后利用电子设计自动化(EDA)工具进行仿真,自动综合到门级电路,再利用CPLD或FPGA实现其具体功能。 通过本次实验设计,我们可以了解到使用Verilog语言对FPGA进行设计,简化了电路结构,而且Verilog HDL语言最大的特点就是简洁灵活高效,其风格类似C语言,非常易于学习和掌握。电子设计工程师已经从传统的手工设计、计算机辅助设计进入到了使用EDA 工具进行电子系统设计的阶段。目前,世界上EDA设计已经进入片上系统(System On Chip,SOC)时代,设计复杂度日益提高,为了缩短设计周期,IP核(Intellectual Property Core)的可重用技术发展迅速,FPGA和Verilog HDL将会有更大的用武之地。因此,用Verilog HDL设计电路已经成为电子设计人员必须掌握的一项技术。
参考文献
第6页
[1] S.Brown(著),夏宇闻(译). 数字逻辑基础与Verilog设计(第2版). 机械工业出版社.
[2] 王淑娟,杨春玲. 数字电子技术基础. 2011.06. 高等教育出版社. [3] 吕志鹏. 16位微处理器在FPGA上的设计与原理实现. 2004.05.
[4] 吴娟. 基于RISC的微处理器研究与设计. 2010.4. 苏州大学硕士学位论文.
第7页
因篇幅问题不能全部显示,请点此查看更多更全内容