基于BM3803处理器平台的PCI软硬件调试问题汇总(持续更新中)
一:相关基本配置:
FPGA: XILINX XC5VFX130T-1FFG1738
PCI接口部分使用XILINX提供的pci32_v4_8硬核;PCI控制器由FPGA逻辑实现,主要完成PCI设备到内存的DMA读写操作。Ps:此控制器网表文件可付费购买(100元/份,支付宝账号:bubble_fish@yeah.net)
处理器:BM3803FMGRH
操作系统:Reworks/Vxworks
二:调试中遇到的问题
1、 IDSEL引脚无信号输入
每个PCI设备都有一个IDSEL的输入信号,这个信号在读写PCI配置寄存器的时候非常有用。但往往很多时候PCI主设备在给从设备写配置寄存器的时候并不会提供一个IDSEL的输出信号。对于非X86架构的处理器,读写PCI配置寄存器不能通过访问config_address(地址0CF8h) config_data(地址0CFCh)的方式。此时需要从AD线上引一根地址线到IDSEL引脚上。例如BM3803上最多允许挂7个PCI从设备,若某个PCI从设备插在1号槽上,则REQ_N接到pci_arb_req[0],IDSEL接到AD[31],此时配置寄存器的起始地址即为0x8000_0000;IDSEL引脚与AD[31]必须在硬件上连好,不能通过FPGA内部逻辑实现连接。依次推演,当插在2号槽时,REQ_N接到pci_arb_req[1],IDSEL接到AD[30],此时配置寄存器的起始地址即为0x4000_0000.
2、 PCI从设备接口上的双向端口要上拉,未使用到的输出引脚要记得赋值
例如"SERR_N"、"PERR_N"、"STOP_N"、"DEVSEL_N"、"TRDY_N"、"IRDY_N"、"FRAME_N" "INTA_N"都上拉。未使用到的pci_arb_req和pci_int要赋相应值。
3、 PCI地址映射问题
地址映射一直是纯硬件工程师或纯软件工程师理解PCI设备最大的障碍。这是一个软硬件相互配合的过程。先从硬件说起,每个PCI设备都有一个配置空间(CONFIG_BAR), 在PCI总线上只有这个配置空间是可见的。配置空间如下图:

