在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2946|回复: 2

[求助] 帮忙看下这个combinational loop错误怎么消除呢

[复制链接]
发表于 2020-8-4 19:17:03 | 显示全部楼层 |阅读模式
2资产
本帖最后由 finished 于 2020-8-4 19:19 编辑

module Test (
                rst_n,
                set_p,
                clk,
                dout
                );
input rst_n;
input set_p;
input clk;
output dout;

reg dout;
reg dsync;

always @ (negedge rst_n or posedge set_p or posedge clk)
begin
    if(!rst_n)  //异步复位
        dout <= 0;
    else if(set_p) //异步置位
        dout <= 0;
    else
        dout <= dsync;    //异步置位同步化  
end

always @ (negedge rst_n or posedge set_p or posedge clk)
begin
    if(!rst_n)  //异步复位
        dsync <= 0;
    else if(set_p) //异步置位
        dsync <= 1;
    else
        dsync <= 0;
end

endmodule

综合时,有警告:Found combinational loop during mapping at net dsync.ctrl
instance dsync.ctrl, output net dsync.ctrl
    net        dsync.ctrl
    input  pin dsync.ctrl/C
    instance   dsync.ctrl (cell ORCALUT4)
    output pin dsync.ctrl/Z
    net        dsync.ctrl

End of loops


这段代码的目的是把异步置位信号同步化为一个同步置位脉冲,
怎么看都没有组合逻辑环,就报这个警告


大神们启动下火眼金睛帮忙看看

 楼主| 发表于 2020-8-4 19:22:50 | 显示全部楼层
把第一段改成这样,还是同样报警

always @ (negedge rst_n or posedge clk)
begin
    if(!rst_n)  //异步复位
        dout <= 0;
    else
        dout <= dsync;    //异步置位同步化  
end
 楼主| 发表于 2020-8-4 19:39:29 | 显示全部楼层
always @ (negedge rst_n or posedge clk)
begin
    if(!rst_n)  //异步复位
        dout <= 0;
    else if (set_p)
        dout <= 0;
    else
        dout <= dsync;    //异步置位同步化  
end

always @ (posedge set_p or posedge clk)
begin
    if(set_p) //异步置位
        dsync <= 1;
    else
        dsync <= 0;
end

改成这样,仿真出来功能一样,但是不报组合逻辑环的警告了,不知道是否有什么风险。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 12:47 , Processed in 0.013660 second(s), 5 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表