APP下载

一种基于FPGA的流水线8051IP核的设计与实现

2014-03-12王发栋杜慧玲史翔

现代电子技术 2014年5期
关键词:译码器双通道译码

王发栋 杜慧玲 史翔

摘 要: 给出一种基于FPGA的8051MCU的IP核设计方案,指令集与标准8051系列处理器完全兼容。采用译码——执行两级流水结构,并通过了仿真与综合,理论速度较传统8051MCU有6~10倍的提升。针对CISC流水线设计的复杂性,提出了一种高效的实现方案,可以使执行结构近满状态运行,且简便有效地解决了传统流水线所必须面对的三种冲突。设计采用Verilog HDL语言描述,并采用ModelsimSE 6.2进行功能和时序验证,将代码下载到Xilinx公司的FPGA上进行物理验证,测试了一个LED流水灯程序,结果表明软核达到了预期的效果。

关键字: 8051微处理器; 流水线; FPGA; 控制冒险

中图分类号: TN710?34 文献标识码: A 文章编号: 1004?373X(2014)05?0080?03

0 引 言

自51单片机应用以来,对其进行功能改进和性能提升的芯片设计层出不穷。但由于其CISC的架构,对其流水线化始终局限于将CISC指令转换为可以在一周期内完成的类RISC指令,然后使用RISC指令流水作业的方式,这虽然可以让多条指令同时执行,但增加了译码结构的复杂程度,而且需要复杂的控制逻辑解决指令同时执行带来的传统流水线所必须面对的三种冲突。本文原创性地提出一种新的实现方案,该方案解决了这三种冲突,且在FPGA的平台下最大限度地做到填充执行结构,使得指令可以流畅运行。

1 MCU结构与FPGA平台

本文设计的8051 IP核是与传统8051指令集兼容的MCU内核,不包含定时器等模块但通过总线预留接口。其结构如图1所示。

(1)译码器。负责将读入的指令译成可供流水线执行结构执行的控制码,同时向其发送执行所需的地址和数据。它包含4个控制码队列,在译码过程中循环地向四个队列中写入当前指令的控制码,因此可以不必等待指令执行完毕再继续下一条指令的译码。

(2)流水线执行结构。读取译码器发出的控制码并进行相应的操作。主要完成对地址单元的读写,数据总线的操作和PC的控制。

(3)ALU算术逻辑运算单元。完成8位整数的四则运算和逻辑运算,同时内置了位寻址单元,具有位运算的功能。

(4)256 B的RAM单元。其中低128 B是连续的RAM空间,高128 B是特殊功能寄存器SFR,被分散在各模块中。

(5) 216 B的ROM单元。指令存储空间,存储指令和表格。

设计采用Xilinx XCV300芯片,可以使用Xilinx公司提供的BlockRam。它不消耗逻辑资源,且可以实现双通道读写,增大了内部总线的带宽。同时,该型可以使用Xilinx提供的乘法器和除法器,有效地缩短了乘法和除法操作的时间。

2 流水线设计及性能分析

2.1 CISC指令流水化的控制码方案

51单片机采用的是CISC架构,其指令长度从1~3 B不等,指令执行周期也不固定,对其直接进行流水化控制逻辑复杂,难度较大。吸收传统CISC流水化实现方案的积极因素,针对FPGA平台的特定结构,对其进行改进。总体思路是将其转换为可单周期执行的指令,称其为控制码,将它发送给流水执行部件,但不像传统流水线的方式去流水,而是进行单指令流水,即对指令A转换的指令[a(0)-a(n)]进行流水,在A指令的全部次级指令执行完毕前,不允许其他指令进入流水线。这样避免了流水线的结构冲突和数据冲突,对于控制冲突,由于PC在执行转移指令前不会改变,译码仍然是顺序译码,即相当于默认跳转不成功。若预测失败,则流水线暂停跳转后第一条指令的字节数个周期。在中断到来时,自动生成保存当前PC的控制码,同时清空控制码队列并跳转到中断执行程序。

