网站重新上线,多谢朋友们的关心
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中的函数来操作就会比较慢。
Tags:
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中的内容是否正确。
Tags: , ,
Feb 27
PPC有Instruction Simulator叫做ISS,MicroBlaze其实也有。我将它们统称为EDK Instruction Simulator。以前经常和Virtual Platform的概念混淆起来。

Instruction Simulator: 精确到时钟周期,只能仿真指令,即没有外围设备,只支持64KB的RAM。不能printf,不能点LED。
Virtual Platform: Instruction Simulator + 外围设备模拟器。曾经支持uart等等外设。外设仿真模型是从HDL实现转换成C语言的。

Virtual Platform已经不再开发也不再支持。但是Instruction Simulator还是可以用。在XMD选择连接对象的时候,选择Simulator,然后就能连接到指令仿真器,并且可以用GDB跟踪调试。注意在Simulator中所有对外部访问的语句都将没有响应。

【REF】
est_rm.pdf --> XMD章节
Tags: , ,
Feb 11

BBD文件 不指定

RickySu , 11:58 , 技术经验 , 评论(0) , 引用(0) , 阅读(503) , Via 本站原创
EDK中Custom IP Core如果需要引用网表,那么就需要在BBD文件中中声明需要使用的网表名称。

常用的BBD文件有两种形式:
1. 在所有情况下均使用相同的网表
2. 根据不同请款使用不同的网表

在情况1-使用相同网表时,可以使用CIP Wizard的import功能自动生成BBD文件,并且CIP Wizard还会把网表文件放到相应的文件夹内(pcores//netlists)。
此时BBD文件的内容是
FILES
blackbox.ngc


在情况2-需要EDK自动选择相应网表时,就需要手动编写/修改BBD文件了。
Tags: , ,
Feb 10
背景:在Xilinx EDK系统上如果要使用FPU,现在的选择是MicroBlaze自带的单精度FPU,给PPC405用的单精度FPU和给PPC440用的双精度FPU。也就是说,在PPC405和MicroBlaze上暂时还没有双精度FPU。

于是最近做了一个基于MicroBlaze FSL总线的“伪”双精度FPU。

FAQ:

Q1: 为什么这是一个“伪”FPU?
A1: 因为这不是一个集成的FPU,不能直接使用C语言的加减乘除直接来运算,编译器不直接支持,而是使用自带的driver来传递信息。

Q2: 它能跑多快的速度?
A2: 这不是一个最优化的FPU(速度、资源),而仅仅达到“可用”的程度。在Spartan3E上的测试结果是45MHz左右, 在Virtex4上测试结果是90MHz左右。它调用了CoreGen IP - Floating Point。IP Core已经配置为节省面积且重复使用资源。用户可以使用CoreGen自己设定Floating Point IPCore 的参数并将生成的网表替换netlists目录中的相应文件。

Q3: 我该怎样使用它?
Tags: , , ,
分页: 1/7 第一页 1 2 3 4 5 6 7 下页 最后页 [ 显示模式: 摘要 | 列表 ]