Verilog 的带有字符串数组的 Foreach 循环

问题描述 投票:0回答:1

我希望代码与以下内容相同:

addr = `TX_B+'h00;
addr = `TX_B+'h04;
addr = `TX_B+'h08;
addr = `TX_B+'h0C;
addr = `TX_B+'h10;

通过使用

foreach
(或其他达到相同效果的)
但是不行,有语法错误吗?

reg [5] TX_ADDR = {"00", "04", "08", "0C", "10"};
int i;

foreach (TX_ADDR[i])
begin
  addr = `TX_B+'h+TX_ADDR[i];
end
verilog system-verilog
1个回答
0
投票

您的

TX_ADDR 
声明应该是语法错误。 Cadence 模拟器给了我一个错误,但 Synopsys 模拟器没有。在 EDAPlayground 上的不同模拟器上尝试您的代码。

这里有一些代码可以干净地编译并在两个模拟器上运行:

`define TX_B 1

module tb;

reg [7:0] TX_ADDR [5] = {'h00, 'h04, 'h08, 'h0C, 'h10};
int i;
int addr;

initial begin
    foreach (TX_ADDR[i])
    begin
      addr = `TX_B + TX_ADDR[i];
      $display("addr=%0d", addr);
    end
end

endmodule

输出:

addr=1
addr=5
addr=9
addr=13
addr=17
© www.soinside.com 2019 - 2024. All rights reserved.