Types 关于';tri&x27;SystemVerilog中的数据类型

Types 关于';tri&x27;SystemVerilog中的数据类型,types,simulation,system-verilog,modelsim,Types,Simulation,System Verilog,Modelsim,最近我才开始使用“tri”数据类型。我在两个不同的模块中应用了这个数据类型。它在逻辑和结构模拟(合成前)方面很好地服务于第一个模块,基本上我有一束逻辑线分配给同一个tri,如下所示: logic wire1; logic wire2; logic wire3; tri tri1; assign tri1 = wire1; assign tri1 = wire2; assign tri1 = wire3; 在IEEE SystemVerilog标准中,它说 线网可用于由单个门或连续分配驱动的网

最近我才开始使用“tri”数据类型。我在两个不同的模块中应用了这个数据类型。它在逻辑和结构模拟(合成前)方面很好地服务于第一个模块,基本上我有一束逻辑线分配给同一个tri,如下所示:

logic wire1;
logic wire2;
logic wire3;
tri tri1;

assign tri1 = wire1;
assign tri1 = wire2;
assign tri1 = wire3;
在IEEE SystemVerilog标准中,它说

线网可用于由单个门或连续分配驱动的网。tri网络类型可用于多个驱动程序驱动网络的情况。一根导线或一个tri网络上相同强度的多个源的逻辑冲突导致x(未知)值

所以我假设它的工作原理与上面的代码类似。但是,当我将相同的逻辑应用到第二个模块时

integer var_a, var_b, var_c, var_cnt;
logic arrWire1[1:0][3:0];
logic arrWire2[1:0][1:0];
logic arrWire3[1:0];
tri triArrWire[7:0];

always_comb begin
  var_cnt = 7;
  for (var_a=1; var_a<=0; var_a--) begin
    for (var_b=1; var_b<=0; var_b--) begin
      for (var_c=(1+var_b*2); var_c<=var_b*2; var_c--) begin
        triArrWire[var_cnt] = arrWire1[var_a][var_c];
        triArrWire[var_cnt] = arrWire2[var_a][var_b];
        triArrWire[var_cnt] = arrWire3[var_a];
        var_cnt --;
      end
    end
  end
end
整数变量a、变量b、变量c、变量cnt;
逻辑1[1:0][3:0];
逻辑电路2[1:0][1:0];
逻辑arrWire3[1:0];
三线制[7:0];
总是从梳子开始
var_cnt=7;

对于(var_a=1;var_a而言,您不允许对导线进行程序赋值。要建立连接,您需要像在第一个模块中那样使用连续赋值。为此,您需要生成for循环。类似于:

for (genvar var_a=1; var_a<=0; var_a--) begin
  for (genvar var_b=1; var_b<=0; var_b--) begin
     for (genvar var_c=(1+var_b*2); var_c<=var_b*2; var_c--) begin
        parameter var_cnt = (some expression of var_a and var_b); 
        assign triArrWire[var_cnt] = arrWire1[var_a][var_c];
        assign triArrWire[var_cnt] = arrWire2[var_a][var_b];
        assing triArrWire[var_cnt] = arrWire3[var_a];
     end
  end
end       

for(genvar var_a=1;var_aThanks dave.这就像一个符咒。但我在这里还有两条评论:1)我认为实际上阻塞过程赋值可以用于连接电线。请参阅IEEE SystemVerilog标准第10.4节。2)最初我使用generate struct来完成所有接线,但是,我认为表达var_cnt的方式对ModelSim没有太大意义,因此我选择将其声明为整数,并希望在always_comb中允许一点表达的灵活性,它确实如此。但ModelSim似乎不喜欢提到triArrWire,因为它是tri类型,而不是逻辑。无法对导线进行程序指定、阻塞或非阻塞。第10.4节仅涉及变量,而非导线。见()。谢谢戴夫。我很感激。