2.2 与传统流水线方案的对比

流水线思想的最终目的,实质上是尽量并行化地使用MCU的全部资源。因此这里提出两条观点:

(1) 不完全流水线化的执行结构若能保证资源的充分使用,因其指令周期较流水化的指令周期短,故其整体效率与流畅的流水线相近。

(2) 尽力避免流水线冲突使得指令运行流畅,不能流畅运行的流水线其效率可能低于无流水的执行结构。

前面提到,与传统流水线不同,这里采取的方案是单指令流水,其实质是将译码和执行分开,让两者并行运行。当指令周期与所执行指令的平均字节数即译码周期相等时,流水线恰好可以无中断地运行。在FPGA平台下,通过对控制码的优化设计,将指令的平均周期控制在两个时钟周期,与51指令集的平均字节数相同,符合提出的理论。同时,在译码器中设置了4个控制码队列,保证了在字节?周期数不匹配时能够有足够的空间进行自动的调节。

3 流水线体系结构

(1) 控制码定义

对其指令行为进行分析,给出译码器发送给流水线执行结构的控制码定义。控制码共19位,其中前3位是控制流水线执行器读取源地址、目的地址及操作数的。第4~9位控制A通道的寻址和数据读写,第10~15位控制B通道的寻址和数据读写。第16、17位控制将立即数发送到A或B通道上,第18、19位控制ALU模块读取A或B通道上的数据。

(2) 地址、立即数与其他信息

指令执行需要的地址、立即数信息由译码器发送给流水线执行器,流水线执行器根据控制码决定是否读入信息。其中立即数和目的地址两个字节也可以存放控制转移类指令所需的PC地址和偏移地址。

(3) ALU控制码

定义了一组控制码,发送到ALU控制其执行相关的运算操作。由于ALU运算通常在指令执行的后期,为缩短指令执行周期,采用了提前发送,内部缓存的延迟方式达到同步。

(4) 双通道下的指令时序设计特点

前面已经提到,设计所采用的FPGA有双通道的Blockram,将两个通道分别称为A通道和B通道,双通道增加了系统内部总线的带宽,也给数据通路的设计带来了很大的方便。例如对于数据传送类指令,可以在上升沿从A通道读出数据,在下降沿向B通道中写入,使得指令在一个时钟周期内完成。这也是除指令流水化执行以外,提高设计性能的一个重要因素。

4 流水线的实现与冲突的解决

流水线结构存在着三种冒险,即结构冒险、控制冒险和数据冒险。结构冒险指不同的指令在同一时间对同一硬件资源提出了使用的申请,从而产生了冲突;控制冒险发生在控制转移类指令所需的条件是流水线中尚未得到的结果,因此必须等待该结果得出后才能执行;数据冒险则主要指“未写先读”,即后面的指令所需的源操作数是前面指令的目的操作数,因此产生了错误。

在本设计中,由于采用单指令流水方案,因此避免了结构冒险和数据冒险。对于控制冒险,译码器的预测策略是总是认为跳转不成功,即不改变PC,继续译码。若预测成功,则流水线无停滞地执行;若预测失败,则译码器首先清空全部控制码队列,然后再进行新的译码,流水线将阻塞新的程序段第一条指令的字节数个周期。

5 设计仿真与综合结果

6 结 语

本文针对8051的CISC指令集和FPGA平台的特点,提出了一种新的CISC流水化执行方案,实现了51指令的流水化执行并解决了流水化所要面对的三种冒险。设计代码采用Verilog?HDL编写,仿真测试和综合的结果表明,该设计逻辑正确,系统参数达到了要求。

参考文献

[1] Atmel. AT89C51 8?bit microcontroller with 2K bytes flash [M]. USA: Atmel, 2008.

[2] 尚笠,葛元庆,周润德.80C51微处理器嵌入式内核的设计研究[J].微电子学,2000,30(1):28?30.

