门控时钟及其思考

这篇文章学习所谓的门控时钟。

门控时钟有两种:与门控时钟和或门控时钟。

1.与门控时钟

门控时钟结构=低电平选通的锁存器+一个与门。保证了经过与门的使能信号不会在时钟高电平的时候翻转,从原理上消除了由于使能信号的不确定性导致门控时钟产生毛刺的情况。

与门控时钟在使能无效的时候保持低电平,使能后输出时钟。与门控时钟一般用于后续寄存器的上升沿采样。

2.或门控时钟

在这里插入图片描述

或门控时钟=高电平选通的锁存器+反相门+或门。

或门控的输出在不使能时输出高电平,一般用于后续寄存器的下降沿采样。

3.能够产生门控时钟的代码。

//可以产生门控时钟 见下图compile with clock gating insertion
always @ (posedge clk or negedge rstn)begin
    if(!rstn)
        q<=1'b0;
    else begin
        if (en)
            q<=d;
    end
        
end
//无法产生门控时钟,会产生MUX电路,MUX的一个输入是d,另一个输入是0。下见图typical compile
always @ (posedge clk or negedge rstn)begin
    if(!rstn)
        q<=1'b0;
    else begin
        if (en)
            q<=d;
        else
            q<=0
    end
        
end
//见下图typical compile
//此代码也无法产生门控时钟,也会产生MUX,MUX的一个输入是d,另一个输入是q。该代码尤其要注意。
always @ (posedge clk or negedge rstn)begin
    if(!rstn)
        q<=1'b0;
    else begin
        if (en)
            q<=d;
        else
            q<=q;//保持原值也是需要时钟去触发的,和第一种代码有所区别。
    end
        
end

 4.其他一些思考。

①一般而言,与门控时钟用于后续的上升沿采样电路,而或门控时钟一般用于下降沿采样。

我个人觉得这样的说法不绝对,与门控时钟也可以用它的下降沿,同理,或门控时钟也可以用上升沿,有下降沿就有上升沿,王侯将相宁有种乎?为什么只能用其中一种边沿呢?只能说工程实践的时候是惯例。

②同①,门控时钟能够消除毛刺的说法也是不绝对的,源时钟信号一边用于锁存器的选通,一边又接到了与门(或门),他们之间可能是有skew的,同时锁存器的D到Q也是有延迟的,如果考虑到这些那么是仍可能出现毛刺的。该问题的解决方法是将门控时钟实现成为基本单元,尽量减少skew和锁存器输出延迟。

 ③关于门控时钟的效益。

如下图,第一种代码带门控时钟,对应compile with clock gating insertion,第2、3种代码对应typical compiile。区别在于少了mux,多了锁存器和与门。对于单个信号而言,门控时钟并不会降面积和功耗,一个mux之于一个锁存器+一个与门,就面积和功耗而言孰轻孰重尚未可知。

只有当信号数量变多时,由于mux电路的大量减少,面积和功耗才会降下来。

在这里插入图片描述

 

参考文献:

(44条消息) 门控时钟方法学_Starry丶的博客-CSDN博客_门控时钟的实现

(44条消息) 低功耗设计之门控时钟_yang)的博客-CSDN博客_门控时钟设计

 (44条消息) 【Verilog基础】一文搞懂 时钟门控(Clock-Gating) 电路_ReCclay的博客-CSDN博客_verilog 门控时钟

