gpt4 book ai didi

VHDL门控时钟如何避免

转载 作者:行者123 更新时间:2023-12-04 22:30:22 25 4
gpt4 key购买 nike

我收到了避免门控时钟的建议,因为它可能会导致松弛和时序约束问题。但我想问一下,我可以将什么视为门控时钟。
例如:

此代码具有门控时钟,因为 StopCount 门控它。

process(ModuleCLK)
begin
if (rising_edge(ModuleCLK) and StopCount = '0') then
if ModuleEN = '0' then
RESET <= '0';
POWER <= '1';
EN <= '0';
CLOCK <= '0';
SERIAL <= '0';
elsif

这段代码也有门控时钟?
    process(ModuleCLK)
begin
if ModuleEN = '0' then
RESET <= '0';
POWER <= '1';
EN <= '0';
CLOCK <= '0';
SERIAL <= '0';
elsif (rising_edge(ModuleCLK)) then

最佳答案

术语“门控时钟”通常在 ASIC 技术中用于表示仅在条件为真 (1) 时才生成时钟脉冲的时钟,因此门控时钟是时钟源的一个属性。门控时钟可以用锁存器和与门制作,如下所示,这种设计需要特别注意解决您提到的时序问题,因此不适合 FPGA 设计:

enter image description here

您显示的代码使用触发器上的使能来根据使能更新触发器值,因此这是时钟使能,而不是门控时钟。

第一个代码可以而且应该写成:

process (ModuleCLK) is
begin
if rising_edge(ModuleCLK) then
if StopCount = '0' then
... -- Update at clock if StopCount = '0'

这反射(reflect)了设计通常是如何在 FPGA 中实现的,其中触发器始终计时 ( ModuleCLK ),但只有在条件 ( StopCount = '0' ) 为真时才更新输出。

第二个代码示例看起来像异步重置,只是代码应该在敏感度列表中具有重置条件( ModuleEN )(问题代码中缺少)。发生异步复位是因为触发器不需要时钟时钟来改变值;唯一的要求是复位条件为真,然后值的变化与任何时钟异步发生。

这是一种在 VHDL 中正确编写触发器的方法,输入 a和输出 z , 就好像:
process (reset, clock) is
begin
if reset = '1' then
z <= '0';
elsif rising_edge(clock) then
if enable = '1' then
z <= a;
end if;
end if;
end process;

在 Altera Quartus II 中,这会创建 RTL 图,如:

enter image description here

在 Arria II 器件中的实现是:

enter image description here

这表明触发器实际上在时钟的每个上升沿更新,因此时钟使能是通过组合设计(LUT)实现的,当使能为假(0 ),或者新数据来自 a当启用为真 (1) 时。

关于VHDL门控时钟如何避免,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com