布局布线模块设计需要遵循一定的规范,以便实现一定程度的标准化,有利于后续的自动化设计和维护。图2.23所示为一个标准化模块的基本构成,除功能模块外,还包含一些集成相关的基本模块,如集成相关逻辑、复位同步器、时钟分频和门控电路、中断控制器、数据总线转换桥、寄存器总线转换桥和DFT控制器等。
图2.23 标准化模块的基本构成
布局布线模块内部可能包含一个或多个功能模块,如图2.24所示。
这些功能模块可以是全数字的,也可以是数模(数字的与模拟的)混合的。需要特别注意的是,数字逻辑(包括数模混合模块中的数字逻辑与其他模块的数字逻辑)之间存在一定的时序关系,如图2.25所示。
图2.24 多个功能模块
图2.25 数模混合模块
将模拟模块集成到SoC上会带来一系列新问题。模拟布线需要在匹配寄生、最小化耦合效应和避免过度的IR压降方面进行特殊考虑。例如,对模拟模块布线采用多种屏蔽技术、平衡走线、设置返回信号路径,以及使用差分信号等,如图2.26所示。
图2.26 模拟模块布线
含有数模混合模块的芯片的物理实现有两种策略:一种是使用数字设计工具,将数模混合模块放置其中,适合于“大D(数字)小A(模拟)”芯片;另一种是使用模拟设计工具,将其他数字模块放置其中,适合于“大A小D”芯片。
通常IP总线可分为寄存器总线和数据总线,但一些低速IP仅使用单一总线。
在模块级应尽量保留单一寄存器接口。当模块内部存在多个功能子模块时,可使用层次化的寄存器总线结构,在图2.27(a)中,次级APB转换桥沉浸到相应子模块中,而图2.27(b)中所有APB转换桥都处于模块顶层。
图2.27 层次化的寄存器总线结构
寄存器总线转换桥可以由组合逻辑电路实现,也可以由同步或异步的时序电路实现,如图2.28所示。
图2.28 模块内部寄存器总线结构
对于数据总线接口,应根据功能需求保留单个或多个数据总线接口,如图2.29所示。特别指出,顶层同一时钟信号沿不同路径进入模块后,不应假定彼此仍保持同步关系,如在图2.29(b)中,CLK1和CLK2虽然都源自CLK,但彼此可能是同步或异步关系。
图2.29 数据总线接口
复杂模块的内部可通过互连总线连接多个IP,如图2.30所示。
图2.30 内部连接多个IP
模块的寄存器总线接口与数据总线接口之间,可以是同步的,也可以是异步的,具体情形需要参考IP设计手册。
通常,模块会具有功能时钟、数据总线时钟、寄存器总线时钟,如图2.31所示,有时还会有特殊用途的时钟。
图2.31 模块的时钟结构
原则上,模块所需时钟应从外部输入。如果在特殊情况下需要从内部产生,则应重新进行外部复位的同步化控制,以及有关的DFT。
顶层复位信号(硬件复位信号和软件复位信号)进入模块后需要重新同步,同步时可能需要添加模块内部的本地软件复位信号。为维护方便,通常使用相同的复位同步化集成模块。
模块内部的DFT结构在《SoC设计高级教程——技术实现》第6章可测性设计中详细讨论。
在某些应用场景下,如果整个模块都可以停止使用,则其时钟门控最好在模块外部进行,以减小时钟树功耗。如果模块内部的子模块需要分别停用,则可以在内部分别设置时钟门控。时钟门控如图2.32所示。
图2.32 时钟门控
如果整个模块需要完全关闭电源,则其电源门控结构如图2.33所示。
图2.33 电源门控结构
模块内部可能产生多个中断信号。如果需要,则可以在模块内部设置一个中断处理逻辑模块,其中具有中断产生、屏蔽、清除、触发和极性控制等功能,如图2.34所示。
中断可以由不同极性的电平或边沿触发,触发机制和极性如图2.35所示。
图2.34 模块的中断处理
图2.35 触发机制和极性
模块内部多个中断信号可以组合成单一信号输出,或者以总线形式多路输出,如图2.36所示。
图2.36 模块中断信号输出
中断信号一般是异步信号,需要持续足够长的时间以便外部采样。此外,采样侧可能需要进行同步化处理。中断信号的采样如图2.37所示。
图2.37 中断信号的采样
标准化布局布线模块接口(Standardized Layout Block Interface)一般包括以下内容。
·时钟信号(数据总线时钟、寄存器总线时钟、功能时钟、测试时钟)。
·复位信号(硬件复位、模块软件复位)。
·标准总线(CHI、ACE、AXI、AHB、APB)。
·协议信号(I2C、UART、SPI等)。
·DFT信号(Scan、MBIST、JTAG)。
·低功耗信号(REQ/ACK)。
·其他信号(中断信号等)。
其中,DFT信号和低功耗信号可分别由专门的DFT团队和低功耗设计团队维护。
通常模块输出需要打拍,如图2.38所示,模块输入则可视情形而定。
图2.38 模块输出需要打拍
(1)同步:跨越两模块的信号路径为单周期信号由外部时钟同步,如图2.39所示。
图2.39 同步
(2)源同步:发送端模块同时提供时钟和信号,接收端模块利用该时钟采样信号,如图2.40所示。
图2.40 源同步
(3)同步多周期:当相邻两模块存在倍频关系时,最好将多周期路径设置在发送模块内部,而模块间仍保持单周期同步方式,如图2.41所示。
图2.41 同步多周期
(4)流水化处理(Pipelining Mechanism):当模块间隔较远,连线较长时,可能存在时序问题,可以考虑在中间加插同步单元,以切断长时序路径,如流水化寄存器(Pipelining Register)、同步桥、微流水逻辑(Micro-pipe Logic)和寄存器片等,如图2.42所示。
图2.42 流水化处理
异步:相邻两模块工作在不同频率下,构成异步路径,如图2.43所示。
图2.43 异步
利用异步桥可以实现同步机制,如图2.44所示。
图2.44 异步桥实现同步机制
通常,异步桥不能切分,必须例化以接近一侧,不过这样会导致另一侧时钟域内存在很长的同步时序路径。虽然系统可以异步运行,但互连会妨碍高速运行。
一种解决方案是,将主/从逻辑完全分离并放置在每一侧,这样便于各自时钟域内的时序收敛,如图2.45所示。
另一种解决方案是,将异步桥放置于一侧,而在另一侧的长路径上添加流水线机制,如图2.46所示。
图2.45 主/从逻辑的完全分离
图2.46 添加流水线机制
在功能设计中,经常需要产生某些具有特定功能的电路,如时钟分频和门控电路等。为了保证设计质量,防止出错,同时统一设计风格,便于脚本搜索和利用,通常由专人负责创建和维护这些电路,形成集成IP单元库,使用者可选择适合的单元例化,而非各自独立编码。
集成IP单元内存在仿真、FPGA和ASIC等多个分支,由配置文件中的宏变量加以区分。其中,仿真分支使用行为级描述,供RTL仿真模式下使用;在FPGA分支下,时钟分频等处理需要采用直通方式;ASIC分支则供综合等使用,通过设置宏变量或变量传递方式来区分不同工艺库,模块功能则直接采用标准单元库单元例化连接而实现。时钟分频电路集成IP单元的代码如图2.47所示。
图2.47 时钟分频电路集成IP单元的代码
一般集成IP单元的代码库包含时钟分频电路、时钟多路选择电路、时钟门控电路、复位电路、同步电路和DFT相关电路等的代码,如果需要,可以添加更为复杂的特定功能电路的代码。
时钟分频电路的基本思想是,利用计数器进行计数分频,按照分频系数是否可调可分为固定系数分频电路和可调系数分频电路。表2.1列出了一些常用的时钟分频电路集成IP单元。
表2.1 时钟分频电路集成IP单元列表
若电路需要工作在不同时钟频率下,则可以通过时钟多路选择器来选择不同时钟,时钟多路选择器有静态和动态之分。时钟多路选择器集成IP单元列表如表2.2所示。
表2.2 时钟多路选择电路集成IP单元列表
时钟门控电路用于开关时钟,时钟门控电路集成IP单元列表如表2.3所示。
表2.3 时钟门控电路集成IP单元列表
复位同步电路集成IP单元列表如表2.4所示。
表2.4 复位电路集成IP单元列表
经常将一些常用逻辑功能电路设计成集成IP单元,逻辑功能电路集成IP单元列表如表2.5所示。
表2.5 逻辑功能电路集成IP单元列表
除RTL代码外,还需要提供多种标准化模块模型,以满足和方便不同的设计环节需求。模块模型如图2.48所示。
·总线功能模型(Bus Function Model,BFM)包括寄存器总线模型和数据总线模型,可用于连接性仿真。
·Stub模型(Stub Model)含有接口信息和简单配置,可用于集成和等效性检查。
·接口模型(I/O Model):仅含有接口信息,可用于综合。
图2.48 模块模型