关于门控时钟设计问题
assign clk_gate=(en)?clk:0;
我感觉在RTL级代码应该要添加上面这样的代码吧,不然综合的时候没法认识哪个模块需要添加门控时钟以及门控时钟时能信号是什么。
不知道是不是这样呢?
插入门控代码一般这样写:
always@(posedge clk or negedge rst_n)
begin
if(!rst_n) D_out <= 1'b0;
else if(EN) D_out <= D_in;
end
在dc中设置门控类型命令就可以插入门控时钟结构了
always@(posedge clk or negedge rst_n)
begin
if(!rst_n) D_out <= 1'b0;
else if(EN) D_out <= D_in;
end这样写的话由于最后一个if语句后面没有else,是不是在综合的时候会自动生成一个无意识的latch呢?是不是应该改成以下:
always@(posedge clk or negedge rst_n)
begin
if((!rst_n)|(!EN)) D_out <= 1'b0;
else if(EN) D_out <= D_in;
end
always@(posedge clk or negedge rst_n)
begin
if(!rst_n) D_out <= 1'b0;
else if(EN) D_out <= D_in;
end如果是这样写RTL级代码的话,最后一个if没有else,会产生无意识latch,是不是改成下面这样要好些呢?
always@(posedge clk or negedge rst_n)
begin
if((!rst_n)|(!EN)) D_out <= 1'b0;
else if(EN) D_out <= D_in;
end
如果是这样的话,DC在综合的时候也会自动识别并将其综合为一个门控时钟吗?(因为现在EN端口控制两个MUX了)