DC综合时出现的问题,请大家帮看看?
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;
不好意思 我的意思是不同的異步復位信號所賦值是不同的該怎麼寫