具有多个驱动程序的tri1的异常行为

时间:2019-10-16 00:06:06

标签: verilog system-verilog

嵌套接口,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语句似乎无法正常工作。

1 个答案:

答案 0 :(得分:1)

y在时间0为X。直到#4才将其分配给Z。 X将引起总线争用。

在时间零将y初始化为Z将解决争用。

initial begin
  y = 1'bz;
  #6;
  y = 1'b0;
end