hanjingyu2008的个人空间 https://blog.eetop.cn/219089 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

AHB APB 最简 通信

热度 1已有 1507 次阅读| 2019-2-28 18:30 |系统分类:芯片设计

天气: 晴朗
心情: 平静

AHBAPB工程说明

目录

AHBAPB工程说明... 1

2.      文件说明... 1

3.      工作框图... 2

4.      工作说明... 2

5.      端口说明... 3

6.      测试流程... 4

7.      仿真说明... 4

8.      仿真结果... 5

1)      波形举例---测试1. 5

2)      Transcript. 5

 

1.       实现目标

4个主设备M0~M3访问接口根据轮转仲裁器仲裁出的结果经过APB桥占用APB总线进行访问

APB上挂接4个从设备S0~S3,每个从设备的地址空间如下

S0:  0x0000_0000 ~ 0x0000_00ff;

S1:  0x0000_0100 ~ 0x0000_01ff;

S2:  0x0000_0200 ~ 0x0000_02ff;

S3:  0x0000_0300 ~ 0x0000_03ff;

令从设备地址空间的下边界为其地址的基址

假设每个从设备中有可访问APB寄存器16个,位宽均为32比特,16个寄存器的访问地址计算方式为 基址 + 寄存器编号左移2位(byte 偏移

 

主设备接口的数据读写采用请求/应答方式,遵循如下时序规范

 

从设备读写遵循APB时序规范

 

APB桥的作用是将主设备的访问信号转化成APB总线信号访问从设备

要求:

1.利用verilog代码完成蓝色部分系统搭建

2.搭建testbench进行仿真验证,4个主设备可以同时正确的对任意一个从设备寄存器进行读写


2.   文件说明



4.   工作说明

ModelSim SE 10.1a

 

每次配置好要启动的主机、读写、地址、数据,然后启动主机。主机按仲裁结果依次启动,进行读写分机

 

仲裁模块内采用可变优先级仲裁器,2位状态机作为仲裁核心,每次主机通信完成后,状态机+1。内置主机译码器,用于选择被允许仲裁的主机的地址和数据。

 

从机读写时,末位地址在0~3内均读取末位以0开始的同一个寄存器的32位,即从机读取时忽略地址后2位。


5.   端口说明


 

 

6.   测试流程




 

7.   仿真说明

在仿真前Transcript中命令:do wave.do加载预设波形

输出结果在Transcript中查看

 

8.   仿真结果

1)    波形举例---测试1


2)    Transcript

do wave.do

run -all

# Test Init

# Test Start

#

# 1 TEST Normal (Write) : Master 0          Write 0     (Arbiter now primary-0)

# TOP_TB.DUT_TOP.TEST_Master0 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master0 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master0 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_0    Write Addr:00000008, Reg: 2, Data:55555555

#

# 2 TEST Normal (Read ) : Master 1          Read  0     (Arbiter now primary-1)

# TOP_TB.DUT_TOP.TEST_Master1 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master1 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master1 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_0    Read  Addr:00000008, Reg: 2, Data:55555555

#

# 3 TEST All    (Write) : Master 2->3->0->1 Write 2301  (Arbiter now primary-2)

# TOP_TB.DUT_TOP.TEST_Master0 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master1 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master2 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master3 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master2 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master2 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_2    Write Addr:00000210, Reg: 4, Data:2c2c2c2c

# TOP_TB.DUT_TOP.TEST_Master3 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master3 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_3    Write Addr:00000310, Reg: 4, Data:3d3d3d3d

# TOP_TB.DUT_TOP.TEST_Master0 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master0 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_0    Write Addr:00000010, Reg: 4, Data:0a0a0a0a

# TOP_TB.DUT_TOP.TEST_Master1 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master1 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_1    Write Addr:00000110, Reg: 4, Data:1b1b1b1b

#

# 4 TEST All    (Read ) : Master 2->3->0->1 Read  1032  (Arbiter now primary-2) 

# TOP_TB.DUT_TOP.TEST_Master0 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master1 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master2 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master3 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master2 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master2 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_1    Read  Addr:00000110, Reg: 4, Data:1b1b1b1b

# TOP_TB.DUT_TOP.TEST_Master3 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master3 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_0    Read  Addr:00000010, Reg: 4, Data:0a0a0a0a

# TOP_TB.DUT_TOP.TEST_Master0 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master0 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_3    Read  Addr:00000310, Reg: 4, Data:3d3d3d3d

# TOP_TB.DUT_TOP.TEST_Master1 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master1 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_2    Read  Addr:00000210, Reg: 4, Data:2c2c2c2c

#

# 5 TEST Normal (Write) : Master 3          Write 1     (Arbiter now primary-1)

# TOP_TB.DUT_TOP.TEST_Master3 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master3 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master3 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_1    Write Addr:00000120, Reg: 8, Data:11111111

#

# 6 TEST Normal (Write) : Master 2          Write 2     (Arbiter now primary-2)

# TOP_TB.DUT_TOP.TEST_Master2 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master2 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master2 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_2    Write Addr:00000220, Reg: 8, Data:22222222

#

# 7 TEST Normal (Write) : Master 1          Write 3     (Arbiter now primary-3)

# TOP_TB.DUT_TOP.TEST_Master1 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master1 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master1 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_3    Write Addr:00000320, Reg: 8, Data:33333333

#

# 8 TEST Normal (Read ) : Master 2          Read  1     (Arbiter now primary-1) 

# TOP_TB.DUT_TOP.TEST_Master2 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master2 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master2 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_1    Read  Addr:00000120, Reg: 8, Data:11111111

#

# 9 TEST Normal (Read ) : Master 1          Read  2     (Arbiter now primary-2)

# TOP_TB.DUT_TOP.TEST_Master1 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master1 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master1 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_2    Read  Addr:00000220, Reg: 8, Data:22222222

#

# 10TEST Normal (Read ) : Master 3          Read  3     (Arbiter now primary-3)

# TOP_TB.DUT_TOP.TEST_Master3 Grant Waiting...

# TOP_TB.DUT_TOP.TEST_Master3 Grant Get!

# TOP_TB.DUT_TOP.TEST_Master3 Grant Kill

# TOP_TB.DUT_TOP.DUT_APB_3    Read  Addr:00000320, Reg: 8, Data:33333333

#

# Test Stop


点赞

发表评论 评论 (1 个评论)

回复 hodor 2022-8-30 17:21
mark

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 6

    粉丝
  • 0

    好友
  • 1

    获赞
  • 3

    评论
  • 3128

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-2 22:04 , Processed in 0.017814 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部