支持错误检测的SPI从机模块的设计与实现
2016-12-26刘晓阳
刘晓阳
摘 要
SPI是一种常见的串行总线接口,可将串行信号转化为并行信号,有效地节约芯片的引脚。本文开发了一种SPI从机模块,它是Ku频段相控阵芯片的一部分。其基本结构参照SPI标准设计,在标准的基础上添加了奇偶校验与自检验功能,使接口具备了在复杂电磁环境下检测传输错误的能力。本文使用数字芯片的设计方法,完成了从前端功能设计到后端设计的全部流程,并进行了流片。使用FPGA作为主机对芯片进行了测试,结果符合预期,实现了设计目标。
【关键词】SPI 从机模块 数字芯片设计
当需要向集成电路芯片并行地传输大量信号时,会占用许多芯片引脚;但这些引脚属于稀缺资源,不能被大量占用。为此,需要在芯片中添加接口模块,接口使用串行模式接收数据,在内部转换为并行模式后再传递给后端模块。
SPI(Serial Peripheral Interface)是Motorola提出的一种同步串行外设接口[1],允许主机与外部设备进行串行、同步以及全双工的通信;它包括主机模块和从机模块。SPI使用四条信号线,分别是串行时钟(SCLK)、主机输出/从机输入(MOSI)、主机输入/从机输出(MISO)以及使能信号(SS),若是需要控制多个从机只需要增加相应的使能信号线。SPI能节约大量的引脚资源,因此被运用于各种芯片当中。
本文研究开发了一种SPI从机模块,它是某雷达芯片的一部分。该芯片需要同时输入44路控制信号,若使用并行输入,需要44个对外引脚,这会使芯片面积大幅增大,增加成本。本文将主机控制信号串行地输入芯片,通过SPI转换成并行信号,再传输给芯片的后端模块。根据应用环境的需要,以SPI标准为基础,本文增加了自检验与奇偶校验两种纠错模式,使芯片具备了在复杂电磁环境中进行错误检测的能力。
1 SPI从机模块整体结构
标准SPI从机模块一般包括循环移位寄存器与相关控制电路。为了支持奇偶校验与自检验的功能,本文设计的SPI从机模块增加了自检验模块、奇偶校验模块以及模式判断模块,整体结构如图1所示。
1.1 循环移位寄存器
这是是本设计的核心部分。SPI的主机与从机分别有一个循环移位寄存器,首尾相连,由同步时钟驱动。每个时钟周期,主机移位寄存器末尾的数据位通过MOSI进入从机移位寄存器的队首,相应的从机移位寄存器末尾的数据通过MISO进入主机移位寄存器的队首,这样就实现了串行、同步、全双工的通信。
1.2 输出寄存器
由主机传递至从机的数据要求在稳定之后并行读取,本设计在移位寄存器后添加了一个相同宽度的输出寄存器,由FINISH信号控制,当检测到FINISH信号的上升沿时将移位寄存器输出的数据读入输出寄存器。
1.3 模式判断模块
用于判断对本帧数据进行何种检测。在每帧数据前添加了3位模式判断位,模式判断模块读取前3位数据并进行判断,决定启动哪种检测模块。传输数据时,数据与时钟信号同步传输,第1位数据到达时第1个时钟沿也同时到达,数据进入移位寄存器,模式判断模块中计数器开始计数。计数到3后,计数器产生一个信号,将已经进入移位寄存器的3位数据读入模式判断模块中的寄存器,并对数据进行判断,改变控制信号control的逻辑值,使能不同的模式。
1.4 奇偶校验模块
检测主机至从机的传输过程中是否出错。数据按帧传输,每帧44位,要求对每帧数据进行奇偶校验。每帧数据末尾添加了1位奇偶校验位,主机根据传输的数据位确定校验位,要求保证44位数据位加1位校验位共45位数据中‘1的个数为偶数。若模式判断模块判定应当进入奇偶校验模式,则启动奇偶校验模块,将该45位数据读入奇偶校验模块中的寄存器,并判断其中‘1的个数。若为偶数则认为传输中没有出现错误。同时输出寄存器读入44位有效数据位至后端模块。
1.5 自检验模块
检查内部寄存器是否出现问题。进入自检验模式后移位寄存器不再接收主机传来的数据,改为接收自检验模块产生的一组已知数据。传输完成后,自检验模块再读出移位寄存器内的数据,与已知数据进行比较,若两者相同说明寄存器工作正常,若有不同之处则说明寄存器出现故障。该模块接收control信号作为使能,高位有效;即control为“1”时启动自检测模块,进入自检测模式。若进入自检验模式,切换输入移位寄存器的数据流,改为输入自检验模块产生的已知数据流。接到主机传来的FINISH信号后,自检测模块读取移位寄存器中的数据,与已知数据进行比较,判断是否出现错误。
2 SPI接口的前端与后端设计
前端设计指的是模块逻辑功能的设计,使用硬件设计语言对模块逻辑功能进行描述,最后仿真验证。本文使用VHDL进行前端设计,VHDL是IEEE和美国国防部确立的标准硬件描述语言。
后端设计指的是从逻辑功能描述到最终用于流片的设计图的一系列流程,主要包括综合、添加约束、布局布线以及设计规则检查等。几家著名的EDA软件公司为这些流程开发出了功能强大的工具软件。本设计使用Synopsys的Design Compiler进行综合以及时序约束,使用Cadence的Soc Encounter进行布局布线,最后使用Cadence的Calibre进行DRC(Design Rule Check)以及LVS(Layout Versus Schematics)检查。
2.1 综合与约束
综合指的是将硬件描述语言设计的电路,用芯片制造商提供的基本电路单元库实现的过程。约束是指给设计的电路添加诸如建立时间、保持时间、Fan out等约束条件。
综合的第一步是关联综合库,本设计使用的是台积电的0.18um工艺库。综合库包括了基本电路单元的信息,如逻辑关系、尺寸、时延以及温度等。接下来读取设计,并根据设计需要添加相应的约束。最后对设计进行综合,可以看到原先只有行为级描述的设计被替换为由基本电路单元组成的RTL级设计。除了实现逻辑功能外,电路中还添加了缓冲元件以及驱动元件,用于满足时序以及驱动的约束。综合完成后会生成网表,网表是用硬件描述语言描述的关于电路的文件,电路由基本电路单元组成。
2.2 布局布线
综合后得到了由基本电路单元组成的电路,但是器件的布局以及之间连线的放置仍然没有确定。对于集成电路来说,由于其器件数量多、尺寸小的特点,布局布线会对其性能产生巨大的影响,甚至会影响到其是否能够正常工作。我们采用Cadence公司的Soc Encounter来设计集成电路的布局布线。
2.2.1 确定芯片的面积、形状
一般来说芯片的面积要保证放置器件后其密度不会太大,应当给布线留下一定的空间。本设计将芯片的形状设定为正方形。
2.2.2 添加电源环
电源环是指环绕芯片的金属导线,用于给芯片内部的基本电路单元供电,为了承受较大的电流,这些导线往往也比较粗。
2.2.3 布置标准单元
这些标准单元由芯片制造商提供,其高度都被设计为相同的尺寸,因此可以非常整齐的按行排列。标准单元的电源和地分别在上下两端,因此只需要两条线路就可以为整行标准单元供电。
2.2.4 预布线并进行时序优化
优化会调整标准单元以及线路的位置,优化可进行多次,直到没有时序违例后,可以添加时钟数。添加时钟数是在芯片内添加一些特殊的延时以及驱动模块,这些模块添加在时钟线路上,使得时序得到进一步的优化。之后再次进行布线以及优化,直到不存在时序违例为止。若是发现无论如何优化都无法消除时序违例,那么就需要返回综合与约束的步骤,对时序的约束进行调整。
2.2.5 进行布线(NanoRoute)
布线之后进行优化,若没有违例就可以认为这是最终的布线版本了,之后再进行一些诸如修正金属密度的操作,布局布线的工作就完成了。
2.3 设计规则检查
设计规则检查包括两项,DRC与LVS。将经过布局布线的设计导入Virtuoso中,使用内嵌其中的Calibre进行设计规则检查。
DRC(Design Rule Check),即设计规则检查,这些规则由芯片生产商提供,若设计不满足这些规则,在制造芯片的时候就会造成错误。比较典型的一种DRC错误是同层金属之间的距离过小,在制造的时候可能会导致两块金属连到一起,造成严重的问题。相当数量的DRC错误是可以在布局布线阶段消除的,比如金属密度等问题,在Soc Encounter中就有修正金属密度的步骤。
LVS(Layout Versus Schematics)用于验证版图与逻辑图是否匹配。将导入Virtuoso的版图与Design Compiler生成的网表进行比较,可以看到版图中的元件与连线是否能与网表中的对应,若是对应无误,则说明版图可以满足最初设计的逻辑功能。
最终的版图如图2所示,图中在核心逻辑模块周围加上了PAD,即与外部连接用的压焊块,其目的是为了对本设计进行测试。实际芯片如图3所示,芯片被焊在了PCB上,使用金丝将信号引出进行测试,测试结果符合预期。
3 结语
本文设计的SPI从机接口模块在流片后进行了测试,使用FPGA作为主机向芯片传输了大量不同的数据,涵盖了设计中的各种情形。测量芯片的输出信号,完全符合预期,说明逻辑功能正确。此设计实现了串行信号转并行信号的功能,完成了设计目标。
致谢:本论文工作得到了电子科技大学康凯教授和刘辉华老师的指导和帮助,在此表示衷心的感谢。
参考文献
[1]Motorola/Freescale/NXP.SPI Block Guide v3.06 [EB/OL].2003.
[2]IEEE.IEEE Standard VHDL Language Reference Manual[S].ISBN 0-7381-3247-0.
[3]Rushton.A[著],刘雷波,陈英杰[译].用于逻辑综合的VHDL(第三版)[M].北京:北京航空航天大学出版社,2014.
[4]Bhatnagar.H[著],张文俊[译].高级ASIC芯片综合[M].北京:清华大学出版社,2007.
作者单位
电子科技大学英才实验学院 四川省成都市 611731