假设我有一个密码:
wire clk1;
wire clk2;
assign clk1 = Clk;
assign Clk2 = Clk;现在,clk1和clk2被用来对各个模块进行时钟,并遍历设计的层次结构。在层次结构的某个地方,如果一个模块被clk1时钟,它的输出是否与来自module2的另一个同步?
例如:
reg r1;
always @ (posedge clk1)
r1 <= rSomething;
reg r2;
always @ (posedge clk2)
r2 <= r1;这个代码有效吗?综合工具(Altera工具链)会保持这两个时钟的倾斜吗?还是只在命名相同的时钟上保持倾斜,而clk1和clk2将停止同步,尽管它们的源是共同的?
谢谢
EDIT1 :这是为了合成,而不是模拟。
EDIT2:更改了第二个代码示例。我试图分配r2 <= r1,而不是像我们前面那样反过来。
发布于 2015-01-15 18:28:59
合成器将将您的设计输入转换为表示逻辑结构的内部netlist。这通常分两个阶段完成。首先是表示抽象操作的高级行为形式,然后是直接实现目标体系结构的逻辑原语的技术映射表单。在这个转换过程中,clk1和clkl2将被看作是与clk在拓扑上等价的,它们将被视为一个组合网。
正常的时钟缓冲区插入过程将考虑到统一网络中所有叶节点的倾斜。任何时间限制都需要放在clk上。试图独立地约束clk1和clk2可能会产生不可预测的结果。
发布于 2015-01-15 17:50:23
重命名的时钟保持同步。一种显式的连续分配,类似于通过连接信号名称和端口名称不同的端口传递信号。
但是,据我所知,没有任何综合工具会让您从多个过程中为同一个变量分配任务。
https://stackoverflow.com/questions/27968410
复制相似问题