重命名的时钟是否同步?
Are renamed clocks synchronous?
假设我有一个代码:
wire clk1;
wire clk2;
assign clk1 = Clk;
assign Clk2 = Clk;
现在 clk1 和 clk2 用于为各种模块提供时钟并遍历设计的层次结构。在层次结构的深处,如果一个模块由 clk1 计时,它的输出是否与模块 2 的另一个保持同步?
例如
reg r1;
always @ (posedge clk1)
r1 <= rSomething;
reg r2;
always @ (posedge clk2)
r2 <= r1;
此代码有效吗?综合工具(Altera 工具链)是否会保持这两个时钟之间的偏差?或者它会仅在命名相同的时钟上保持偏差,尽管 clk1 和 clk2 具有共同的来源,但它们将不再同步?
谢谢
EDIT1:这用于综合,而不是模拟。
EDIT2:更改了第二个代码示例。我试图分配 r2 <= r1,而不是我们之前的情况。
重命名的时钟保持同步。一种显式连续赋值,类似于通过连接信号名称和端口名称不同的端口传递信号。
但是,据我所知,没有任何综合工具可以让您从多个进程对同一变量进行赋值。
合成器会将您的设计输入转换为代表逻辑结构的内部网表。这通常分两个阶段完成。首先是表示抽象操作的高级行为形式,然后是直接实现目标体系结构逻辑原语的技术映射形式。在这个转换过程中,clk1
和 clkl2
将被视为在拓扑上等同于 clk
,它们将被视为一个组合网络。
正常的时钟缓冲器插入过程将解释统一网络中所有叶节点之间的偏斜。任何时间限制都需要放在 clk
上。尝试独立约束 clk1
和 clk2
可能会产生不可预知的结果。
假设我有一个代码:
wire clk1;
wire clk2;
assign clk1 = Clk;
assign Clk2 = Clk;
现在 clk1 和 clk2 用于为各种模块提供时钟并遍历设计的层次结构。在层次结构的深处,如果一个模块由 clk1 计时,它的输出是否与模块 2 的另一个保持同步?
例如
reg r1;
always @ (posedge clk1)
r1 <= rSomething;
reg r2;
always @ (posedge clk2)
r2 <= r1;
此代码有效吗?综合工具(Altera 工具链)是否会保持这两个时钟之间的偏差?或者它会仅在命名相同的时钟上保持偏差,尽管 clk1 和 clk2 具有共同的来源,但它们将不再同步?
谢谢
EDIT1:这用于综合,而不是模拟。
EDIT2:更改了第二个代码示例。我试图分配 r2 <= r1,而不是我们之前的情况。
重命名的时钟保持同步。一种显式连续赋值,类似于通过连接信号名称和端口名称不同的端口传递信号。
但是,据我所知,没有任何综合工具可以让您从多个进程对同一变量进行赋值。
合成器会将您的设计输入转换为代表逻辑结构的内部网表。这通常分两个阶段完成。首先是表示抽象操作的高级行为形式,然后是直接实现目标体系结构逻辑原语的技术映射形式。在这个转换过程中,clk1
和 clkl2
将被视为在拓扑上等同于 clk
,它们将被视为一个组合网络。
正常的时钟缓冲器插入过程将解释统一网络中所有叶节点之间的偏斜。任何时间限制都需要放在 clk
上。尝试独立约束 clk1
和 clk2
可能会产生不可预知的结果。