[3] PATTERSON D A, HENNESSY J L.计算机组成与设计?软件硬件接口[M].郑纬民,译.2版.北京:机械工业出版社,2012.

[4] Xilinx. Dual?port block memory core v6.3 [EB/OL]. [2005?08?31]. http://www.xilinx.com/support/documentation/ip_documentation/dp_block_mem.pdf.

[5] THIMMANNAGARI C M R. CPU design: answers to frequently asked questions [M]. USA: Springer, 2005.

[6] 李亚民.计算机组成原理与系统结构[M].北京:清华大学出版社,1999.

[7] 周宁宁,刘胜.基于FPGA技术的CPU的设计与实现[J].南京邮电学院学报,2003,23(1):77?79.

[8] 孟现元,钱伟康.FPGA嵌入式系统设计[M].北京:电子工业出版社,2007.

[9] 倪继利,陈曦,李辉.CPU源代码分析与芯片设计及Linux移植[M].北京:电子工业出版社,2007.

[10] SIMIC J, TERAN S. 8051 core specification [DB/OL].(2001?09?25)[2013?01?21]. http: //www.opencores.org.

前面已经提到,设计所采用的FPGA有双通道的Blockram,将两个通道分别称为A通道和B通道,双通道增加了系统内部总线的带宽,也给数据通路的设计带来了很大的方便。例如对于数据传送类指令,可以在上升沿从A通道读出数据,在下降沿向B通道中写入,使得指令在一个时钟周期内完成。这也是除指令流水化执行以外,提高设计性能的一个重要因素。

4 流水线的实现与冲突的解决

流水线结构存在着三种冒险,即结构冒险、控制冒险和数据冒险。结构冒险指不同的指令在同一时间对同一硬件资源提出了使用的申请,从而产生了冲突;控制冒险发生在控制转移类指令所需的条件是流水线中尚未得到的结果,因此必须等待该结果得出后才能执行;数据冒险则主要指“未写先读”,即后面的指令所需的源操作数是前面指令的目的操作数,因此产生了错误。

在本设计中,由于采用单指令流水方案,因此避免了结构冒险和数据冒险。对于控制冒险,译码器的预测策略是总是认为跳转不成功,即不改变PC,继续译码。若预测成功,则流水线无停滞地执行;若预测失败,则译码器首先清空全部控制码队列,然后再进行新的译码,流水线将阻塞新的程序段第一条指令的字节数个周期。

5 设计仿真与综合结果

6 结 语

本文针对8051的CISC指令集和FPGA平台的特点,提出了一种新的CISC流水化执行方案,实现了51指令的流水化执行并解决了流水化所要面对的三种冒险。设计代码采用Verilog?HDL编写,仿真测试和综合的结果表明,该设计逻辑正确,系统参数达到了要求。

参考文献

[1] Atmel. AT89C51 8?bit microcontroller with 2K bytes flash [M]. USA: Atmel, 2008.

[2] 尚笠,葛元庆,周润德.80C51微处理器嵌入式内核的设计研究[J].微电子学,2000,30(1):28?30.

[3] PATTERSON D A, HENNESSY J L.计算机组成与设计?软件硬件接口[M].郑纬民,译.2版.北京:机械工业出版社,2012.

[4] Xilinx. Dual?port block memory core v6.3 [EB/OL]. [2005?08?31]. http://www.xilinx.com/support/documentation/ip_documentation/dp_block_mem.pdf.

[5] THIMMANNAGARI C M R. CPU design: answers to frequently asked questions [M]. USA: Springer, 2005.

[6] 李亚民.计算机组成原理与系统结构[M].北京:清华大学出版社,1999.

[7] 周宁宁,刘胜.基于FPGA技术的CPU的设计与实现[J].南京邮电学院学报,2003,23(1):77?79.

[8] 孟现元,钱伟康.FPGA嵌入式系统设计[M].北京:电子工业出版社,2007.

