假设我有一个代码:
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 将停止同步,尽管它们的来源相同?
谢谢
编辑1 :这是用于合成,而不是模拟。
编辑2:更改了第二个代码示例。我试图分配 r2 <= r1,而不是像我们之前的情况那样相反。
频率合成器会将您的设计输入转换为表示逻辑结构的内部网表。这通常分两个阶段完成。首先是表示抽象操作的高级行为形式,然后是直接实现目标体系结构的逻辑基元的技术映射形式。在这个转换过程中,clk1
和clkl2
将被视为拓扑等价于clk
,它们将被视为一个组合网。
正常的时钟缓冲区插入过程将考虑统一网络中所有叶节点之间的偏差。任何时间限制都需要放在clk
上。试图独立限制clk1
和clk2
可能会产生不可预测的结果。
重命名的时钟保持同步。一种显式连续赋值,类似于通过连接信号名称和端口名称不同的端口传递信号。
但是,据我所知,没有任何综合工具可以让您从多个进程中为同一变量赋值。