采用VHDL语言在FPGA上实现WolfMCU体系结构的设计

可编程逻辑

1349人已加入

描述

嵌入式系统往往执行比较单一的任务,针对某种特定应用而专门设计,但目前在嵌入式系统中采用的微处理器绝大部分都是通用嵌入式微处理器,其通用的指令集面对千差万别的嵌入式应用时暴露出专用性差,执行效率低的弱点。另一个问题是,目前应用的嵌入式微处理器都是硬核,功能模块和指令集都是固定的,当应用发生较大变化时,很难通过对微处理器功能模块和指令集进行扩展来适应变化,往往只能换用一款新的微处理器,甚至重新设计整个嵌入式系统的硬件和软件,浪费了大量的时间和金钱。因此,如何提高指令集的针对性,提高指令的执行效率以及如何增强嵌入式微处理器的扩展能力成了困扰嵌入式系统开发人员的两个难题。

1.ASIP和FPGA

ASIP的提出是微处理器设计理念的一项重大创新。ASIP(Application-Specific Instruction set Processor)即专用指令集处理器,它相对传统微处理器最大的特点就是其指令集针对特定应用专门设计,一条指令就可以完成该种应用常做的一系列运算,例如一些常用算法,这样就极大的提高了指令的执行效率,往往若干条普通指令几十个时钟周期完成的操作用一条专用指令几个时钟周期就完成了。

采用ASIP理念设计微处理器可以在很大程度上解决上一节提到的指令集专用性差,指令执行效率低的问题,但这是要付出代价的,因为这些专用指令一般需要专门硬件电路支持才能实现。

ASIP用传统的集成电路技术实现是不现实的,集成电路设计复杂,开发周期长,定型后无法进行扩充,这样每遇到一种新应用,就得重新设计一款专用芯片,成本是不可接受的,这在一个时期内限制了ASIP的发展,直到FPGA(Field Programmable Gate Array,现场可编程门阵列)的出现,才为ASIP的实现提供了可能。

FPGA内部包含可配置逻辑模块CLB(Configurable Logic Block),可以方便的用硬件描述语言进行开发。硬件描述语言描述要实现的电路的功能,经过编译、综合形成配置FPGA芯片的字节码文件,经下载后就可以在CLB内部形成一块模拟的专用电路,功能与实际电路完全一样,这样就可以实现对ASIP中专用指令的支持。用FPGA实现ASIP,相对传统的集成电路来说,最大的优点是扩展性好,遇到新应用时,完全可以对一个较小的软核原型进行扩充,通过添加新模块,实现对针对该应用设计的专用指令的支持,迅速完成新的设计。此外,FPGA还有设计方便,开发周期短,可重复编程等优点。

基于以上讨论,可以看出ASIP+FPGA设计模式可以从很大程度上解决引言中提到的两个难题。为了进行更深入的研究,我们对该设计模式进行了尝试,用VHDL硬件描述语言在FPGA上实现了一个8位微处理器软核(以下称为WolfMCU),并为该微处理器实现了6条专用指令,每一条专用指令都由FPGA芯片中的专用电路支持。

2.WolfMCU体系结构设计

微处理器常用的体系结构有两种――冯氏结构和哈佛结构。在冯氏结构中,指令和数据使用同一个存储器,经由同一个总线传输,而在哈佛结构中,使用两个独立的存储器,分别存储指令和数据,并且使用两条独立的总线,分别作为CPU与每个存储器之间的专用通信路径,这样就保证了系统具有较高的可靠性,嵌入式系统追求的就是高可靠性,因此哈佛结构的嵌入式微处理器在嵌入式系统中被广泛应用,本文介绍的WolfMCU也采用了哈佛结构。

芯片

2.1 WolfMCU的体系结构

WolfMCU由6个模块组成,包括控制器、运算器、定时器/计数器、存储器、串口通信控制器和并行通讯接口,如图1所示。

控制器是WolfMCU的大脑,在它的控制下,各模块协调有序的工作。控制器包括四个模块――译码模块、有限状态机模块、存储器控制模块和中断处理模块。译码模块对指令进行译码,产生相应的控制信号。有限状态机模块控制WolfMCU在不同工作状态之间进行转换。WolfMCU共有四种工作状态:STARTUP、FETCH、EXEC1和EXEC2。STARTUP是WolfMCU加电后的初始状态,WolfMCU复位后也回到这个状态;FETCH是取指令状态,EXEC1和EXEC2是指令执行状态,处理器根据译码结果在这两个状态下取操作数进行计算。存储器控制模块在译码模块产生的控制信号的作用下取指令和操作数,并送往正确的地方。中断处理模块接收外部中断并进行处理,WolfMCU共有两个中断源:Int0和Int0。

运算器在控制器的控制下完成指定的运算。WolfMCU的运算器支持8位数据的加、减、乘、与、或、非等基本运算,还支持十进制调整、乘加、乘减、平方后加、平方后减、取绝对值等特殊运算,这些特殊运算由专用指令实现,由专用电路支持。

系统内不同部件的工作时钟可能与系统时钟不一致,比如串口控制器,它的工作时钟根据不同波特率而不同,这就要求系统提供相应的时钟,以保证其正常工作,定时器/计数器可以实现对系统时钟进行分频以遍提供给相应的部件使用。

存储器包括100字节的ROM、和100字节RAM(ROM和RAM都可以扩充容量)。ROM里存放要执行的程序,RAM中存放运算过程中产生的数据。ROM中的程序可由上位PC机通过串口写入。

芯片

2.2 实验验证