[9] 倪继利,陈曦,李辉.CPU源代码分析与芯片设计及Linux移植[M].北京:电子工业出版社,2007.

[10] SIMIC J, TERAN S. 8051 core specification [DB/OL].(2001?09?25)[2013?01?21]. http: //www.opencores.org.

前面已经提到,设计所采用的FPGA有双通道的Blockram,将两个通道分别称为A通道和B通道,双通道增加了系统内部总线的带宽,也给数据通路的设计带来了很大的方便。例如对于数据传送类指令,可以在上升沿从A通道读出数据,在下降沿向B通道中写入,使得指令在一个时钟周期内完成。这也是除指令流水化执行以外,提高设计性能的一个重要因素。

4 流水线的实现与冲突的解决

流水线结构存在着三种冒险,即结构冒险、控制冒险和数据冒险。结构冒险指不同的指令在同一时间对同一硬件资源提出了使用的申请,从而产生了冲突;控制冒险发生在控制转移类指令所需的条件是流水线中尚未得到的结果,因此必须等待该结果得出后才能执行;数据冒险则主要指“未写先读”,即后面的指令所需的源操作数是前面指令的目的操作数,因此产生了错误。

在本设计中,由于采用单指令流水方案,因此避免了结构冒险和数据冒险。对于控制冒险,译码器的预测策略是总是认为跳转不成功,即不改变PC,继续译码。若预测成功,则流水线无停滞地执行;若预测失败,则译码器首先清空全部控制码队列,然后再进行新的译码,流水线将阻塞新的程序段第一条指令的字节数个周期。

5 设计仿真与综合结果

6 结 语

本文针对8051的CISC指令集和FPGA平台的特点,提出了一种新的CISC流水化执行方案,实现了51指令的流水化执行并解决了流水化所要面对的三种冒险。设计代码采用Verilog?HDL编写,仿真测试和综合的结果表明,该设计逻辑正确,系统参数达到了要求。

参考文献

[1] Atmel. AT89C51 8?bit microcontroller with 2K bytes flash [M]. USA: Atmel, 2008.

[2] 尚笠,葛元庆,周润德.80C51微处理器嵌入式内核的设计研究[J].微电子学,2000,30(1):28?30.

[3] PATTERSON D A, HENNESSY J L.计算机组成与设计?软件硬件接口[M].郑纬民,译.2版.北京:机械工业出版社,2012.

[4] Xilinx. Dual?port block memory core v6.3 [EB/OL]. [2005?08?31]. http://www.xilinx.com/support/documentation/ip_documentation/dp_block_mem.pdf.

[5] THIMMANNAGARI C M R. CPU design: answers to frequently asked questions [M]. USA: Springer, 2005.

[6] 李亚民.计算机组成原理与系统结构[M].北京:清华大学出版社,1999.

[7] 周宁宁,刘胜.基于FPGA技术的CPU的设计与实现[J].南京邮电学院学报,2003,23(1):77?79.

[8] 孟现元,钱伟康.FPGA嵌入式系统设计[M].北京:电子工业出版社,2007.

[9] 倪继利,陈曦,李辉.CPU源代码分析与芯片设计及Linux移植[M].北京:电子工业出版社,2007.

[10] SIMIC J, TERAN S. 8051 core specification [DB/OL].(2001?09?25)[2013?01?21]. http: //www.opencores.org.

猜你喜欢

译码器双通道译码
近端胃切除双通道重建及全胃切除术用于胃上部癌根治术的疗效
基于校正搜索宽度的极化码译码算法研究
纠错模式可配置的NAND Flash BCH译码器设计
跟踪导练(一)5
从霍尔的编码译码理论看弹幕的译码
LDPC 码改进高速译码算法
采用6.25mm×6.25mm×1.8mm LGA封装的双通道2.5A、单通道5A超薄微型模块稳压器
HINOC2.0系统中高速LDPC译码器结构设计
电力线通信中LDPC译码器的优化设计与实现
基于概率裁剪的球形译码算法