初级会员

- 积分
- 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只有这两处控制;
救救孩子吧,孩子太难了,仿真时序图如下,谢谢了,哪怕点一下都行
|
|