一、模块介绍
特点:
1、全双工同步串行数据传输
2、可变长度传输字节高达128位
3、MSB或LSB优先数据传输
4、RX\TX分别位于时钟的上升沿或下降沿
5、全静态同步设计
寄存器描述:
1、RXTX0:0x00 32 R/W 用来存储数据
2、RXTX1:0x04 32 R/W
3、RXTX2:0x08 32 R/W
4、RXTX3:0x0c 32 R/W
5、CTRL:0x10 32 R/W 控制寄存器
【31:14】 R reserved
【13】 R/W ASS
【12】 R/W IE 将此位置1时,中断信号在传输完成时候拉高,读写任意寄存器,中断将被清除。
【11】 R/W LSB 1:小端优先,第一个数据放在低位0:MSB大端优先,第一个数据放在高位。
【10】 R/W TX_NEG 1:miso端的数据在下降沿改变,0:miso端的数据在上升沿改变
【9】 R/W RX_NEG 1:mosi端的数据在上升沿改变,0:mosi端的数据在下降沿改变
【8】 R/W GO_BSY 1:传输开始,传输结束时候自动清零。注意:所有寄存器设置都应该在此寄存器写1之前设置好。
【7】 R Reserved
【6:0】 R/W CHAR_LEN 指定一次传输中传输多少位,最多64位。0x01:1bit,0x02:2bit,...0x7f:127bit,0x00:128bit
6、DIVIDER 0x14 32 R/W
【31:16】 R/W RESERVED
【15:0】 R/W DIVIDER 用于输出sclk_pad_o上生成串行时钟
7、SS(Slave Select) 0x18 32 R/W
【31:8】 R/W RESERVED
【7:0】 R/W SS 片选。
工作状态表述:
工作时候,通过APB接口向DW_APB_SPI的数据寄存器写入要传输的数据,然后向控制寄存器中写入控制命令,先将GO_BSY寄存器域写0,将其他域都配置好以后,在将GO_BSY域写1,使数据开始传输。在SPI端将同样格式的数据发送到miso端口灌进DW_APB_SPI,灌进来的数据将覆盖掉数据寄存器中的原始值(数据寄存器通过mosi端口输出一位,就从miso端口接收一位)
结构图
scoreboard描述:
scoreboard内部声明有TLM_FIFO SPI,用来接收SPI端发送的item,声明有reg_model寄存器模型用来作对比。mosi_data【127:0】通过判断寄存器模型中的数据格式,将item中的数据保存下来,tx_data【127:0】从reg_model中保存对应rxtx寄存器模型的值,将这两个数据进行比较判断是否一致。miso_data【127:0】接收item中的数据,如果是大端数据,就利用rev_miso【127:0】将其转化成小端,然后再赋值回去,spi_read_data从dut中read寄存器的值,然后将其与miso_data做比较判断是否一致。rx_data【31:0】从寄存器模型接收数据,然后将miso_data赋值给rx_data,在用predict预测,比较miso_data与寄存器模型的数据是否一致。
config配置信息描述:
环境中有spi_env_config、apb_agent_config、spi_agent_config。在spi_test_base中声明并例化了一个m_env_config,在这个m_env_config中create了intr_util、m_apb_config、m_spi_agent_config,其中,在spi_test_base中m_apb_config和m_spi_agent_config通过get获取mon_bfm和drv_bfm接口(从top端set过来的,top往下一层set了五个bfm接口)。声明m_env并例化,在m_env内部get到env_config,set m_apb_agent_config、m_spi_agent_config到各个agent中。声明temp_intr_bfm并get接收其从top set来的例化对象,将得到的对象再赋值给m_env_config.INTR。
寄存器模型描述:
reg_model在spi_env_config中声明,在spi_env中创建。