【问题标题】:Variable slicing vector Systemverilog可变切片向量 Systemverilog
【发布时间】:2019-01-31 16:56:52
【问题描述】:

当我认为是“范围必须是常数”时,我正在努力解决这个错误!

我要实现的操作是这样的:

给定一个 8 位有符号/无符号向量和 VARIABLE 点,例如: b7b6b5b4b3b2.b1b0 或 b7b6b5b4b3.b2b1b0

我必须将整数部分与第一个小数位相加,例如:

b7b6b5b4b3b2 + b1 表示第一个单词, b7b6b5b4b3+b2 用于第二种情况。

小数位数由名为“port_scale”宽 C_SHIFT_BITS 的端口给出。

这是我的代码,我想生成所有的组合:

C_SHIFT_BITS = 4; 

always_comb begin
   for (int k=1; k<2**(C_SHIFT_BITS-1); k++) begin
       dout_temp[k-1][8:0] = din[(k-1)+:8-k] + din[(k-1)+:1]
   end
   for (int k=1; k<2**(C_SHIFT_BITS-1); k++) begin
       if (port_scale == k) begin
          dout = dout_temp[k][8:0];
       end
   end
end

您是否有其他解决方案或方法对其进行编码以使其通用?我不会编写大量的 case 语句,因为参数 C_SHIFT_BITS 可能是任何数字,小于 din 的宽度。 for 循环应该可以解决非法的 din[port_scale...] 但它没有按预期工作。

谢谢

【问题讨论】:

标签: verilog system-verilog hdl


【解决方案1】:

我认为你只需要移动 k

 dout_temp[k-1][8:0] = (din >> k-1) + din[k];

你也可以摆脱你的第二个 for 循环并做

  dout = dout_temp[port_scale][8:0];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2018-07-10
    相关资源
    最近更新 更多