在IC设计中的综合阶段,时钟一般会被设置为dont touch network,但是如果同时想将其作为数据使用(如I3C中的SCL),会导致作为数据使用的路径没有被优化,为避免这一情况,应该用这一时钟信号产生一个相同的数据信号,代码如下:
input clk;
input scan_clk;
input scan_mode;
input rstn;
output clk_d;
wire clk_inv;
CKMX2N1(
.i0(clk),
.i1(scan_clk),
.s(scan_mode),
.o1(clk_inv)
);
reg clk_r, clk_f;
always@(posedge clk or negedge rstn)
if(~rstn)
clk_r <= 1’b0;
else
clk_r <= ~clk_r;
always@(posedge clk_inv or negedge rstn)
if(~rstn)
clk_f <= 1’b0;
else
clk_f <= ~clk_f;
assign clk_d = ~ (clk_r ^ clk_f); //有时可能会用标准单元代替本表达式