嵌套接口,tri1网络和类/模块的分配给我带来了意外的行为。
这是代码。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="formGroup">
<div class="inputGroup">Input
<select class="" name="" id="ana_dig" data-input="type">
<option value="" selected disabled>Choose</option>
<option value="ana">Analogic</option>
<option value="dig">Digital</option>
</select>
<select class="input" id="dig" style="display:none;" data-input="dig">
<option value="" selected disabled>Choose Digital</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
</select>
<select class="input" style="display:none;" id="ana" data-input="ana">
<option value="" selected disabled>Choose Analog</option>
<option value="0">A0</option>
<option value="1">A1</option>
<option value="2">A2</option>
<option value="3">A3</option>
<option value="4">A4</option>
<option value="5">A5</option>
</select>
</div>
<div class="inputGroup">Input
<select class="" name="" id="ana_dig2" data-input="type">
<option value="" selected disabled>Choose</option>
<option value="ana">Analogic</option>
<option value="dig">Digital</option>
</select>
<select class="input" id="dig2" style="display:none;" data-input="dig">
<option value="" selected disabled>Choose Digital</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
</select>
<select class="input" style="display:none;" id="ana2" data-input="ana">
<option value="" selected disabled>Choose Analog</option>
<option value="0">A0</option>
<option value="1">A1</option>
<option value="2">A2</option>
<option value="3">A3</option>
<option value="4">A4</option>
<option value="5">A5</option>
</select>
</div>
</div>
<input type="button" value="Add Another Row" id="addRow"/>
以下是带有b1注释和未注释的输出。
interface i2c ();
tri1 sda;
logic sda_out;
assign sda = sda_out;
endinterface
interface dev ();
i2c i();
endinterface
class a;
virtual interface dev d;
task run1();
$display("@%0t : Entering run1 a", $time());
d.i.sda_out = 1'b0;
#2;
d.i.sda_out = 1'bz;
#2;
$display("@%0t : Leaving run1 a", $time());
endtask
endclass
module b (inout x);
logic y;
assign x = y;
initial begin
#4;
y = 1'bz;
#2;
y = 1'b0;
end
endmodule
module temp();
dev d();
b b1 (d.i.sda);
a a1 = new();
initial begin
a1.d = d;
a1.run1();
end
always_comb
$display ("@%0t : d.i.sda - %0b, d.i.sda_out - %0b", $time(), d.i.sda, d.i.sda_out);
endmodule
由于tri1就像带有上拉的导线,它不应该允许多个驱动器吗?
因为未注释b1,所以sda的Assign语句似乎无法正常工作。
答案 0 :(得分:1)
y
在时间0为X。直到#4
才将其分配给Z。 X将引起总线争用。
在时间零将y
初始化为Z将解决争用。
initial begin
y = 1'bz;
#6;
y = 1'b0;
end