若FPGA作为PCI从设备,那么在用coregen生成pci32_v4_8硬核时需要输入Device ID、Vendor ID、BAR0空间的大小。当FPGA挂在BM3803的PCI总线一号槽上时,BM3803可以通过读写0x8000_0000+offset来访问到FPGA的配置空间。三个必须的的配置操作是:DMA_CONFIG_WRITE(0x80000004,0xff00_0147, 0x04)//往0x80000004写入4字节数0xff00_0147。DMA_CONFIG_WRITE(0x80000010,0xD0000000, 0x04)//往0x80000010写入4字节数0xD0000000。DMA_CONFIG_WRITE(0x8000001C,0x40000000, 0x04)//往0x8000001C写入4字节数0x40000000。设置完毕,如果此时BM3803想要读写FPGA的BAR0空间,只需要往0xD000000+offset写数就可以了,具体这个offset有多大由FPGA生成IP核时设置的BAR0空间的大小决定。例如DMA_MEM_WRITE(0xD0001000,0x40000000, 0x04)// 往0xD0001000写入4字节数0x40000000。此时BM3803就会在总线上发起地址为0xD0001000的Memory Write操作,作为从设备的FPGA PCI因为上一步配置过BAR0的基地址为0xD0000000,所以能HIT到这个操作,若发起地址为0xA0001000的Memory Write操作,FPGA是HIT不到的,这个操作一般用来实现主设备通过PCI总线来读写FPGA的寄存器。若FPGA想要通过DMA的方式来写内存,此时FPGA逻辑实现的控制器需要发起一个地址为0x40000000的Memory Write操作,若地址为0x50000000,BM3803是不会响应的,因为BM3803芯片手册设置了BAR3-BAR5为主设备接收数据的内存基地址,上一步我们已经配置了BAR3的基地址为0x40000000。
基于BM3803处理器平台的PCI软硬件调试问题汇总(持续更新中)的更多相关文章
- CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho
CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho https://new.stuq.org/cours ...
- 读书笔记|Windows 调试原理学习|持续更新
关于调试方面的学习笔记,主要来源于<软件调试>的读书笔记和梦织未来论坛的视频教程 1.调试器使用一个死循环监听调试信息. DebugActiveProcess(PID);while(TRU ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【开篇】【持续更新中。。。】
最近发现web api很火,园内也有各种大神已经在研究,本人在asp.net官网上看到一个系列教程,原文地址:http://bitoftech.net/2013/11/25/detailed-tuto ...
- iOS开发调试技巧总结(持续更新中)
作者:乞力马扎罗的雪 原文 对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不 ...
- (持续更新中~~~)kafka--消息引擎与分布式流处理平台
kafka概述 kafka是一个分布式的基于发布/订阅模式的消息队列(message queue),一般更愿意称kafka是一款开源的消息引擎系统,只不过消息队列会耳熟一些.kafka主要应用于大数据 ...
- [C#]asp.net开发微信公众平台----目录汇总-持续更新
1.[c#]asp.net微信公众平台开发(1)数据库设计 2.[c#]asp.net微信公众平台开发(2)多层架构框架搭建和入口实现 3.[c#]asp.net微信公众平台开发(3)微信消息封装及反 ...
- tensorflow安装调试总结(持续更新)
这段时间需要部署tensorflow到linux上,由于堡垒机不能连外网,所以pip.apt-get.wget.git统统不能用,然后就是各种调试了,下面整理了一些遇到的问题和解决方案,供大家参考(C ...
- 【转】基于Jenkins实现持续集成【持续更新中】
知识预览 持续集成 Jenkins安装 Jenkins插件 Jenkins配置 Jenkins备份与恢复 发布PHP项目 SVN 发布Maven项目 按版本发布 远程管理 War文件部署设置 任务 J ...
- 基于Jenkins实现持续集成【持续更新中】
持续集成 1.什么是持续集成:Continuous integration (CI)持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生 ...
随机推荐
- Navicat Premium 连接MySQL数据库出现Authentication plugin 'caching_sha2_password' cannot be loaded的解决方案
1. 管理员权限运行命令提示符,登陆MySQL mysql -u root -p root 2. 修改账户密码加密规则并更新用户密码 ALTER USER 'root'@'localhost' ID ...
- redis介绍(5)主从复制
redis的主从复制: 主从复制介绍:redis的主从复制情况下,一个master节点下可以有多个slave节点,而且每个slave节点又可以有很多slave节点,形成很大的集群量级,我简单画个图,如 ...
- JQuery 简单表格验证
<form action="{% url 'register' %}" method="post"> 用户名:<input id=" ...
- CentOS 中 配置 Nginx 支持 https
一.基础设置: .yum -y update .yum -y install openssl* .cd /usr/local/nginx/conf .mkdir ./ssl .cd ./ssl # 在 ...
- node环境和浏览器的区别
一.全局环境下this的指向 在node中this指向global而在浏览器中this指向window,这就是为什么underscore中一上来就定义了一 root: 1 var root = typ ...
- html + css + jquery实现简单的进度条实例
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...
- mysql(5.7.17)字符集设置(character_set/collation)
0 查看字符集(character_set/collation) use information_schema;desc tables; --一定记住tables表,information_sc ...
- show tables from information_schema/performance_schema/sys;
root@localhost:3306.sock [performance_schema]>select version();+------------+| version() |+----- ...
- 审计系统---堡垒机项目之用户交互+session日志写入数据库[完整版]
2018-06-20 时隔一个多月,忘记了之前的所有操作,重拾起来还是听不容易的,想过放弃,但还是想坚持一下,加油. 世界杯今天葡萄牙1:0战胜摩洛哥,C 罗的一个头球拯救了时间,目前有4个射球,居2 ...
- mode="r" 和 函数末尾调用 regist()!!!!
def regist(): f = open(r"G:\课件\day09 初始函数\code\day009 初始函数\account", mode="r", e ...