时钟产生系统和时钟分频模块 技术领域 本发明涉及一种时钟产生系统和时钟分频模块, 明确地说涉及一种具有分散式架 构的时钟产生系统。
背景技术 在 CMOS 超 大 型 集 成 电 路,例 如 专 用 集 成 电 路 (Application Specific IntegratedCircuits, ASICs) 的 设 计 中, 时钟信号对于芯片性能的优劣具有决定性的 影响。假若芯片设计者在设计时未仔细规划时钟信号到每个逻辑子方块的时钟分布 (clockdistribution), 那么时钟偏斜 (clock skew), 即从时钟端点到时钟汇点之间的最大 延迟和最小延迟的差值, 将降低芯片的性能并可能使系统失效。 此外, 时钟分布网络由于在 时钟端点到时钟汇点之间的路径上需维持高速的操作和驱动力以增加信号处理的能力, 其 功率损耗通常会占整体功率损耗的 20%到 50%。据此, 时钟偏斜和功率损耗是芯片设计者 在设计时钟分布网络时的两大考虑因素。
在数字电路设计上一个众所周知用以降低功率损耗的方法称为时钟选通技术 (clock gating technique)。所述技术是将一时钟信号分为数个独立的时钟信号以个别 地控制或者停用芯片内不需作动的功能方块。图 1 显示习知的时钟产生系统 10 的方块示 意图。所述时钟产生系统 10 包含用以提供选通时钟的时钟产生模块 12 和多个功能方块 1-N。 所述时钟产生模块 12 包括锁相回路 (phase-locked loop, PLL)14、 时钟分频器 (clock divider)16 和多个时钟选通单元 1-J。所述锁相回路 14 经配置以用以产生时钟信号, 而所 述时钟分频器 16 经配置以用以接收所述时钟信号以产生多个不同频率的时钟信号。这些 时钟选通单元 1-J 经配置以用以接收所述时钟分频器 16 输出的时钟信号, 以产生多个选通 时钟信号 gated_clk1-gated_clkj。
这些选通时钟信号 gated_clk1-gated_clkj 施加到这些功能方块 1-N 内的逻辑电 路, 例如触发器、 寄存器或者序向逻辑电路, 以提供其需要的时钟信号。 当这些功能方块 1-N 内的部分逻辑电路不需作动时, 这些功能方块 1-N 会输出控制信号 control 以通知对应的 时钟选通单元停用其时钟信号, 借此降低系统的功率损耗。
然而, 随着工艺的发展和用户需求的多样化, 芯片内功能方块的数目和面积急剧 增加。上述时钟选通技术在实现时电路上需要额外的逻辑门, 而这些逻辑门会增加布局面 积和功率损耗。如果芯片设计者使用所述习知的时钟产生模块来实现所述时钟选通技术, 那么电路上的设计会十分复杂。 同时, 这些功能方块分布在芯片不同的位置上, 因此这些选 通时钟信号的时钟偏斜问题也会随着布线长度的增加而恶化。因此, 有必要提出一种分散 式架构的时钟选通系统和时钟分频模块, 借此提供低功率损耗以及简化电路设计和验证时 的复杂度。
发明内容
本发明的分散式架构的时钟产生系统的实施例包含时钟分频器、 第一功能方块及第二功能方块。所述时钟分频器用以输出不同频率的时钟信号。所述第一功能方块包含第 一时钟选通单元及第一逻辑电路, 而所述第二功能方块包含第二时钟选通单元及第二逻辑 电路。 所述第一时钟选通单元和所述第二时钟选通单元在逻辑上分别位于所述第一功能方 块和所述第二功能方块内, 而在物理布局上分别被设置于尽可能靠近所述时钟分频器的位 置。
本发明的时钟分频模块的实施例包含格雷码表产生单元、 时钟分频有限状态机和 时钟分频产生单元。所述格雷码表产生单元经配置以用以产生二维阵列。所述时钟分频有 限状态机经配置以用以接收所述二维阵列, 第一时钟信号和所述时钟分频有限状态机的先 前状态以产生所述时钟分频有限状态机的下一状态。 所述时钟分频产生单元经配置以用以 接收所述二维阵列, 所述第一时钟信号和所述时钟分频有限状态机的所述先前状态以产生 第二时钟信号。 附图说明
图 1 显示习知的时钟产生系统的方块示意图 ; 图 2 显示典型的使用硬件描述语言以实现芯片设计的流程图 ; 图 3 显示根据本发明的实施例的时钟产生系统 ; 以及 图 4 显示根据本发明的实施例的时钟分频模块。具体实施方式
图 2 显示典型的使用硬件描述语言以实现芯片设计的流程图, 所述流程图经配置 以用以施行本发明。参照图 2, 在步骤 S20, 系统设计者制订芯片的规格。在步骤 S22, 芯 片设计者产生寄存器传送级网表 (register-transfer level netlist, RTL netlist) 并 进行验证。在步骤 S24, 所述芯片设计者通过合成工具 (synthesis tool) 产生逻辑门级网 表 (gate-level netlist) 并进行验证。在步骤 S25, 所述芯片设计者通过布置和布线工具 (placeand route tool) 产生物理设计。以下进一步说明所述流程的每一步骤。
首先系统设计者在开发芯片前会根据所述芯片的应用场合来设定一些例如功能、 操作速度、 接口规格、 环境温度及消耗功率等规格。当规格制定完成时, 系统设计者会依据 功能或其它相关考虑, 将所述芯片划分为数个功能方块, 并交由不同设计者以进行后续步 骤。 这些设计者使用硬件描述语言, 例如 VERILOG 和 VHDL, 来描绘这些功能方块的行为或特 征, 并通过所述硬件描述语言所对应的编译器 (compiler) 将所述语言转换成寄存器传送 级网表。所述寄存器传送级网表包含一组连接到每一功能方块的节点, 其通过数学叙述来 定义功能方块将实现的布林逻辑。接着, 设计者使用模拟器 (simulator) 来验证这些节点 所描绘的电路行为。在验证后, 设计者使用合成工具以将所述寄存器传送级网表转换为所 述逻辑门级网表。 在合成过程中, 设计者会选择适当的逻辑单元库 (logic cell library), 以作为合成逻辑门级电路的参考依据。 所述逻辑门级网表通过所述逻辑单元库以更具体地 描绘这些功能方块。 所述逻辑门级网表会通过模拟和验证工具来验证电路的逻辑和电路的 时间相关行为。 在验证后, 会使用布置和布线工具以通过所述逻辑门级网表产生物理设计, 例如, 布局 (layout)。
图 3 显示根据本发明的实施例的时钟产生系统 30。所述时钟产生系统 30 包含时钟分频器 31、 功能方块 R 和功能方块 S。所述时钟分频器 31 经配置以用以输出不同频率的 时钟信号。与习知技术最大的不同在于时钟选通单元 32 的位置由集中式的时钟产生模块 搬移到个别的功能方块 R 的内部, 而时钟选通单元 34、 36 的位置也由集中式的时钟产生模 块搬移到个别的功能方块 S 的内部。所述时钟分频器 31 将时钟信号 clk1、 clk2 和 clk3 输 出到所述时钟选通单元 32、 34、 36。所述时钟选通单元 32、 34、 36 在接收到所述时钟分频器 31 传来的时钟信号 clk1、 clk2 和 clk3 及来自逻辑电路 37、 38、 39 的控制信号 control 后, 分 别产生给所述逻辑电路 37、 38、 39 的选通时钟信号 gated_clk。 由于在逻辑上所述时钟选通 单元 32 和逻辑电路 37 均位于所述功能方块 R 内, 且在逻辑上所述时钟选通单元 34、 36 和 逻辑电路 38、 39 也均位于所述功能方块 S 内, 因此可以简化设计和验证所花费的时间及精 神。而在物理布局上, 所述时钟选通单元 32、 34、 36 设置于功能方块 R 和功能方块 S 内尽可 能靠近所述时钟分频器 31 的位置, 通过缩短时钟信号 clk1、 clk2 和 clk3 的长度而减少功率 消耗。
所述寄存器传送级网表和所述逻辑门级网表通常会以层次架构 (hierarchicalarchitecture) 表示。当设计者使用所述时钟产生系统 30 进行寄存器传送 级模拟或门级模拟时, 由于所述功能方块 R 和功能方块 S 可使用层次架构的描绘方式, 因此 可个别验证其与时钟选通单元 32 的逻辑功能及电路是否符合预期。
此外, 当设计者根据所述逻辑门级网表进行布局时, 位于所述功能方块 R 的时钟 选通单元 32 与位于所述功能方块 S 的时钟选通单元 34 和 36 可以使用系统化的名称来命 名, 例如 Block_CGC_1 和 Block_CGC_2, 以方便设计者在进行布局时将其设置于尽可能靠近 所述时钟分频器 31 的位置, 以减少布线路径。如此一来, 设计者可通过搜寻的方式快速识 别出这些具有系统化名称的示例及其组合, 并决定其于芯片上的摆放位置。由于高速的时 钟信号分布于这些布线路径上, 因此当布线路径缩短时, 芯片的动态功率损耗也可以大幅 地下降。
为了进一步简化设计与验证, 本发明揭示一种系统化的时钟分频方法, 其通过规 律化的叙述可轻易地扩充不同频率的时钟信号。习知通过蛮力方式 (brute force) 产生的 时钟分频码可使用硬件描述语言描述如下 :
case(clk_state)
6′ b000_000 : begin
next_state = 6′ b000_001 ;
div3 = 1 ;
end
6′ b000_001 : begin
next_state = 6′ b000_011 ;
div3 = 0 ;
end
6′ b000_011 : begin
next_state = 6′ b000_010 ;
div3 = 0 ;
end5101860359 A CN 101860360
说明书next_state = 6′ b000_110 ; div3 = 1 ;4/6 页6′ b000_010 : beginendendcase
always@(posedge clk)begin
clk_state <= next_state ;
div3_clk <= div3 ;
end
在上述范例中, 所述 clk_stage 具有 6 位的宽度, 因此可写入 (0 0 0 0 0 0) 到 (1 1 1 11 1) 的 64 种状态。在本范例中, 当所述时钟分频码将产生输入时钟频率除以 3 的时 钟信号时, 变量 div3 的初始状态首先设定为 1。在每次正缘时钟信号到达时, 变量 div3 的 状态会依序转换为 0、 0、 1、 0、 0、 1…, 因此变量 div3 的输出即为输入时钟频率除以 3 的时钟 信号。类似地, 当所述时钟分频码将产生输入时钟频率除以 4 的时钟信号时, 可以首先设定 变量 div4 的初始状态为 1。 接着在每次正缘时钟信号到达时, 将变量 div4 的状态依序改变 为 0、 0、 0、 1、 0、 0…, 那么所述变量 div4 的输出即为输入时钟频率除以 4 的时钟信号。如上 所述, 使用蛮力方式产生的时钟分频码会随着功能方块需要的分频时钟数目的增加而变得 十分复杂且容易发生错误。 然而, 通过本发明揭示的规律化基础的时钟分频模块, 可以轻易 地产生不同频率的时钟信号, 且大幅简化后续的模拟及验证步骤。 图 4 显示根据本发明的实施例的时钟分频模块 40, 所述时钟分频模块 40 包含格 雷码表 (Gray code table) 产生单元 42、 时钟分频有限状态机 (finite state machine)44 和时钟分频产生单元 46。所述格雷码表产生单元 42 经配置以用以产生二维阵列 T。所述 二维阵列 T 中的每一元素的值根据格雷码的编码方式而产生。所述二维阵列 T 可使用硬件 描述语言描述如下 :
wire[L-1:0]T[1 << L]-1:0]
assign T[0] = L’ h0 ;
generate
for(i = 0 ; i<L; i = i+1)begin:fg_GCT_1
for(j = (1 << i) ; j < (1 << i+1)) ; j = j+1)begin:fg_ GCT_2
assign T[j] = T[((i << i)-1)-(j-(1 << i))] l(1 << i) ;
end
end
endgenerate
其中, L、 i 和 j 为整数。
为了简单说明上述硬件描述语言产生的格雷码表, 现将 L 代入 6 来加以说明。 当L = 6 时, 会产生二维阵列 T, 其中所述二维阵列 T 中的元素 T[0] = 6’ h0 = 0, 元素 T[1] = 6’ h1 = 1, 元素 T[2] = 6’ h3 = 3, 元素 T[3] = 6’ h2 = 2…。元素 T[0] 到 T[63] 的值是
根据格雷码的编码方式产生的。在格雷码的编码方式中, 两个相邻的元素被选择的编码只 有一个位是不同的, 因此使用所述编码方式的电路其动态功率损耗较低。
在使用格雷码编码方式建立所述二维阵列 T 后, 所述时钟分频有限状态机 44 经配 置以用以接收所述二维阵列 T, 时钟信号 clk_src 和所述时钟分频有限状态机 44 的先前状 态以产生下一状态。所述时钟分频产生单元 46 经配置以用以接收所述二维阵列 T, 所述时 钟信号 clk_src 和所述时钟分频有限状态机 44 的所述先前状态以产生不同频率和不同工 作循环 (duty cycle) 的时钟信号。
所述时钟分频有限状态机 44 和所述时钟分频产生单元 46 的电路行为可使用硬件 描述语言描述如下 :
generate
for(i = 0 ; i<N; i = i+1)begin:fg_clk_div
assign ns[i] = (S == T[i]) ? T[(i+1)% N](i == 0 ? T[0]:ns[i-1]) ;
assign divM[i] = (S == T[i]) ? i% M < K)(i == 0 ? 0:divM[i-1]) ; end
endgenerate
always@(posedge clk)begin
S <= ns[N-1] ;
divM_clk <= divM[N-1] ;
end
其中, L、 i、 K、 M 和 N 为整数, 且 M 为等于或大于 2 的整数。
在本发明的实施例中, 所述时钟分频有限状态机 44 包含重复叙述手段, 其用以接 收累增信号 i 以执行回圈运算。所述重复叙述手段包含第一条件运算手段。所述第一条件 运算手段用以接收所述累增信号 i, 以根据所述累增信号 i 加 1 后的值对于整数 N 的余数而 产生所述下一状态 ns[i]。在本发明的实施例中, 所述第一条件运算手段是通过
assign ns[i] = (S == T[i]) ? T[(i+1)% N](i == 0 ? T[0]:ns[i-1]) ;
的叙述式以产生下一状态 ns[i]。 当目前状态 S 的值等于 T[i] 时, 下一状态 ns[i] 的值会设定为 T[i+1]。举例来说, 当 i = 1 而 N = 64 时, 如果目前状态 S 的值= T[1] = 1, 那么下一状态 ns[1] 会等于 T[2] = 3。当 i = 2 时, 如果目前状态 S 的值= T[2] = 3, 那么下一状态 ns[2] 会等于 T[3] = 6…当 i = 63 时, 如果目前状态 S 的值= T[63], 那么 下一状态 ns[64] 会回到 T[0] = 0, 并继续 T[1]、 T[2]、 T[3] 的循环。
在本发明的实施例中, 所述时钟分频产生单元 46 包含第二条件运算手段。所述第 二条件运算手段用以产生时钟信号 clk_src 除以 M 后的时钟信号 divM_clk。当目前状态 S 的值等于 T[i], 且所述累增信号 i 对于整数 M 的余数值小于整数 K 时, 那么变量 divM[i] 的 值会等于 1。举例来说, 当 K = 2 而 M = 4 时, 所述第二条件运算手段通过
assign div4[i] = (S == T[i]) ? i% 4 < 2)(i == 0 ? 0:div4[i-1])
的叙述式以产生所述时钟信号 clk_src 除以 4, 且工作循环为 0.5 的时钟信号 div4_clk。根据所述叙述式, 当 i = 0 时, 此时 i 对于 4 的余数为 0, 因此 i% 4 < 2 为真,
div4[0] = 1。当 i = 1 时, 此时 i 对于 4 的余数为 1, 因此 i% 4 < 2 为真, div4[1] = 1。 当 i = 2 时, 此时 i 对于 4 的余数为 2, 因此 i% 4 < 2 为假, div4[2] = 0。当 i = 3 时, 此 时 i 对于 4 的余数为 3, 因此 i% 4 < 2 为假, div4[3] = 0…。据此, 所述时钟信号 div4_ clk 的频率会是时钟信号 clk_src 的频率除以 4, 且工作循环为 0.5。
当逻辑电路需要所述时钟信号 clk_src 的频率除以 6, 且工作循环为 0.5 的时钟 信号 div6_clk 时, 仅需将所述第二条件运算手段内的整数 M 代入 6, 整数 K 代入 3 即可得 到所述时钟信号 div6_clk。当逻辑电路需要时钟信号 clk_src 的频率除以 4, 且工作循环 为 0.25 的时钟信号 div4x_clk 时, 仅需将所述第二条件运算手段内的变量 M 代入 4, 变量 K 代入 1 即可得到所述时钟信号 div4x_clk。通过本发明揭示的公式化基础的时钟产生系 统 30, 可以轻易地产生不同频率和不同工作循环的时钟信号, 且大幅简化后续的验证及维 持作业。
本发明的技术内容及技术特点已揭示如上, 然而所属领域的技术人员仍可能基于 本发明的教示及揭示内容而作种种不背离本发明精神的替换及修改。因此, 本发明的保护 范围应不限于实施例所揭示的内容, 而应包括各种不背离本发明的替换及修改, 并为上述 权利要求书所涵盖。