微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC后端设计交流 > DC综合时出现的问题,请大家帮看看?

DC综合时出现的问题,请大家帮看看?

时间:10-02 整理:3721RD 点击:
出错的RTL代码如下:
always @ (posedge clk or negedge rst_n) begin
if (~rst_n || ~arst || ~ena)
.....................
else
.....................
在综合的时候ERROR描述如下:
Error: the expression in the reset condition of the "if" statement in this "always" block can only be a simple identifier
or its negation。
~rst_n为异步复位信号;
~arst为同步复位信号;
~ena为使能信号。

自己顶一下!期待。

那位高人来指点下!

继续顶下!

always 里面不能用complex condition check
if (~rst_n || ~arst || ~ena)
改成cond= ~rst_n || ~arst || ~ena;
always ()
if (cond)
...
else
...

怪怪,好像是语法错误啊

回复#5,我觉得是语法错误,因为同步复位怎么可以和异步复位一起来作为判定条件。
我的修改如下:
always @ (posedge clk or negedge rst_n) begin
if (~rst_n )
..............
else
...............
if(~arst || ~ena)
.....................
else
我是做后端的,请各位指正!谢谢

没试过同步和异步能不能一起用, 但是always里的判定不能用complex expression,所以您的写法 在dc综合的时候还是会报之前的错的

always @(posedge clk or negedge rstn)
if(~rstn);异步复位
data <= 1'b0;
else if(sync_rst);同步复位
data <= 1'b0;
else if(Enalbe);使能信号
data <= comp;
else;其他情况
data <= 1'b0;
这样写比较清晰点,异步/同步复位置位不能混淆,它们有效时间点不同
另外楼上说的欠妥,条件可以是复杂的逻辑,只是条件越复杂延迟相对来说越大

谢谢!感谢大家!

那你的设计意图是什么?是不是一个带reset的register?如果是这样,你的描述就错了

9#正解,这是写可综合的代码,不是天马行空的写model.

假如有兩個異步復位信號該怎麼寫
always @(posedge clk or negedge rstn or posedge test)
if(~rstn)
data <= 1'b0;
else if(test)
data <= 1'b0;
else if(Enalbe)
data <= comp;
else
data <= 1'b0;
這樣寫DC會報錯
請問一下該怎麼寫

錯了 else if(test)
data <= 1'b1;
不好意思 我的意思是不同的異步復位信號所賦值是不同的該怎麼寫

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

网站地图

Top