Jun
12
微处理器经常要与外部逻辑交互数据 - 可能是ISE里面自己写的逻辑,也可能是Sysgen中的逻辑,当然还可能是片外的逻辑。
交互数据有哪些方法?通常万变不离其宗
- Shared Memory: 双向给地址给数据/取数据
- FIFO:单向顺序给/取数据
- Register:单向选中后给/取数据
最常用的是Shared Memory。
FPGA内部有双口BRAM,两边都可以进行数据的读写,数据交互是双向的。
FIFO在一个模块往另一个模块灌数据时比较有用,优点是不用在意地址的产生。
因为Register无法缓存数据,必须一边给了数据后一边直接取走,所以交换数据时不常用。应用场合更适合控制寄存器。最常用的情况就是EDK系统要控制EDK外部的逻辑,比如给出一个使能信号等。
-----------<方法与操作的分割线>---------
EDK中的操作方法:
Shared Memory使用 XPS_BRAM_IF_CNTLR + BRAM_BLOCK。
XPS_BRAM_IF_CNTLR 接在 PLBv46 Bus 上,在Address页面分配相应的Size和Address。这里设的Size就是使用到的BRAM的大小。
BRAM_BLOCK 的 PORTA 接在 XPS_BRAM_IF_CNTLR 上,PortB Bus 设成 Not Connected,在Port页面将 PortB 所有的IO都 Make External。
FIFO 可以直接使用 FSL Core。
FSL 可以指定使用 BRAM 作为 FIFO,也可以指定使用 Slice 作为 FIFO。根据需求来选择。
Register 可以使用 GPIO Core。
C代码直接寻址然后做数据操作速度会比较快。用Driver中的函数来操作就会比较慢。
交互数据有哪些方法?通常万变不离其宗
- Shared Memory: 双向给地址给数据/取数据
- FIFO:单向顺序给/取数据
- Register:单向选中后给/取数据
最常用的是Shared Memory。
FPGA内部有双口BRAM,两边都可以进行数据的读写,数据交互是双向的。
FIFO在一个模块往另一个模块灌数据时比较有用,优点是不用在意地址的产生。
因为Register无法缓存数据,必须一边给了数据后一边直接取走,所以交换数据时不常用。应用场合更适合控制寄存器。最常用的情况就是EDK系统要控制EDK外部的逻辑,比如给出一个使能信号等。
-----------<方法与操作的分割线>---------
EDK中的操作方法:
Shared Memory使用 XPS_BRAM_IF_CNTLR + BRAM_BLOCK。
XPS_BRAM_IF_CNTLR 接在 PLBv46 Bus 上,在Address页面分配相应的Size和Address。这里设的Size就是使用到的BRAM的大小。
BRAM_BLOCK 的 PORTA 接在 XPS_BRAM_IF_CNTLR 上,PortB Bus 设成 Not Connected,在Port页面将 PortB 所有的IO都 Make External。
FIFO 可以直接使用 FSL Core。
FSL 可以指定使用 BRAM 作为 FIFO,也可以指定使用 Slice 作为 FIFO。根据需求来选择。
Register 可以使用 GPIO Core。
C代码直接寻址然后做数据操作速度会比较快。用Driver中的函数来操作就会比较慢。
Jun
11
XMD的Verify ELF功能在一次调试中帮了大忙。
出问题的情况很奇怪:
- 把Application Initialize to BRAM的时候程序工作不正常
- 用XMD再把程序dow一次,又正常了。
怀疑data2mem出问题,可以BRAM里面又是有值的。
于是怀疑这些值的正确性。用XMD的Verify ELF功能比较BRAM的内容和ELF的内容,结果发现的确有不相符的地方。那就确认是DATA2MEM的过程中出问题了。
此外,Verify ELF还可以用在Flash Writer烧写Flash后检查烧写是否正确:
- 在Bootloader完成,要进行PC指针跳转的最后一步设断点把程序停住,此时Flash中的SREC已经被Bootloader放到了DDR中
- 在XMD中运行Verify ELF检查DDR中的内容是否正确。
出问题的情况很奇怪:
- 把Application Initialize to BRAM的时候程序工作不正常
- 用XMD再把程序dow一次,又正常了。
怀疑data2mem出问题,可以BRAM里面又是有值的。
于是怀疑这些值的正确性。用XMD的Verify ELF功能比较BRAM的内容和ELF的内容,结果发现的确有不相符的地方。那就确认是DATA2MEM的过程中出问题了。
此外,Verify ELF还可以用在Flash Writer烧写Flash后检查烧写是否正确:
- 在Bootloader完成,要进行PC指针跳转的最后一步设断点把程序停住,此时Flash中的SREC已经被Bootloader放到了DDR中
- 在XMD中运行Verify ELF检查DDR中的内容是否正确。
Jun
7
1. SDK其实就是Eclipse。所有Eclipse的技巧都能用在SDK上。
2. SDK的快捷键在这里定义: Window --> Preferences --> General --> Keys
3. 在代码编辑窗口中按Ctrl + Shift + L 可以显示快捷键列表;再按一次可以编辑快捷键定义
4. 自定义的快捷键Export保存,以后换电脑的时候更改比较方便。
2. SDK的快捷键在这里定义: Window --> Preferences --> General --> Keys
3. 在代码编辑窗口中按Ctrl + Shift + L 可以显示快捷键列表;再按一次可以编辑快捷键定义
4. 自定义的快捷键Export保存,以后换电脑的时候更改比较方便。
Jun
4
今天碰到一个奇怪问题:
在SDK中进行debug的时候,点了debug按钮,elf文件下载完毕,debug视图开启,然后Process就停在60%的地方,左上角也显示Pending,然后就Not Responding了。
试验结果发现如果去掉已经设置的breakpoint,就没问题了。
相信是Eclipse的Bug。
在SDK中进行debug的时候,点了debug按钮,elf文件下载完毕,debug视图开启,然后Process就停在60%的地方,左上角也显示Pending,然后就Not Responding了。
试验结果发现如果去掉已经设置的breakpoint,就没问题了。
相信是Eclipse的Bug。
Jun
3
SDK 12.1 基于 Eclipse 3.5,对曾经的Eclipse有了较多的改进。其中一项就包括Indexer。
在Eclipse官方论坛上,开发者们这样解释道:在新的版本中,我们移除了CTags的支持,因为曾经我们不够人手来完成自己的Indexer。而现在,它已经完成了,而且功能比CTags更多更好。
所以,在SDK 12.1中,我们能看到的选项是:Fast C/C++ Indexer 和 Full C/C++ indexer

----------时间的分割线 那是EDK10.1时的故事-------------
SDK使用的Eclipse能够对工程的代码进行索引。索引后就能很方便地使用跳转到函数的defination等功能。
SDK的index功能支持Full和CTags。
CTags这个工具并不是自带的,需要到http://ctags.sourceforge.net/下载后,存放到PATH环境变量指向的目录中。
要使用ctags,只需要在SDK工程属性中把Indexer选择为ctags就可以了。

在Eclipse官方论坛上,开发者们这样解释道:在新的版本中,我们移除了CTags的支持,因为曾经我们不够人手来完成自己的Indexer。而现在,它已经完成了,而且功能比CTags更多更好。
所以,在SDK 12.1中,我们能看到的选项是:Fast C/C++ Indexer 和 Full C/C++ indexer
----------时间的分割线 那是EDK10.1时的故事-------------
SDK使用的Eclipse能够对工程的代码进行索引。索引后就能很方便地使用跳转到函数的defination等功能。
SDK的index功能支持Full和CTags。
CTags这个工具并不是自带的,需要到http://ctags.sourceforge.net/下载后,存放到PATH环境变量指向的目录中。
要使用ctags,只需要在SDK工程属性中把Indexer选择为ctags就可以了。








