弱“H”,模拟中的输入双向信号上拉

Rus*_*ell 5 vhdl modelsim

有没有办法告诉模拟器(我正在使用 Modelsim)将信号拉到弱的“H”,当它不是由任一双向接口驱动时?

例如,如果我有一个 I2C 信号 I2C_SDA,它被声明为 2 个模块的输入输出。一个是我的实际 UUT,另一个是测试台。两者都有这样的声明:

io_i2c_sda <= r_I2C_DATA when r_I2C_DATA_EN = '1' else 'Z'; 
Run Code Online (Sandbox Code Playgroud)

所以两端都是三态的。这在模拟中工作正常,除了线路一直是蓝色('Z'),两端都没有传输。当两端都没有传输时,如何将这条线拉到代码中的“H”?

Yan*_*ier 5

对于 VHDL,应该可以简单地向信号(必须是 std_logic 类型)添加一个额外的驱动程序,其值为“H”。在 Verilog 中,将使用简单的“1”驱动程序和wand用于有线和的网络类型。'H' 特指弱高驱动器,因此它会被低驱动器覆盖。

  • 如果您正在编写三态缓冲区,您可能还想使用 to_UX01(my_signal),它将执行强度降低,即将 H 和 L 分别解释为“1”和“0”。 (4认同)
  • 是的,在 VHDL 中,只需使用类型为 `std_logic` 的 `io_i2c_sda &lt;= 'H';` 在测试台中添加一个连续分配。当其他驱动程序为“Z”时,std_logic 的解析函数将导致最终信号值为“H”,如果其他驱动程序之一为“1”,则为“1”。 (2认同)