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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 233|回复: 6

[原创] 求助!!!!!verilog代码过不了DC综合!!!

[复制链接]
发表于 2025-4-24 22:49:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
这段代码//Dual port RAM
    reg [DATA_WIDTH-1:0] ram[2**ADDRESS_WIDTH-1:0];

    //Port A
    always @ (posedge clk)
    begin
        if (weA)
        begin
            ram[addrA] <= dataA;
            qA <= dataA;
        end
        else
        begin
            qA <= ram[addrA];
        end
    end

    //Port B
    always @ (posedge clk)
    begin
        if (weB)
        begin
            ram[addrB] <= dataB;
            qB <= dataB;
        end
        else
        begin
            qB <= ram[addrB];
        end
    end在DC综合里面显示

                               
登录/注册后可看大图

该怎么解决哇!!!!求助大神

发表于 2025-4-25 08:59:37 | 显示全部楼层
试试将两个模块写在一个always语句中(我也是小白,不一定有用)
发表于 2025-4-25 09:10:46 | 显示全部楼层
寄存器不支持在两个always块中赋值,就相当于是电路中的一个寄存器,输入端D只能有一个信号驱动,如果是有两个信号连到D端,那以哪个信号的值为准呢?
发表于 2025-4-25 09:58:28 | 显示全部楼层
这是ram的仿真模型,不是用来综合的
 楼主| 发表于 2025-4-25 10:32:21 | 显示全部楼层


温柔阴影 发表于 2025-4-25 09:58
这是ram的仿真模型,不是用来综合的


那如果我想拿这段代码去进行综合,我应该怎么样在保证逻辑正确的情况下去进行修改?

发表于 2025-4-25 10:53:23 | 显示全部楼层
我不了解RAM,这里的代码中如果weA和weB同时成立,并且addrA = = addrB结构上是不对的,你想修改的话可以把weA和weB的判断条件放到一个完整的if else中去写,试试看。
发表于 2025-4-25 11:38:33 | 显示全部楼层


叶子iou 发表于 2025-4-25 10:32
那如果我想拿这段代码去进行综合,我应该怎么样在保证逻辑正确的情况下去进行修改?

...


把两个always块和在一起,但是逻辑上会有冲突,flop同时赋值当 weA==weB==1 && addrA==addrB 时,因为两个alway合在一起,综合出来应该是后面的赋值覆盖前面的赋值。 但是实际使用中外部传入的地址不会有这种情况,所以不用考虑综合工具如何处理这种情况。

总结:把两个always合在一起就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-5-10 08:10 , Processed in 0.028267 second(s), 8 queries , Gzip On, MemCached On.

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