【发布时间】:2015-06-26 17:07:35
【问题描述】:
这些天我才开始使用“tri”数据类型。我已经在两个不同的模块中应用了这种数据类型。它在逻辑和结构模拟(综合之前)方面很好地服务于第一个模块,基本上我有一堆逻辑线分配给同一个 tri,如下所示:
logic wire1;
logic wire2;
logic wire3;
tri tri1;
assign tri1 = wire1;
assign tri1 = wire2;
assign tri1 = wire3;
在 SystemVerilog 的 IEEE 标准中,它说
线网可用于由单个门或连续分配驱动的网络。 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
ModelSim 对此的投诉:
(vlog-2110) 非法引用网络“triArrWire”。
基本上,第二个模块所做的只是简单地模仿第一个模块,但在一个 always_comb 块中。但是为什么它没有通过 ModelSim 编译检查呢?我在这里遗漏了什么吗?
另一方面,通常将不同的电线连接到一根电线吗?我这样做的原因是因为大多数电线将处于高阻抗'z',并且其中只有一个将具有 0 或 1 并驱动三网。这让我想将它们合并到一个三网中,以便更容易地将其作为模块的输出。
欢迎提出任何想法。非常感谢您的帮助。
太海
【问题讨论】:
标签: types simulation system-verilog modelsim