【发布时间】:2021-06-23 06:27:24
【问题描述】:
我正在尝试为 SystemVerilog symulation(不可综合)编写一个通用寄存器解析器。 目标是返回一个字段数组,给定:
- 字段位置
- 字段宽度
- 寄存器值
这是我的看法:
task automatic reg_parser( ref int apb_word,
ref int lsb_array[],
ref int width_array[],
output int fields_array[] );
// Extract right bits
// field = word[FIELD_LSB+FIELD_WIDTH-1 : FIELD_LSB];
for (int i = 0; i < $size(fields_array); i++) begin
fields_array[i] = apb_word[lsb_array[i]+width_array[i]-1:lsb_array[i]];
end
endtask : reg_parser
问题是vlog 在抱怨:range must be bounded by constant expressions。
我发现examples 带有流式运算符 (>>,<<),但它们暗示着恒定的规则结构,而寄存器字段通常不那么规则。
关于如何正确实现此功能的任何建议?
【问题讨论】:
标签: verilog system-verilog uvm