虚拟项目I2C笔记

本文详细描述了在I2C虚拟项目中,uvm_sequence部分的关键步骤,包括配置APB寄存器、数据传输、I2C速度控制、寄存器设置以及同步操作的仿真结果。
摘要由CSDN通过智能技术生成

一.准备工作

参考I2C虚拟项目笔记(一)-virtual sequence_路科虚拟项目-CSDN博客

二.uvm_sequence部分

1.rkv_i2c_master_directed_write_packet_virt_seq

 1️⃣测试目的:配置apb寄存器,将数据通过apb总线发送到DW_apb_i2c的TX_FIFO中,再通过这个fifo将数据传到I2c的slave里面。

2️⃣apb_config_sequence中:

默认这些寄存器为-1,如果配置>=0则更新到rgm里面。

3️⃣virtual_sequence中:

配置con'fig_seq里面的寄存器:

1.SPEED:IC_CON.SPEED,控制寄存器IC_CON的SPEED位,用来控制I2C的工作模式

2.IC_TAR:I2C目标地址寄存器,`LVC_I2C_SLAVE0_ADDRESS=10'b1100110011表示I2C的slave的地址。I2C目标地址寄存器的地址与IC2的slave模式的地址一直,保证可以寻址到这个slave。

3.IC_FS_SCL_HCNT
   IC_FS_SCL_LCNT

最高与最低时钟周期计数寄存器,tb里面clk周期为100MHZ,一个周期为10ns,让其为200个周期则为2us,2us + 2us -> 1000/4 = 250Kb/s。范围在speed为快速模式下。

4.IC_ENABLE,启用DW_APB_I2C,应该在配置寄存器后面。

5.IC_DATA_CMD

6.rkv_apb_write_packet_seq

在rkv_i2c_master_directed_write_packet_virt_seq里面使用了rkv_apb_write_packet_seq,并且赋值了两个packet。

下图为rkv_apb_write_packet_seq的body:先镜像status的值,IC_STATUS.TFNF指TX_FIFO的状态,为0则满。此处判断不满就退出循环。                                                                                                然后将packet的值给IC_DATA_CMD_DAT,把RGM_WRITE赋值给IC_DATA_CMD_CMD,即为0,表示写。

7.i2c_slv_write_resp_seq,调用i2c_slave的VIP去做write_resp这个操作。如果此语句想放到前面,则需要放在fork..jion_none里面,因为不知道I2C的VIP是否耗时。

各个参数都配置为0,给ack就行。控制i2c_slave的行为。

body如下:

8.apb_wait_empty_seq,当i2c为idle,以及TX_FIFO为空的时候退出循环,指TX_FIFO的数据全部写到了i2c,操作结束。

下表的TFE和TFNF指的TX_FIFO

4️⃣仿真结果:👇

以上分别为配置寄存器对应地址和值。

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值