AHB APB 简单通讯架构 实现

目录

1.实现目标
2.文件说明
3.工作框图
4.工作说明
5.端口说明
6.测试流程
7.仿真说明
8.仿真结果
波形举例—测试1
Transcript

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. 文件说明

在这里插入图片描述

3. 工作框图

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值