微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC后端设计交流 > 为什么寄存器别优化掉?

为什么寄存器别优化掉?

时间:10-02 整理:3721RD 点击:
对一工程综合,名为DPWM.v的模块,结果说里面有几个寄存器被优化掉,什么原因呢?我觉得寄存器是有驱动的,不应该被deleted。(部分代码)output en;
reg en;
//以下三个是定义的内部寄存器
reg en1;
reg en2;
reg counter8bit;
always@(posedge clk_sys)
begin
if(counter8bit==8'b11111111)

counter8bit <= 8'b0;
else
counter8bit <= counter8bit+8'b1;
end
always@(posedge clk_sys)
begin
if(counter8bit>=d_reg)
en1<=1'b1;
else
en1<=1'b0;
end
always@(posedge clk_sys)
begin
if(counter8bit>=(d_reg + 1'b1))
en2<=1'b1;
else
en2<=1'b0;
end
always@(posedge clk_sys)
begin
en<=(en1^en2);
end
always@(posedge clk_sys)
begin
if(en==1'b1)
...............(后面的就不粘贴了)
这三个寄存器en1 en2 counter8bit 不是都有使用吗?为什么综合结果说
Following instances are deleted as they do not drive any primary output:没有用驱动任何输出?什么意思?
'......(路径)/DPWM/mux_counter8bit_22_17',
'......(路径)/DPWM/mux_en1_30_17',
'......(路径)/DPWM/mux_en2_38_17',

求大神帮助!

顶!

你把en1接出到一个output port上试试看,它还会删除吗?

formal过了就行啊

关键是没有过啊,小编!,我在想是不是因为这些寄存器被优化掉了,导致RTL与netlist不匹配,形式化验证过不了。所以想尽力找出被优化掉的原因。

改为输出,就不会被优化掉了。可是这不是我想实现的逻辑啊,求版大在帮我看看,,,,

版大,先不说en1或者en2.你看一下那个counter8bit,这个寄存器,是我用来做计数用的,为什么还要被deleted?这讲不通啊。

我觉得,你的en1和en2确实可以被优化掉啊,优化之后就只有count和en就可以了。
always@(posedge clk_sys)
begin
en<=counter8bit==d_reg;
end

感觉您的这个答案好像也是我想要的表述,我在仔细研究研究。好像就是我要的结果。多谢您的回复。

大致看了代码 应该是要采出来一个cycle的高脉冲en吧。你既然用了计数器,所以感觉完全没必要在用两个en1和en2了。这样做面积开销大,并且时序也不会太完美。
if count8==dreg
en=1
else
en=0
end
其实可以再挖掘一下,看看count8和dreg相等的时候有没有什么规律可循,尝试用count8的少量比特来做控制条件,这样估计timing会更好吧。
个人意见,说的不对请指正


恩,是这个意思,谢谢您的指导!

我的推断是,你这一大坨电路:en1,en2,counter,整个的结果,以及间接结果都没有对你block的output造成影响。那么tool就认为这一坨是free running的,对外界没有贡献。

不谢!怪只怪综合器太强大,哈哈。

恩,可能是这个原因。其他朋友的提示,应该也是这个意思。谢谢版大的耐心回复!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top