【问题标题】:How to do Verilog variable part select with % on both sides of colon?如何在冒号两侧使用 % 进行 Verilog 变量部分选择?
【发布时间】:2020-02-12 14:40:05
【问题描述】:

我知道对于可变部分选择,冒号两边不能有变量:

a_vect[ 8*i +: 8] // == a_vect[(8*i+7) : 8*i]

但是,我需要转换这段代码:

a_vect[(i*16+3)%64 : (i*16)%64]

冒号两边的“%64”怎么处理?

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    +3 不会导致 mod 换行,所以只需将其删除:

    a_vect[(i*16)%64 +: 4]
    

    (如果是这样,原始代码无论如何都不会工作。)

    【讨论】:

      【解决方案2】:

      或者,您可以使用移位操作:

      temp = (a_vect >> ((i*16)%64));
      

      如果临时变量未定义为 4 位,请使用:

      temp = (a_vect >> ((i*16)%64)) & 4'hF;
      

      【讨论】:

        【解决方案3】:
        a_vect[(i*16+3)%64 : (i*16)%64]
        

        详细说明

        i=0 ==> a_vect[3:0]
        i=1 ==> a_vect[19:16]
        i=2 ==> a_vect[35:32]
        i=3 ==> a_vect[51:48]
        i=4 ==> a_vect[3:0]
        

        你可以使用这种类型

          for(genvar i=0;i<64;i+16)
                a_vect[i+:4]
        

        【讨论】:

          猜你喜欢
          • 2012-04-06
          • 2017-11-30
          • 2016-02-26
          • 2017-03-24
          • 2022-01-12
          • 2014-05-22
          • 1970-01-01
          • 1970-01-01
          • 2020-02-25
          相关资源
          最近更新 更多