打造国内最大的IC交易平台
技术资料 行业资讯 PDF资料 IC价格 IC替换 缩略语 IC供应 IC采购
基于同步原则的FPGA-CPU设计
类别:网文精粹  
 
An FPGA-CPU Design Based on Synchronous Principle

摘要:FPGA是一种可完成复杂逻辑功能的通用可编程器件,因其丰富的触发器资源、可重配置能力及低开发风险而广受欢迎。该文以Altera 公司的Cyclone FPGA为目标器件,通过对原有CPU模型进行改进,讨论数字系统设计中的常见问题与满足同步原则的解决方案。

关键词:CPU;FPGA;数字系统; 同步原则

Abstract: FPGAs are generic, programmable digital devices that can perform complex logical operations. FPGAs are widely used because of their rich trigger resources, configurable abilities and low development risk, making them increasingly popular. This paper presents some frequently confronted problems and the essentiality of synchronous design in digital systems based on an existed FPGA-CPU design.

Keywords: CPU; FPGA; Digital Systems; Synchronous Principle

0 引言

随着电子工业和超大规模集成电路(VLSI)技术的高速发展, 要求专用集成电路(ASIC) 的功能越来越强, 功耗越来越低, 生产周期越来越短, 这些都对芯片设计提出了巨大的挑战, 传统的芯片设计方法已经不能适应复杂的应用需求了[1]。在这种环境下,现场可编程门阵列(FPGA)器件以其灵活的可重配置和可编程特性,逐渐成为一种流行的设计载体被广泛地应用在工业控制、通信、消费类电子等各种领域的复杂设计中[3]。

本文以FPGA为目标器件,用硬件描述语言(HDL)完成简化16位CPU的设计。对其改进,并讨论数字系统设计中的常见问题以及满足同步原则的解决方案。

1 CPU的结构

指令系统是CPU结构的基础,是计算机系统的软硬件分界面,反映了计算机体系结构的主要特点。参考一个简化的指令系统[2]。每条指令的长度为16位,前3位为操作码,可实现8条指令;后13位为地址,采用直接寻址方式,可寻址8K内存空间。可实现数据传送、算术逻辑运算、分支/跳转以及空操作等简单逻辑功能。将较复杂的功能放到软件层面和外围电路中实现,起到了简化硬布线逻辑的作用。

500)this.style.width=500;" border=0>

图1 CPU结构简图

系统采用哈佛结构,即数据和指令放入不同的内存空间。其中数据存入RAM,指令存入ROM。CPU核划分为两个部分:数据通道和控制通道。其中数据通道包括累加器(ACCUM)、算术逻辑单元(ALU)和数据选通器(MUX)等。控制通道包括指令寄存器(IR)、指令指针寄存器(PC)和控制器(CONTROL)等部件。结构如图1所示,ADDR为地址多路器。与传统的以ALU为中心的结构不同,该结构以控制器为核心,控制并协调各个功能部件运行。控制器对指令进行译码,以发出控制信号的方式为指令的执行“打通”所需的数据通道。

2 同步时序设计

对于如CPU这样的复杂逻辑系统,时序设计的好坏成为影响系统性能的一个重要因素。在设计具体电路前,必须对系统时序做一个整体规划,才能避免因对信号间时序关系理解不充分而导致设计错误的危险。基于上述理由,甚至可以说RTL级设计实际上只是一场时序的游戏[3]。通过对原有CPU改进,讨论时序设计中的常见问题及满足同步原则的解决方案。

2.1 门控时钟与时钟使能

CPU内部各部件工作速度不相同,需要对外来时钟进行分频,用分频信号驱动各部件运行。那么分频信号怎样驱动功能部件?

500)this.style.width=500;" border=0>

图2 CMOS 功耗分析

2.1.1 门控时钟

如图2所示,当Vin由高变低时,PMOS导通NMOS截止,Vdd通过PMOS对电容CL充电;当Vin由低变高时,CL经NMOS放电[4]。容易看出,可以从降低时钟频率方面下手减少系统功耗。由于外部时钟源的频率高于内部分频时钟信号的频率,若直接将分频信号加到各部件的时钟端即可起到降低功耗的目的。这称为门控时钟。

门控时钟在降低功耗的同时也带来了问题。分频时钟信号具有较大的Clock Skew,使得数据在部件间的传输可靠性降低,影响了整个系统的性能和可靠性。从图3中可以看出,分频信号alu_clk、clk1、fetch的边沿没有对齐,采用门控时钟带来了多时钟域的问题。

500)this.style.width=500;" border=0>

图3 分频时钟信号

2.1.2 时钟使能

满足同步原则的方法是使整个系统同步于单一的外来时钟,时钟信号走全局时钟网络,而将分频信号连到功能模块的使能端。这样既能避免不必要的亚稳态,又能消除毛刺对稳定性的影响。单一时钟域简化了静态时序分析,提高了系统的工作性能。几乎所有的FPGA器件都配有全局时钟网络,可提供很强的驱动能力以保证足够小的Clock Skew。在设计中将时钟信号与复位信号与专用引脚绑定,就能够获得更高的时钟信号质量。

门控时钟与时钟使能的问题实际上是功耗与性能的取舍问题。

2.2 混合时钟沿与单一时钟沿

设计中总是希望提高系统的性能,也就是让系统在尽量短的时间内完成规定任务。CPU的性能可以用MIPS(Million Instruction Per Second)指标来评价,计算公式如公式(1):

