Time 方波时钟分频器中的选通时钟

Time 方波时钟分频器中的选通时钟,time,vhdl,clock,fpga,xilinx-ise,Time,Vhdl,Clock,Fpga,Xilinx Ise,我最近一直在为我的系统设计一个时钟除法器——我重新设计了它,现在它有一个异步重置,它为系统的其余部分生成一个同步重置。为此,我按照我自己的问题,使用时钟使能来切换输出,从而生成占空比为50%的时钟(这是需要的) 然而,这在生成 物理设计规则:372-门控时钟。时钟网。。。是由一个组合引脚。这不是好的设计实践。使用CE引脚控制向触发器加载数据。 读到这篇关于使用时钟启用的文章,当创建时钟启用是正确的,但是,因为我需要一个方波(而不仅仅是一个1/200MHz脉冲),因此使用启用来切换另一个信号,这是

我最近一直在为我的系统设计一个时钟除法器——我重新设计了它,现在它有一个异步重置,它为系统的其余部分生成一个同步重置。为此,我按照我自己的问题,使用时钟使能来切换输出,从而生成占空比为50%的时钟(这是需要的)

然而,这在生成

物理设计规则:372-门控时钟。时钟网。。。是由一个组合引脚。这不是好的设计实践。使用CE引脚控制向触发器加载数据。

读到这篇关于使用时钟启用的文章,当创建时钟启用是正确的,但是,因为我需要一个方波(而不仅仅是一个1/200MHz脉冲),因此使用启用来切换另一个信号,这是一个有意选通的时钟

所以我的问题是,;这个门控时钟警告是否重要?无论是在模拟中,还是在示波器上,它似乎都能正常工作(所以我倾向于忽略它),但我是否在为以后存储问题?有没有办法在没有门控时钟的情况下获得非常慢的50%占空比脉冲

我已经把代码放在下面了

非常感谢(特别感谢为数不多的人,他们集体花了很多时间来回答我最近不断提出的问题)

大卫

IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
UNISIM图书馆;
使用UNISIM.VComponents.all;
实体CLK_分隔符为
通用(输入频率:整数;
OUT1_FREQ:整数;
输出2_频率:整数
);
端口(SYSCLK:标准逻辑中;
复位N:在标准逻辑中;
复位输出:输出标准逻辑;
OUT1:OUT标准逻辑;
OUT2:OUT标准逻辑);
端时钟分频器;
Clk_分配器的架构是
常数除法器1:整数:=输入\频率/OUT1 \频率/2;
常数除数2:整数:=输入\频率/OUT2 \频率/2;
信号计数器1:整数:=0;
信号计数器2:整数:=0;
信号输出1:std_逻辑:='0';
信号输出2:std_逻辑:='0';
信号复位:布尔;
开始
重置进程:进程(重置,系统时钟)
变量周期:整数:=0;
变量复位计数器:整数:=0;
开始
如果上升沿(SYSCLK),则
如果周期小于2,则
如果重置计数器>=除法器1,则
周期:=周期+1;
复位计数器:=0;
其他的
复位计数器:=复位计数器+1;
如果结束;

重置使用
elsif cycles>1写入
reset\u proc
过程,然后在时钟部分外部写入
elsif cycles,并使用从
cycles
导出的条件,该条件也被指定为重置的一部分。现在还不清楚这里到底描述了什么硬件,但这让合成工具不高兴

如果您想使用
RESET\u N
作为异步重置,那么只需做一个简单的
如果RESET\u N='0',那么。。。如果结束,并指定需要重置的任何信号或变量。其他作业应移至计时部分

注意:代码在上述更新后已更改。。。这可能已经消除了问题的原因


顺便说一句,
RESET\u N
RESET\u proc
中用作异步重置,但在其他过程中用作同步重置,这种不一致的使用看起来可能存在重置方案的潜在问题。

重置过程是使用
elsif cycles>1写入的,然后在时钟部分之外写入
,并且使用从
cycles
导出的条件,该条件也被指定为重置的一部分。现在还不清楚这里到底描述了什么硬件,但这让合成工具不高兴

如果您想使用
RESET\u N
作为异步重置,那么只需做一个简单的
如果RESET\u N='0',那么。。。如果结束,并指定需要重置的任何信号或变量。其他作业应移至计时部分

注意:代码在上述更新后已更改。。。这可能已经消除了问题的原因


顺便说一句,
RESET\u N
RESET\u proc
中用作异步重置,但在其他过程中用作同步重置,这种不一致的使用看起来可能存在重置方案的潜在问题。

注释表明,时钟除法器是在更大的设计中实例化的。 如果要在那里使用生成的时钟,必须在信号
output2
和输出
out2
之间添加一个BUFG,如下所示:

out2_bufg : BUFG port map(I => output2, O => out2);
组件BUFG在库
unisim.vcomponents
中定义。这同样适用于输出
out1

BUFG确保使用时钟树分配生成的时钟,以便时钟信号同时到达所有目标触发器。这最大限度地减少了保持时间冲突,并为数据信号的设置提供了更多空间


如果仍然出现警告/错误,则将生成的时钟信号与较大设计中其他位置的另一个信号组合。

注释表明,时钟分配器在较大设计中实例化。 如果要在那里使用生成的时钟,必须在信号
output2
和输出
out2
之间添加一个BUFG,如下所示:

out2_bufg : BUFG port map(I => output2, O => out2);
组件BUFG在库
unisim.vcomponents
中定义。这同样适用于输出
out1

BUFG确保使用时钟树分配生成的时钟,以便时钟信号同时到达所有目标触发器。这最大限度地减少了保持时间冲突,并为数据信号的设置提供了更多空间

如果您仍然收到警告/错误,则y