【发布时间】:2021-01-11 10:53:21
【问题描述】:
将 SystemVerilog 文件转换为来自 GitHub 项目的 Verilog-2001 文件时遇到问题。似乎在 Verilog-2001 中,不可能在函数中放置表的展开循环:
function [31:0] gen_val;
input [31:0] old_val;
input [31:0] new_val;
input [3:0] be;
integer n;
for (n = 0 ; n < 4 ; n = n + 1)
gen_val[n*8+8:n*8] = be[n] ? new_val[n*8+8:n*8] : old_val[n*8+8:n*8];
endfunction
使用 Icarus Verilog (iverilog) 编译时,我收到多个错误消息:
./tb_tiny.v:39: error: A reference to a wire or reg (`n') is not allowed in a constant expression.
./tb_tiny.v:39: error: Part select expressions must be constant.
./tb_tiny.v:39: : This lsb expression violates the rule: (n)*('sd8)
./tb_tiny.v:39: error: A reference to a wire or reg (`n') is not allowed in a constant expression.
./tb_tiny.v:39: error: Part select expressions must be constant.
./tb_tiny.v:39: : This msb expression violates the rule: ((n)*('sd8))+('sd8)
.....
有人知道如何在 Verilog-2001 中解决这个问题吗?
问候
【问题讨论】:
标签: for-loop verilog test-bench