【发布时间】:2015-12-23 14:37:20
【问题描述】:
我想创建一个在 SystemVerilog 中执行以下操作的任务:
- 接收3个输入参数和1个输出参数。
-
随机化数据并将数据分配给位变量(输出参数)。
1. task rand_wr_data(input int size, int data_range_hi, int data_range_lo, output bit [31:0] data); 2. bit unsigned [(size - 1):0] rand_data_bits; 3. bit unsigned [(data_range_hi - data_range_lo):0] wr_data_bits; 4. 5. int unsigned rand_data = $urandom(); 6. wr_data_bits = rand_data; 7. data = wr_data_bits << (data_range_lo + 1); 8. endtask: rand_data
上面的代码会给我一个错误,因为 第 2 行和第 3 行的非常量表达式错误 我必须使用一个常量来声明数组的范围。我尝试了以下方法,但无济于事。
[parameter | localparam | const] int data_size = size;
因此,我有几个查询如下:
- 有没有办法使用我的代码中的变量来创建打包数组?
- 还有其他方法可以做我想做的上述事情吗?
- 我能否接收可变大小数组作为任务参数,而不是必须声明其大小的数组?
- 在我的代码的第 6 行中,我想将一个 unsigned int 分配给一个 32 位数组,但之后我收到了不同的结果。我怎样才能做到这一点?
谢谢。
【问题讨论】:
标签: arrays task system-verilog