初级会员 
  
	- 积分
 - 167
 
        - 金钱
 - 167 
 
       - 注册时间
 - 2019-6-8
 
      - 在线时间
 - 77 小时
 
 
 
 | 
 
10金钱 
 本帖最后由 混天四绝 于 2021-1-5 10:44 编辑  
 
写了个i2c发送协议: 
这是我inout接口的定义: 
inout sda; 
reg i2c_output_data; 
reg is_oe; 
 
assign sda=(is_oe)?i2c_output_data:1'bz; 
 
 
然后是testbench里sda的初始化:我确实上拉了sda管脚 
module top_vlg_tst; 
wire sda;           
assign sda = treg_sda; 
pullup(sda) 
 
 
这是我检测sda高电平(也就是ack应答) 
10'd124:begin 
sclk<=1'b1; 
cnt<=cnt+1'b1; 
is_ack<=i2c_output_data?1'b1:1'b0; 
 
 
神奇的是i2c_output_data不是已经拉高了么?为啥第一次检测到了,第二次没检测到?两次ack的代码机除了状态跳转其余都是一样的。是不是我的写法有问题还是我对inout理解有偏差? ,我很确定ack只有这两处控制; 
救救孩子吧,孩子太难了,仿真时序图如下,谢谢了,哪怕点一下都行 
 
 
 
 
 
 |   
 
 
 
 
 
 |