altera的全局时钟

个人感觉时钟选择时CLKCTL蛮有用的。但是哪个信号是全局时钟就是综合器自己认为的吗,好像无法人为干涉。 


哪些信号会消耗全局时钟网络呢?外部输入或者内部产生时钟,时钟使能,异步清零信号以及其他高扇出信号。

 1—— Altera

Altera的综合器或者PR工具都会根据实际信号clockresetpresetfanout大小确定是不是用全局时钟资源。若用了全局时钟资源,你可以在Q2technology map view里看到Altclkctrlcell名称--时钟控制模块(Clock Control Block)。

 

当我们的系统占用比较多的全局时钟资源时,将外部的时钟和FPGA内部产生的时钟资源综合考虑,充分考虑PLL的位置以及外部输入时钟的管脚位置,保证每个时钟都能分配到全局时钟资源,得到最好的时序性能。

每个全局时钟都有一个时钟控制模块(Clock Control Block),如下图:

该部分的绝大部分配置都是由QuartusII完成,我们能够设置是(2CLKSELECT[1..0],在MegaWizard…选择I/O--ALTCLKCTRL模块,就可以得到相应的模块,由上图可以知道,该模块的数据必须来自专用时钟管脚或者PLL输出,无法与LC驱动的全局时钟资源连接。当我们需要进行时钟切换时,最好用该功能模块,因为用LC产生的时钟选择模块很容易产生毛刺,另时序电路无法正常工作。

我们知道外部输入或者内部产生时钟,时钟使能,异步清零信号以及其他高扇出信号都会占用全局时钟资源,当系统涉及的上述信号数量过多时,FPGA无法满足,我们就需要有取舍的设置哪些时钟可以占用Global Clock,哪些可以不用。具体设置在Assigment Editor中完成,说明如下:

Auto Global Clock:用于设置时钟是否占用Global Clock

Auto Global Register Control Signals:用于设置寄存器控制信号(异步复位,寄存器使能等)是否占用Global Clock

也可在Setting--Fitter Setting--More Setting…将上述设置关闭,则QuartusII阻止信号分配在全局时钟资源上(不推荐)。

<think>嗯,用户询问的是Altera原语在跨时钟域设计中的实现方法。这个问题很专业,涉及FPGA设计的核心难点。从引用内容看,用户应该有一定FPGA基础,正在处理实际的跨时钟域设计问题。用户提供的引用材料非常聚焦,主要集中在时钟域概念、亚稳态风险和Altera异步FIFO的实现上。特别是引用[5]详细讨论了Altera异步FIFO在不同时钟频率下的控制策略,这可能是用户当前最关心的部分。跨时钟域处理的核心矛盾在于亚稳态风险。引用[2]解释了亚稳态的物理成因——当采样时钟边沿落在数据信号的过渡区域时,会导致判决电压处于不确定状态。Altera原语本身并不能直接解决这个问题,但配合正确的架构设计可以规避风险。关于具体实现,需要强调三个关键点:首先是时钟树分配,引用[4]提到必须通过GLOBAL原语确保时钟信号"上树",这是时序稳定的基础;其次是同步机制,引用[2][5]都指出双寄存器同步或异步FIFO是主流方案;最后是控制策略,引用[5]特别强调应该使用usedw信号而非empty/full标志来控制数据流。注意到用户引用的异步FIFO示例都是基于同频时钟的,但实际需求可能涉及异频场景。因此在回答中需要补充频率关系处理:当读写时钟频率不同时,必须严格遵循引用[5]的建议——在各自时钟域内使用usedw信号进行流控,并预留足够的深度裕量。原语使用方面要给出具体示例。虽然引用[4]提供了Xilinx的BUFG示例,但用户明确问Altera,所以需要转换为Altera的GLOBAL原语写法。同时要提醒用户注意厂商差异,Quartus和Vivado的原语命名规则完全不同。 最后考虑到这是实践性很强的问题,应该提供仿真建议。跨时钟域设计的成败往往取决于时序收敛情况,必须通过时序仿真验证建立/保持时间余量。</think>在 Altera FPGA 中使用原语实现跨时钟域设计,核心在于**安全可靠地传递控制信号或数据**,避免亚稳态和时序错误。以下是关键方法及 Altera 原语的应用: --- ### **一、跨时钟域核心方法** 1. **同步控制信号:使用双寄存器(两级触发器)** * **原理:** 将源时钟域的信号用目标时钟域时钟连续锁存两次,降低亚稳态传播概率。 * **Altera 原语:** `ALTERA_FF` (通用触发器) 或直接使用 HDL 描述 (`reg` in Verilog / `signal` in VHDL)。 * **示例 (Verilog):** ```verilog reg sync_reg0, sync_reg1; // 目标时钟域寄存器 always @(posedge clk_dest or posedge rst) begin if (rst) begin sync_reg0 <= 1'b0; sync_reg1 <= 1'b0; end else begin sync_reg0 <= signal_src; // 第一级同步 sync_reg1 <= sync_reg0; // 第二级同步 end end assign signal_dest_safe = sync_reg1; // 同步后的信号 ``` * **适用场景:** 单 bit 控制信号(如使能、复位)、低频变化信号。**不适用于连续数据流!**[^2] 2. **传输数据:使用异步 FIFO** * **原理:** 提供独立的读写端口和时钟域,通过指针同步和空满标志管理,实现安全数据缓冲。 * **Altera 原语/组件:** * **FIFO 内核:** `scfifo` (单时钟) 或 `dcfifo` (双时钟/异步) Megafunction。这是首选方法。 * **时钟“上树”:** `GLOBAL` 原语确保读写时钟使用全局低歪斜资源。 * **示例 (时钟上树 - Verilog):** ```verilog wire global_wr_clk, global_rd_clk; // 为写时钟分配全局时钟树资源 GLOBAL global_buf_wr ( .in(wr_clk_in), // 输入时钟 (可能来自PLL或IO) .out(global_wr_clk) // 全局时钟树输出 ); // 为读时钟分配全局时钟树资源 GLOBAL global_buf_rd ( .in(rd_clk_in), .out(global_rd_clk) ); // 实例化异步FIFO,使用全局时钟 dcfifo my_async_fifo ( .wrclk(global_wr_clk), .rdclk(global_rd_clk), ... // 其他端口 (数据, 写使能, 读使能, 空, 满, usedw等) ); ``` * **关键控制:** 使用 `usedw` (已用字数) 信号在各自时钟域内控制读写流,而非仅依赖 `empty`/`full`。预留足够深度裕量(如10个数据)防止溢出/下溢[^5]。 * **适用场景:** 多 bit 数据总线、连续数据流、读写时钟频率不同或相位关系不确定。 --- ### **二、Altera 原语在跨时钟域中的关键作用** 1. **`GLOBAL`:时钟信号“上树”** * **目的:** 将时钟信号分配到全局时钟网络,提供低延迟、低歪斜的时钟分布,是时序稳定的基础。 * **位置:** 应用于**所有跨时钟域模块(如 FIFO、同步器)的输入时钟**,以及时钟域内关键路径的时钟[^4]。 * **重要性:** 确保时钟质量,减少亚稳态触发器的建立/保持时间违例风险。 2. **触发器原语 (`ALTERA_FF`):构建同步器** * **目的:** 提供底层寄存器单元,用于实现双寄存器同步链。 * **使用:** 通常由综合器自动推断,也可显式实例化以获得特定位置或特性。 3. **专用组件原语 (`dcfifo`):实现异步 FIFO** * **目的:** 提供经过 Altera 验证的、资源优化的异步 FIFO 实现,内置格雷码指针转换和同步逻辑。 * **优势:** 避免手动实现 FIFO 的复杂性,减少设计风险,通常性能更优。 --- ### **三、设计要点与注意事项** 1. **时钟质量优先:** 所有时钟信号(无论源时钟还是再生时钟)都应通过 `GLOBAL` 原语或约束分配到全局/区域时钟树资源[^1][^4]。 2. **明确区分时钟域:** 在代码和约束中清晰划分不同时钟域的逻辑,避免混合。 3. **同步策略选择:** * **单 bit、慢变信号:** 双寄存器同步链。 * **多 bit 数据、连续流:** **异步 FIFO (`dcfifo`) 是最可靠方案**[^2][^5]。 4. **FIFO 控制信号:** 优先使用 `usedw` 在各自时钟域内进行流控 (`wrusedw` 控制写, `rdusedw` 控制读),预留裕量,避免仅依赖 `empty`/`full`[^5]。 5. **时序约束:** 为每个时钟域定义正确的时钟约束,跨时钟域路径设置为 `false path` 或使用 `set_clock_groups -asynchronous`。 6. **亚稳态分析:** 使用 Quartus 的时序分析工具检查同步器触发器的平均无故障时间 (MTBF),确保满足系统要求。 --- ### **总结** 在 Altera FPGA 中实现跨时钟域通信: 1. **核心方法:** 双寄存器同步 (单 bit 控制信号) 或 异步 FIFO (数据流)。 2. **Altera 原语关键应用:** * `GLOBAL`:**必须**用于所有关键时钟信号“上树”,确保时钟质量。 * `dcfifo`:**推荐**用于数据传输,提供安全高效的异步缓冲。 * `ALTERA_FF`:用于构建同步器基础单元。 3. **控制策略:** FIFO 中优先使用 `usedw` 信号进行流控并预留裕量[^5]。 4. **基础保障:** 严格的时钟管理、清晰的时钟域划分和正确的时序约束。 通过结合 `GLOBAL` 原语保证时钟质量和 `dcfifo` 组件处理数据传输,并辅以适当的同步器设计,可以安全高效地在 Altera FPGA 上实现跨时钟域功能。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值