<think>好的,我现在需要回答用户关于QSPI采用时钟反向的差别的问题。用户之前已经询问过带DDR的QSPI和不带DDR的OSPI的比较,现在进一步探讨QSPI使用时钟反向的情况。首先,我得理解用户的问题核心在哪里。用户可能是在了解不同的时钟处理方式对QSPI设计的影响,特别是在RTL代码设计和综合实现上的优缺点。 首先,我需要回顾QSPI的基本工作原理。QSPI通常使用四线接口,支持DDR模式时,数据在时钟的上升沿和下降沿传输,从而提高吞吐量。而时钟反向(Clock Inversion)可能指的是在设计中采用反向时钟来同步数据采样或驱动,这样做的目的可能是为了调整时序,减少延迟或者解决信号完整性问题。 接下来,我需要分析时钟反向在QSPI中的应用场景。例如,在DDR模式下,数据在双沿传输,时钟反向可能用于生成互补时钟,以更好地捕获数据。这种情况下,时钟反向可能会影响时序约束、RTL设计复杂度以及综合后的结果。 然后,考虑RTL设计中的具体实现。使用时钟反向是否需要额外的逻辑单元?例如,是否需要在代码中显式地生成反向时钟,或者依赖综合工具自动处理?这可能会影响设计的可移植性和对工艺库的依赖。同时,时钟反向可能引入时钟偏移(skew)和抖动(jitter),需要特别注意时序收敛的问题。 在综合阶段,使用时钟反向可能会影响时钟树综合(CTS)。例如,反向时钟的插入是否会导致时钟树的结构更复杂,从而增加功耗和面积?此外,综合工具如何处理反向时钟的约束?是否需要特别的多周期路径或时钟分组设置? 另外,需要比较时钟反向与其他方法的差异。例如,是否可以通过相位插值或其他时钟管理技术替代时钟反向?不同的方法在资源占用、时序性能和设计复杂度上有何不同? 还要考虑信号完整性的影响。时钟反向可能帮助调整数据与时钟之间的相位关系,减少建立时间和保持时间的违例。但不当使用可能导致更多的串扰或反射问题,特别是在高频情况下。 用户可能还关心实际应用中的案例或最佳实践。例如,在哪些情况下推荐使用时钟反向,又有哪些潜在的风险需要注意?是否有行业内的常见做法或标准? 最后,需要确保回答结构清晰,按照用户之前提供的模板,分点说明优缺点,并结合RTL设计和综合实现的具体方面。可能需要用示例代码或约束文件来辅助说明,但要注意用户要求使用中文,且避免使用Markdown格式。 总结思考的步骤: 1. 理解时钟反向在QSPI中的具体应用和作用。 2. 分析RTL设计中时钟反向的实现方式及其对复杂度的影响。 3. 探讨综合阶段时钟反向带来的时序约束和时钟树设计的变化。 4. 比较时钟反向与其他时钟处理方法的优缺点。 5. 结合信号完整性和实际应用案例,提出建议和注意事项。</think>### **QSPI采用时钟反向的设计差异分析** 在QSPI接口设计中,**时钟反向**(Clock Inversion)是一种通过反转时钟信号相位来优化时序的技术,尤其在DDR模式下,其对RTL设计、时序收敛和信号完整性有显著影响。以下从设计实现与综合优化的角度展开对比: --- #### **一、时钟反向的核心作用** - **目标**:通过反转时钟相位,调整数据采样与驱动的时序关系,解决**建立时间(Setup Time)**或**保持时间(Hold Time)**违例。 - **典型场景**: - DDR模式下,数据在时钟上升沿和下降沿传输,反向时钟可简化双沿采样逻辑。 - 信号传输路径延迟较大时,反向时钟补偿时钟-数据对齐偏差。 --- #### **二、RTL设计差异** | **设计维度** | **使用时钟反向** | **不使用时钟反向** | |--------------------|------------------|--------------------| | **时钟生成逻辑** | 需显式生成反向时钟(如`assign clk_inv = ~clk`),或依赖PLL/MMCM生成互补时钟 | 直接使用原始时钟,无需额外生成反向时钟 | | **数据采样逻辑** | 可能简化双沿触发逻辑(例如用反向时钟直接捕获下降沿数据) | 需手动分离上升沿/下降沿触发器(如通过`posedge`和`negedge`触发) | | **时序控制复杂度** | 需严格管理反向时钟与原始时钟的相位关系,避免竞争风险 | 时序逻辑相对简单,但双沿触发逻辑需要更多同步电路 | **示例:时钟反向的DDR采样(Verilog)** ```verilog // 生成反向时钟 wire clk_inv = ~clk; // 上升沿捕获数据 always @(posedge clk) begin data_rise <= qspi_din; end // 反向时钟捕获下降沿数据 always @(posedge clk_inv) begin data_fall <= qspi_din; end ``` --- #### **三、综合实现差异** | **综合维度** | **使用时钟反向** | **不使用时钟反向** | |--------------------|------------------|--------------------| | **时序约束** | 需定义反向时钟与原时钟的相位关系,可能增加多周期路径约束 | 仅需单一时钟约束,时序收敛更直接 | | **时钟树设计** | 反向时钟需单独布线,可能引入额外偏移(Skew),需平衡时钟树 | 单一主时钟树,偏移控制相对简单 | | **功耗与面积** | 反向时钟可能增加时钟网络功耗,但减少双沿触发器的逻辑冗余 | 双沿触发器占用更多面积,但时钟树结构简单 | | **工艺库依赖** | 依赖库是否支持反向时钟驱动单元(如Clock Inverter Cell) | 对工艺库无特殊要求 | **综合约束示例(Tcl脚本)** ```tcl # 定义原始时钟与反向时钟 create_clock -name clk -period 5 [get_ports clk] create_generated_clock -name clk_inv -source [get_ports clk] -invert [get_pins clk_inv_reg/Q] # 设置反向时钟与主时钟的时序关系 set_clock_groups -asynchronous -group {clk clk_inv} ``` --- #### **四、优缺点对比** | **指标** | **使用时钟反向** | **不使用时钟反向** | |--------------------|------------------|--------------------| | **优点** | 1. 简化双沿采样逻辑设计<br>2. 潜在降低触发器数量<br>3. 灵活调整时钟-数据相位 | 1. 时钟树设计简单<br>2. 无反向时钟同步风险<br>3. 时序约束更直接 | | **缺点** | 1. 时钟树复杂度高,可能引入偏移<br>2. 需额外管理反向时钟约束<br>3. 对工艺库支持敏感 | 1. 双沿触发器逻辑冗余<br>2. 时序收敛可能需更多调整 | --- #### **五、应用建议** - **推荐使用时钟反向的场景**: - DDR模式下需要减少双沿采样逻辑的复杂度。 - 信号传输延迟导致时钟-数据相位偏差较大(如PCB走线过长)。 - 工艺库提供低功耗、低偏移的反向时钟驱动单元。 - **避免使用的情况**: - 设计对时钟抖动(Jitter)敏感(如超高速接口)。 - 缺乏成熟的反向时钟约束经验,可能引发时序违例。 --- #### **六、典型问题与解决方案** 1. **反向时钟偏移过大**: - **方案**:在综合阶段设置`clock_uncertainty`,布局阶段手动调整时钟树平衡。 2. **反向时钟与主时钟竞争**: - **方案**:插入缓冲器(Buffer)隔离反向时钟路径,或使用`set_false_path`屏蔽非关键路径。 3. **功耗增加**: - **方案**:使用低功耗时钟门控单元(Clock Gating)动态关闭反向时钟。 通过合理应用时钟反向技术,可在QSPI DDR设计中优化时序性能,但需权衡设计复杂度与风险。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值