当前位置: 首页 > news >正文

DW_apb_i2c验证指南

关于IP和VIP连接的问题

提到I2C,都知道涉及到两根线SDA和SCL,这两根线都是被上拉电阻拉着的inout类型的线。但是DW_apb_i2c与SCL和SDA有关的端口不是简简单单的两根线,而是分为ic_clk_in_a,ic_data_in_a,ic_clk_oe,ic_data_oe。其中ic_clk_oe,ic_data_oe是开漏输出(open_drain)。

而svt_i2c_vip提供的interface是SCL和SDA两根inout类型的线,IP和VIP如何连接是第一个要解决的问题。这里需要非常清楚的明白开漏输出的含义和意义。学习开漏输出和inout类型的信号的关系

如何正确理解开漏输出和推挽输出_如何理解开漏-CSDN博客

集电极开路输出和漏极开路输出-CSDN博客

晶体管的分类和三极管的介绍 - 知乎 (zhihu.com)

下面是集电极开路(Open-Collector)OC门的例子,漏极开路(Open-Drain)OD门的道理和这个类似,只不过用的器件不同而已。OC门用的是双极性晶体管(三极管的一种),OD门用的是MOSFET(场效应晶体管)(之前在协议和代码注释里总是看到open drain却不明白啥意思)

开漏输出的设计在I2C器件的端口是必须的,一是为了防止多个I2C器件挂在I2C总线上时发生短路,二是开漏输出可以实现多个I2C器件的“线与”(wire-and)模式。同时开漏输出外面的总线必须加上拉电阻以输出高电平。这点在I2C协议里有提到过。

连接代码如下:

assign Mtop.u_DW_apb_i2c.ic_clk_in_a = i2c_if.SCL; assign Mtop.u_DW_apb_i2c.ic_data_in_a = i2c_if.SDA; assign i2c_if.SCL = Mtop.u_DW_apb_i2c.ic_clk_oe? 1'b0 : 1'bz; assign i2c_if.SDA = Mtop.u_DW_apb_i2c.ic_data_oe? 1'b0 : 1'bz;

当ic_clk_oe为1时,SCL为低电平。但ic_clk_oe为高时,输出为高阻态,而SCL又加了上拉电阻,所以表现为高电平。SDA同理。通过上述连接方式将dw_apb_i2c挂到svt_i2c_vip提供的I2C总线上。

验证环境:

通过前述内容,我们解决了如下问题:

  1. 如何把IP连接到I2C总线上(开漏输出的连接代码逻辑)
  2. 如何把多个VIP的master agent和slave agent挂到I2C总线上(通过配置VIP的system cfg)

最终我们搭建的环境其实是模拟了多个master或者slave的I2C器件挂在I2C总线上进行通讯。其中蓝色的是IP,黄色的是VIP。它们都是支持I2C协议的器件。而我们的验证就是模拟这些器件之间的通讯,比如通过配置IP的寄存器使其作为master发送数据给某个slave VIP。 当然这种验证行为本质是没啥意义的,因为IP是人家公司的产品,可以认为是golden的,验肯定是验不出来什么问题。但是在实际的soc系统中,i2c是被集成到某个子系统,比如外设子系统,再向上集成经过总线fabric,最终到芯片端口的是SCL和SDA的inout类型的pin,我们再走一遍这样的验证,就可以确认内部的I2C发送数据是否能发送出去。 验证,是在没有芯片实体的代码阶段去模拟数据的发送和接受。

搭建完验证环境之后,我们会遇到如下的问题:

  1. 如何配置dw_apb_i2c,使其发送或接收数据?
  2. 如何配置svt_i2c_vip,使其发送或接收数据?

根据master和slave关系,可以分为四种情况:

  1. dw_apb_i2c为master transmit mode,发送数据给VIP
  2. dw_apb_i2c为master receive mode,从VIP读数据
  3. dw_apb_i2c为slave transmit mode,被VIP读数据
  4. dw_apb_i2c为slave receive mode,被VIP写入数据

dw_apb_i2c作为master,svt_i2c_vip作为slave

master transmit mode

待续

master receive mode

待续

dw_apb_i2c作为master,svt_i2c_vip作为slave

slave transmit mode

待续

slave receive mode
http://www.jsqmd.com/news/603013/

相关文章:

  • Apache IoTDB C# 原生接口保姆级教程:从环境搭建到全接口实战
  • 告别‘电音’:用WaveRNN和FFTNet给你的AI语音合成项目选个又快又好的声码器
  • 2026年NMN十大品牌红黑榜实测:这3类NMN品牌千万别碰,买前必看 - 资讯焦点
  • 学Simulink——基于Simulink的单位功率因数(UPF)整流控制策略
  • 1916 城市高质量创新(2000-2024)
  • OpenClaw开源贡献:为gemma-3-12b-it开发并共享自定义技能
  • 新手也能懂:用Prescan和Matlab给你的自动驾驶小车做个红绿灯“考官”
  • YimMenu:GTA5游戏增强与安全防护的终极解决方案
  • MKVToolNix Batch Tool 全功能指南:从批量处理到生态协作
  • 告别繁琐编辑:宝可梦数据自动化工具让创建效率提升90%
  • 手把手教你配置Maven+Nexus:搞定SNAPSHOT自动更新与RELEASE稳定发布
  • 如何在Windows 10系统上运行Android应用:WSA移植版解决方案
  • 2026江苏保温管制造TOP5供应商名单出炉,区域能源系统格局盘点 - 精选优质企业推荐榜
  • 达沃斯震撼警告|《人类简史》作者赫拉利:别担心AI抢工作,它要接管的是法律、宗教甚至总统
  • 邓州市哪家装修公司比较可靠?美好愿景家装值得信赖 - 资讯焦点
  • 实战指南:基于快马平台生成vscode电商后台管理项目脚手架
  • lxmusic:解决音乐资源碎片化难题的多平台聚合方案
  • Redis 核心知识点整理
  • 答辩PPT不用愁,百考通AI助你高效搞定毕业答辩全流程
  • 用Python脚本批量生成Sora2短剧,我一天做了100条,成本不到10块钱
  • SAM模型点提示实战:用云南旅游照片测试分割效果(含完整代码)
  • OpCore-Simplify:如何用15分钟完成专业级黑苹果EFI配置
  • 1520上市公司企业短期并购绩效和长期并购绩效数据+dofile(2008-2022)
  • 解决 Bookmarklet 中 %0A 换行符导致的跨环境兼容性问题
  • Python MCP模板不是万能的!但这个经17家金融机构验证的增强版,已将接入耗时压缩至行业均值的1/5.8
  • 2026年4月目前冷却塔生产厂家,半钢冷却塔/工业冷却塔/冷却塔/大型冷却塔/圆形高温冷却塔,冷却塔品牌选哪家 - 品牌推荐师
  • Redis 从入门到精通(十一):持久化配置
  • 电力巡检数据分析选型避坑:实测实在Agent,如何终结变电站“人肉搬砖”时代?
  • 白盒测试实战指南:从策略选择到静态分析的完整流程
  • 从67到89:我是如何用YOLO-MASK清洗COCO羊数据集提升模型精度的