芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 9381|回复: 5

For语法在Quartus中的综合问题

[复制链接]
  • TA的每日心情
    擦汗
    2019-8-12 22:29
  • 5

    主题

    12

    帖子

    138

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    138
    发表于 2019-1-19 11:04:03 | 显示全部楼层 |阅读模式
    最近遇到一个很困扰的问题,关于verilog中的For语句在Quartus中的综合问题
    看了网上的一些回答,大部分都是说明For是可以用于综合语句的,但是For会把循环内的语句展开,占用很大的资源
    我需要用For语句解决一个这样的问题:
    在一个存储结构中:reg [80:0] RAM [99:0] ;
    我在RAM需要使用并行查找,查找一个数据Data是否在RAM中,如果在的话,需要给一个反馈信号
    那么按常规来说我可以写以下的语法:
    assign Sig[0] = (Data == RAM[0] ) ? 1'b1 : 1'b0 ;
    assign Sig[1] = (Data == RAM[1] ) ? 1'b1 : 1'b0 ;
    像这样写上100行,但是这样感觉代码不够简洁,所以我想我能不能使用For循环来让代码变得简洁一点
    所以我写了如下的代码来代替上面的那种写法
    for (i = 0 ; i < 100 ; i = i + 1)
    begin
      Sig = (Data == RAM ) ? 1'b1 : 1'b0 ;
    end
    这样的写法在仿真时没有问题,但是在综合器进行综合时,综合器综合了很长时间都没能综合完
    想在这请教下各位,这样的写法可以综合吗?对于这种并行查找问题各位大佬有没有更好的方法呢?
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-6-29 15:57
  • 13

    主题

    246

    帖子

    3625

    积分

    超级版主

    Rank: 8Rank: 8

    积分
    3625
    发表于 2019-1-19 17:40:44 | 显示全部楼层
    For在Verilog中要慎用!
    你所说的for可以综合的  只是某些特殊情况,只是编译器帮你把for展开了,相当于把几乎相同的代码复制了N遍
    要是对一个相同模块进行多次实例调用的话,可以用循环生成语句 generate
    要是用for实现逻辑功能的话,这个硬件很难实现的
    for倒是可以在testbench中使用~

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-1-19 13:06
  • 4

    主题

    35

    帖子

    764

    积分

    高级会员

    Rank: 6Rank: 6

    积分
    764
    发表于 2019-1-20 13:34:39 | 显示全部楼层
    本帖最后由 slsqz 于 2019-1-20 13:37 编辑

    用generate for写
    begin
    assign Sig= (Data == RAM ) ? 1'b1 : 1'b0 ;
    end
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-1-19 13:06
  • 4

    主题

    35

    帖子

    764

    积分

    高级会员

    Rank: 6Rank: 6

    积分
    764
    发表于 2019-1-20 13:38:34 | 显示全部楼层
    这样,上边不知道为啥显示不对
    begin
      Sig[i] = (Data == RAM[i] ) ? 1'b1 : 1'b0 ;
    end
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2019-8-12 22:29
  • 5

    主题

    12

    帖子

    138

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    138
     楼主| 发表于 2019-1-26 21:05:36 | 显示全部楼层
    fzwwj95 发表于 2019-1-19 17:40
    For在Verilog中要慎用!
    你所说的for可以综合的  只是某些特殊情况,只是编译器帮你把for展开了,相当于把 ...

    谢谢大佬
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2019-8-12 22:29
  • 5

    主题

    12

    帖子

    138

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    138
     楼主| 发表于 2019-1-26 21:05:52 | 显示全部楼层
    slsqz 发表于 2019-1-20 13:38
    这样,上边不知道为啥显示不对
    begin
      Sig = (Data == RAM ) ? 1'b1 : 1'b0 ;

    谢谢,万分感谢
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-12-4 01:22 , Processed in 0.073148 second(s), 32 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表