【问题标题】:Verilog: "... is not a constant"Verilog:“……不是一个常数”
【发布时间】:2015-04-23 07:00:10
【问题描述】:

我创建了三个这样的电线:

wire [11:0] magnitude;
wire [3:0] bitsEnd;
wire [3:0] leadingBits;

他们都是assigned 一些使用组合逻辑的表达式。以下代码工作正常:

assign leadingBits[3] = magnitude[bitsEnd + 3];
assign leadingBits[2] = magnitude[bitsEnd + 2];
assign leadingBits[1] = magnitude[bitsEnd + 1];
assign leadingBits[0] = magnitude[bitsEnd + 0];

但是,以下(看似等效)代码给出了错误bitsEnd is not a constant

assign leadingBits[3:0] = magnitude[bitsEnd + 3:bitsEnd];

我可以不使用速记来完成这项作业吗?为什么在第二种情况下会出现此错误,而不是第一种情况?

【问题讨论】:

    标签: verilog


    【解决方案1】:

    在 Verilog 中,您不能使用变量(即bitsEnd)作为范围的结尾。你可以使用+:/-:operator来解决你的问题:

    assign leadingBits = magnitude[bitsEnd+3 -: 4];
    

    在第一种情况下,您只计算单个索引(它不是一个范围)。这就是编译器没有抱怨它的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多