关于clock gate的替换问题!
时间:10-02
整理:3721RD
点击:
clock gate由于在低功耗方面的优势在asic中很常见,但是在fpga中应该不好用吧?
我这几天在验证代码的时候,发现里面很多的clcok gate,代码是大体这样的:
module (clk_in,en,clk_out);
input clk_in,en;
output clk_out ;
reg en_reg;
always @(clk_in,en)
if(~clk_in)en_reg 《= en; // latch;
assign clk_out = en_reg & clk_in;
endmoudle
这个gate在代码中用了很多,我的时序仿真信号基本全是X,问题应该是处在这个gate上,但是这个gate怎么换呢?
有个朋友告诉我去掉latch就可以,但是去掉之后行为仿真都不对了,所以应该不能这样换的!
我把锁存器换成触发器 :
always @(negedge clk_in)
en_reg 《= en; ff;
行为仿真倒是对的,可是时序仿真好像错了,不知道该怎么办了,请大家指教!
这个必须换吗?该怎么换呢?
先谢了!
我这几天在验证代码的时候,发现里面很多的clcok gate,代码是大体这样的:
module (clk_in,en,clk_out);
input clk_in,en;
output clk_out ;
reg en_reg;
always @(clk_in,en)
if(~clk_in)en_reg 《= en; // latch;
assign clk_out = en_reg & clk_in;
endmoudle
这个gate在代码中用了很多,我的时序仿真信号基本全是X,问题应该是处在这个gate上,但是这个gate怎么换呢?
有个朋友告诉我去掉latch就可以,但是去掉之后行为仿真都不对了,所以应该不能这样换的!
我把锁存器换成触发器 :
always @(negedge clk_in)
en_reg 《= en; ff;
行为仿真倒是对的,可是时序仿真好像错了,不知道该怎么办了,请大家指教!
这个必须换吗?该怎么换呢?
先谢了!
换成这个是必须的:(门控时钟必须是低通)
always @(negedge clk_in)
en_reg 《= en; ff;
但为啥没有复位端呢?
时序错是指什么?把错误报出来看看,把复位端加上再试试
fpga中没用过,学习
二楼的兄弟,谢谢你的回复!
这个有必要加复位端吗?因为信号变化已经一样了 啊?
加复位端该加哪个信号啊?谢谢!
时序错误指的是布局布线后仿真的结果和功能仿真的完全不一样!
后来如何解决的?
Altera FPGA里clock gate用set_net_delay加四条约束就好了,毫无压力。
没有看到代码有什么问题
不过我很关心“我的时序仿真信号基本全是X,问题应该是处在这个gate上” 你的这个结论是怎么得出的?
如果是FPGA原型验证,你直接assign就好。因为fpga只是function验证,
en_reg这个信号在rst的时候初始化一下试试;
