目录
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
-
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