2.1节介绍了WolfMCU的体系结构,接下来以一个小程序为例分析WolfMCU工作的具体过程。

该程序实现加法的操作,图2所示是该程序的三条指令及其在软核ROM中的存储状态,第一条指令NOP是空操作指令,第二条指令把立即数56H送到累加器Acc中去,第三条指令给累加器Acc加上立即数5FH,结果保存在累加器Acc中,最后Acc中的结果是56H+5FH=B5H。

第一条空操作指令比较简单,系统不进行任何操作,只是状态由初始状态(STARTUP),变为取指令状态(FETCH),PC指针加1,指向下一条指令MOV。

在第二个指令周期里,系统处于FETCH状态,存储器控制模块从ROM的001地址处读出8位数据(01110100),把它送往译码模块译码,译码模块根据指令码(01110100)识别出这是MOV_Acc_imm指令(把立即数送往累加器Acc),知道该指令需要有一个操作数,所以把PC指针加1,并把系统下一个状态置为EXEC1,为下一个周期取该指令的操作数做好准备。

第三个指令周期开始,存储器控制模块取出操作数56H(01010110),同时译码模块发出控制信号,指出这是从ROM输入的数据(因为系统处在EXEC1状态),目标寄存器是累加器Acc,然后PC指针加1,置系统下一个状态为FETCH,为取下一条指令做好准备。在这个时钟周期内,存储器控制模块已经把56H送到累加器Acc中了。

ADD指令的执行过程和MOV指令类似,这里就不做详述,唯一不同的是ADD指令执行过程中经过了两次译码,第一次和MOV相同,第二次是在控制器把加法控制信号发送到ALU之后,ALU还要识别出这条加法指令是要把立即数和累加器中的操作数相加,这样才能最终完成操作。

至此,这段程序执行完毕,正确输出结果B5H。下载到Memec V2mb1000 FPGA开发板上的运行,通过七段数码管显示的结果,如图3所示:

芯片

3.WolfMCU指令集设计

对于桌面计算机系统来说,因为要面对不同的应用,指令集功能越强大越好,通用性越强越好。但对于嵌入式系统来说,由于只面对某种特定的应用,所以在满足应用需求的前提之下指令集越小越好,指令越专用,效率越高越好。

综合考虑了指令集尺寸和专用性,WolfMCU的指令集共有22条指令,包括16条通用指令和6条专用指令。16条通用指令都是最常用的指令,以后再设计其他专用指令集微处理器时可以在此基础上进行扩充,通用指令包括数据传送指令,算术运算指令,逻辑运算指令,控制转移指令等四类,在这不再详述。6条专用指令,如表1所列,增强了WolfMCU的运算能力。

除了指令的功能之外,指令的寻址方式也是指令集设计的一个重要方面, WolfMCU共支持4种寻址方式:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址。

芯片

ASIP的设计,重点和难点是专用指令的实现,下面以DA指令(十进制调整)为例介绍一下专用指令的实现。这条指令跟在加法指令后,对累加器Acc中8位结果进行调整,使它调整为压缩得BCD码的数,以完成十进制加法运算功能。DA指令执行的流程图如图4所示,具体代码不再详细介绍,这段代码编译后形成一个模块连接在WolfMCU的控制器上,下载到FPGA芯片之后,相当于有一块专用电路支持DA指令,控制器只要把ACC中的内容发送到这个模块,就可以返回调整后的结果,大大提高了该指令的执行效率。用下面的程序测试DA指令的执行效果:

芯片

程序执行十进制的8和9相加,在WolfMCU软核上执行后,输出0107(图5所示为通过七段数码管显示结果),说明DA指令执行正确。

其他专用指令的实现方式和DA指令类似,也是作为一个模块连接在WolfMCU软核之上,调用这些指令时,只需把操作数传送给这些模块。

芯片

4.专用指令实现与普通指令实现的性能对比

上表中列出的乘加、乘减等指令也像十进制调整指令一样,因为有专门的电路支持这些指令,因此可以在几个时钟周期内迅速输出结果。

芯片

上面提到的十进制调整指令,首先需要判断累加器的低四位是否大于9,辅助进位标志位是否为1,二者满足其一就给低四位加上06H,然后判断高四位,若高四位或进位标志为1,则给高四位加上60H,如果使用普通指令编程实现,至少需要上百个时钟周期,而采用专用指令之后,只需要12个时钟周期,表2列出了采用专用指令和普通指令时需要的时钟周期的对比。

由表2可以看出,采用专用指令后,所需时钟周期数至少降低了40%,为实现这些专用指令付出的硬件代价还是值得的。

芯片

5.总结

本文介绍了一种提高嵌入式微处理器指令执行效率和扩展性的设计思路--ASIP+FPGA,并对这种思路进行了尝试,实现了一个8位的微处理器软核,为这个软核设计了16条通用指令和6条专用指令,通过与普通指令的实现开销进行对比,验证了ASIP+FPGA设计模式的优势,这个简单的8位微处理器软核可以作为设计复杂ASIP的原型,可以很容易的扩展成16位、32位,也可以很方便的添加新的专用指令,满足新应用的需要。

本文作者创新点:1.提出了一种嵌入式微处理器设计模式--ASIP+FPGA模式,从体系结构和专指令集设计两方面对该设计模式进行了分析。2.采用该设计模式,在Xilinx V2MB1000

FPGA开发板上设计并实现了一款嵌入式微处理器软核(WolfMCU),验证了该设设计模式的优势。3.WolfMCU采用模块化设计,可以方便的扩展到16位或添加新的功能模块。

责任编辑:gt

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分