Programming languages verilog中的位切片

Programming languages verilog中的位切片,programming-languages,verilog,modelsim,Programming Languages,Verilog,Modelsim,如何写入wdata[(8*j)+7:(8*I)]=$random;在verilog编程语言中,其中i和j是reg类型变量。Modelsim给出了恒定范围变量的错误。我怎么能用恰当的方式写呢 使用数组切片结构。您可以在以下网址找到更详细的解释: verilog2001语法 [M -: N] // negative offset from bit index M, N bit result [M +: N] // positive offset from bit index M, N bit

如何写入wdata[(8*j)+7:(8*I)]=$random;在verilog编程语言中,其中i和j是reg类型变量。Modelsim给出了恒定范围变量的错误。我怎么能用恰当的方式写呢

使用数组切片结构。您可以在以下网址找到更详细的解释:

verilog2001语法

[M -: N]  // negative offset from bit index M, N bit result 
[M +: N]  // positive offset from bit index M, N bit result

使用阵列切片构造。您可以在以下网址找到更详细的解释:

verilog2001语法

[M -: N]  // negative offset from bit index M, N bit result 
[M +: N]  // positive offset from bit index M, N bit result

您应该从硬件角度考虑解决方案

这里有一个解决方案。希望它能帮助你

module temp(clk);
  input clk;
  reg i, j;
  reg [23:0] register, select;
  wire [23:0] temp;

  initial 
  begin
      i = 'd1;
      j = 'd1;
  end

  generate
  for(genvar i = 0; i<24; i++)
  begin
      assign temp[i] = select[i] ? $random : register[i]; 
  end
  endgenerate

  always @ (posedge clk)
  begin
      register <= temp;
  end

  always @ *
  begin
      select = (32'hffff_ffff << ((j<<3)+8)) ^ (32'hffff_ffff << (i<<3));
  end
endmodule
模块温度(时钟);
输入时钟;
注册i,j;
reg[23:0]寄存器,选择;
导线[23:0]温度;
首字母
开始
i='d1;
j='d1;
结束
生成

对于(genvar i=0;i您应该从硬件角度考虑解决方案

这里有一个解决方案,希望能对你有所帮助

module temp(clk);
  input clk;
  reg i, j;
  reg [23:0] register, select;
  wire [23:0] temp;

  initial 
  begin
      i = 'd1;
      j = 'd1;
  end

  generate
  for(genvar i = 0; i<24; i++)
  begin
      assign temp[i] = select[i] ? $random : register[i]; 
  end
  endgenerate

  always @ (posedge clk)
  begin
      register <= temp;
  end

  always @ *
  begin
      select = (32'hffff_ffff << ((j<<3)+8)) ^ (32'hffff_ffff << (i<<3));
  end
endmodule
模块温度(时钟);
输入时钟;
注册i,j;
reg[23:0]寄存器,选择;
导线[23:0]温度;
首字母
开始
i='d1;
j='d1;
结束
生成
对于(genvar i=0;i