500)this.style.width=500;" border=0>

容易看出,可以从降低CPI(Cycle Per Instruction)和提高CPU的稳定工作频率入手来提高系统性能,而有时候两者却是矛盾的。控制器作为CPU的核心,指挥并协调各个功能部件协同工作完成指令的执行。提高CPU性能的问题可归结为如何规划系统时序以获得尽可能小的CPI和尽量大的稳定工作频率。为方便后续讨论,先假定执行部件均在时钟上升沿动作。

2.2.1 混合时钟沿电路

混合时钟沿电路是指一部分部件在时钟上升沿动作,另一部分部件在时钟下降沿动作。在控制器的设计中,可以将控制信号的发出与执行部件的动作隔开半个时钟周期,即控制信号在时钟下降沿发出,而执行部件在下个时钟上升沿动作。这样可将CPI控制在较小的范围内,然而也带来了问题。以读取指令的过程为例,首先控制器在时钟下降沿向程序存储器ROM发出一个读信号RD,ROM在接到RD信号后将指定地址的数据写到数据总线上,指令寄存器IR在时钟上升沿从数据总线上读取指令。假定该ROM为理想器件不带延时,同时忽略掉对系统影响较小的Micro tCO、Micro tSU和Clock Skew,则整个过程的延时为RD信号的延时tCO和IR所需的建立时间tSU。由于采用混合时钟沿电路,从RD信号的发出到IR的动作只相隔半个时钟周期,因此要使系统稳定工作,应满足公式(2):

2×(tCO+tSU)<PERIOD 公式(2)

这种设计时钟周期较大。然而问题并不仅仅于此,使用混合时钟沿电路也使得静态时序分析变得复杂,难以精确计算出电路的稳定工作频率,大大地降低了系统性能。以Cyclone EP1C3T100C6为目标器件尝试添加各种约束,得到最高的稳定工作频率仅为55MHz。与后面讨论的单一时钟沿电路相比,虽然CPI较小,但相对于工作频率的下降来说得不偿失。

2.2.2 单一时钟沿电路

单一时钟沿电路是指控制信号的发出与执行部件的动作均在时钟上升沿进行,两者相隔一个时钟周期。以读取指令的过程为例,为使系统稳定工作,只需要满足公式(3)。

tCO+tSU<PERIOD 公式(3)

这种设计的时钟周期较混合时钟沿电路降低了1倍。在相同器件上综合出来的稳定工作频率达到了192MHz,超过混合时钟沿电路的3倍。该设计的CPI为6,即每6个周期执行一条指令。简要给出运算性指令的工作时序如表1所示。

表1 运算性指令工作时序

500)this.style.width=500;" border=0>

现代CPU更多地采用指令流水线来降低CPI。几乎可以肯定的说,相对于混合时钟沿电路,采用单一时钟沿电路的设计更有利于系统整体性能的提高。

4 综合与仿真

为了对改进后的CPU进行验证,需要一些外围电路的配合,如程序存储器ROM、数据存储器RAM和地址译码器。这些器件不用综合,在测试中用虚拟器件代替。此外,为了验证CPU功能是否正确,还需要编写能够全面测试CPU功能的指令段,通过监视指令的执行路径来判断CPU是否正常工作。

采用QuartusII6.0集成开发平台,通过Nativelink实现与综合器Synplify8.1和仿真器Modelsim6.1f的数据无缝连接。目标器件为Cyclone EP1C3T100C6

添加约束条件:tCO:4.5ns tSU:1.5ns tH:0ns 时钟约束:180MHz

综合后得到的结果如下:

Total logic elements: 271/2910(9%)

Total pins: 34/65(52%)

静态时序分析如下:

Worst-case tSU: 1.176 ns

Worst-case tCO: 4.119 ns

Worst-case tH: -0.725 ns

Clock Setup: 213.36 MHz (period = 4.687 ns)

用一段指令对CPU进行测试,通过对指令指针PC的监视可以判断CPU是否正常工作。若各条指令均正确执行程序应停在20H处,在任何其他位置停止都表明CPU工作异常,需要对设计进行修改。由图4可看出CPU运行正常。整个过程中CPU执行14条指令,耗时436ns。平均每条指令耗时31.14ns,由于CPI为6故时钟周期为5.2ns。系统稳定工作在192MHz,指令执行速度为32MIPS。

500)this.style.width=500;" border=0>

图4 第一段测试程序运行结果

5 结论

在数字系统中,时序规划往往决定了系统性能,设计时应尽可能满足同步原则。一方面要尽可能使整个系统同步于单一时钟,即使不得不涉及多时钟域也应做到局部同步,避免使用门控时钟;另一方面要避免使用混合时钟沿电路,而改用满足同步原则的单一时钟沿电路代替。原有CPU在两条原则均不满足时稳定工作频率低于10MHz,采用时钟使能后最高工作频率为55MHz,进而改为单一时钟沿电路后能稳定工作在192MHz。在现代CPU中加入指令流水线可使CPI降到1,指令执行速度达到192MIPS。本文作者创新点:提出了一种基于同步原则的微处理器的设计方法,对原有CPU模型在结构上扩展,在时序上重新设计,并根据FPGA的结构特点对状态机进行了优化,改进后设计的MIPS较原设计提高了20多倍。