原创 edk初步使用指南

2008-9-23 10:23 6337 4 5 分类: FPGA/CPLD
 昨天说到使用向导建工程中选目标板的步骤.大厂商的开发板都提供xbd文件,有的还提供lib。xbd文件拷到EDK安装目录下的board中,路径参考board中其他xbd文件路径。lib中除了xbd还有针对板子IP Core的硬件逻辑和软件程序。硬件逻辑拷到EDK\hw\XilinxProcessorIPLib\pcores,软件拷到EDK\sw\XilinxProcessorIPLib\drivers。考完后启动XPS。再按照前两部写的做到选板子,在下拉列表中选使用的板子,我们实验室用的最大的板子是xilinx的XUP... 。如果没xbd就选下面的".... for a custom board"。之后的步骤都以XUP为例。
3、select processor  MicroBlaze是软核,只要FPGA够大就能配置出软核。PowerPC是在FPGA内固定的硬核,只有部分系列的FPGA内有硬核,XUP上使用的是包含两个硬核的V2P30。所以这里选哪个都可以,我们实验室一直用的是PowerPC。
4、configure PowerPC system wide setting根据需要选pocessor 和 bus的时钟频率。Debug I/F选 FPGA JTAG,有了这个可以用xmd调processor上的程序。Cache setup没什么特殊需要就不用选了。还有就是选ocm的大小,这个就说来话长了。processor上运行的程序必须有个memory进行存储,就像pc机中的cpu和内存。PowerPC的程序可以放在片内的iocm和docm 或plb_bram_if_cntlr连接的BRAM(之后简称plb_bram)中或片外的存储器。这里要提到FPGA内的一种资源BRAM,一块FPGA内一般有若干块BRAM,分部在FPGA各处。上面说的iocm docm plb_bram都是由BRAM配置而成。V2P30的datasheet中说其内部包含136*18Kbit的BRAM。但是这些bit不全是EDK能用的,每块BRAM是18Kbit,但只能配置成2KByte。就是说v2p30中能用的BRAM有136*2KByte=272KByte。除了之前说的各种片内memory需要用BRAM外,有的IPCore也要用BRAM,例如HWICAP。所以做工程时要对BRAM进行合理分配。选ocm的大小根据程序的大小,或不选,在之后的步骤里选择plb_bram的大小,将程序放到plb_bram中。

5、configure IO Interface 选板子上的外设,需要什么选什么,EDK中从工程生成可下载的问大约要十多分钟到二十几分钟(电脑配置双核 1G)。选的越多生成的就越慢。

6、add internal peripherals 这步填的plb_bram_if_cntlr是用来连接plb_bram的。就是第四步中提到的用于存程序的memory。

到此硬件部分的初始配置就完了


7、software setup  STDIN、STDOUT选择串口就行(第5步要选择串口),这样程序中的print和xil_printf就可以在串口上输出。在EDK中一般不用printf这个函数,这个函数在代码段中占几十K,如果只输出固定的字符串用print,需要%d %s之类的用xil_printf这两个省资源。如果设计中代码段的memory足够大,也可以用printf。Boot Memory 就是程序在哪里启动了(ppc的启动地址是0xFFFFFFFC)。窗口下边是要生成的两个软件工程。建议至少选一个,这样就不用自己建了。

8、configure XXXXXX test application 如果第7步中选择生成软件工程会出现这个窗口,这个窗口是对软件工程进行配置的。根据需要选。

9、之后就没什么要选的了。到“finish”这个向导就结束了。向导中的设置在工程建完后都是可以改的。

向导建完后,这个工程就有了在FPGA上运行的基本环境。之后可以向工程中添加其它的功能(添加功能明天写),没需要也可以不添加。

如果当前的硬件配置是我们所需要的,选择菜单“Hardware"->"Generate Netlist" 如果没错之后选择“Hardware"->"Generate Bitstream",或者直接选择 “Hardware"->"Generate Bitstream",EDK会自动将“Hardware"->"Generate Netlist"在“Hardware"->"Generate Bitstream"前运行,这个过程会很长很长根据工程配置和电脑配置的不同可能是十几分钟到几十分钟。可以用这个时间改软件,之前那两个generate都是对硬件的,和软件无关。

如果在第7步中选择生成软件工程,这时在界面左边的"project information area"->"Applications" 中会出现你选择生成的软件工程和Default ...(FPGA内有几个核就有几个default...)。工程标记上有红色叉的是不被初始到bit文件中的,可以在右键菜单中改这个设置“make to 。。。”。一个ppc上一次只能有一个“make to ..."的软件工程。“sources”里是程序,c语言的,默认生成的软件工程,不用改下载后就能看到板子上的现象。

经过N久的等待在界面下方的“console window”中出现了“Done”,说明硬件部分已经生成完了,在工程目录\implementation 下生成了一个 工程名.bit 文件,这个是只包含硬件配置的bit文件。

下面是对软件工程的操作,菜单"software"->"generate lib..." 生成库,"software"->"Build all ..." 。之后时间软件生成的elf文件和硬件的bit文件整合成download.bit,菜单"Device configuration"->"update bitstream",生成的download.bit也在implementation 文件夹中。

把板子的电源、串口和下载线连好,"Device configuration"->"download bitstream",“console window”中出现done时download.bit就被下载到板子上了。程序中如果有print 或xil_printf可以用串口工具看输出。

 


通过向导建工程后,System Assembly View1中是工程中硬件的配置,这些信息都可以在MHS文件中找到。工程中硬件配置用的是EDK提供的IP Core 或如果板子提供lib也可能包含lib中的IPcore。工程建完后,如果还需要添加IP Core,可以在左边IP Catalog中找到需要的IP Core对其双击或右键Add IP。这只是把IP Core加入工程,还需对其进行总线连接(Bus Interface)、端口连接(Ports)、地址分配(Addresses)。对于不同的IPCore 这三项不是必须的,但是如果进行了总线连接地址就是必须分配的,因为通过总线对IP Core进行操作必须有地址。比如GPIO这三项都有;BRAM Controler有Bus、address没有ports;如果自己写个IPCore(自定义IP Core以后写,我打了好多伏笔啊~~~)不需要与总线通信就没BUs、Address有Ports。连接方法很简单,看看界面就会了,我在这就不写了。

添加IPCore后如果对其使用方式不了解,可以看右键菜单中的PDF和view api documentation(在System Assembly View1中右键才有)。或者直接到EDK安装目录下的hw\XilinxProcessorIPLib\pcores和sw\XilinxProcessorIPLib\drivers中找HDL和C。

MHS(Microprocessor Hardware Specification)中包含嵌入式处理器系统的配置信息、总线构架、外围设备、处理器、连接、地址。MHS所提供的信息在System Assembly View1中都包含了,不过直接编辑MHS文件更方便(个人观点)。语法不是很难,看看已有的MHS就可以了。在第一个BEGIN之前的是外部端口,这些端口可以连接FPGA的引脚,就是说可以在UCF中出现的引脚,一般如果是EDK生成的外部引脚名字都是*_pin。如果要添加外部引脚可以在System Assembly View1->ports 中在对应引脚的下拉菜单中选make external 或者直接在mhs文件中照着其他PORT的格式写一条语句。外部端口之后是N个BEGIN-END,N等于工程中用的IPCOre的数量。BEGIN-END间的语句是对IPCore进行设置,设置方式可以在IPcore的PDF中找到。psf_rm.pdf 的 chapter 2是对MHS的介绍。

如果需要对IPCore进行操作,必须为IPCore添加地址,这个地址对应IP Core内部的寄存器地址,当总线的地址线的值等于某个寄存器的地址时,该寄存器将之后总线数据线发送的数据接收。然后IP Core根据收到的数据进行工作。也就是说只要对IPCore的地址写数据就可以操作IPCore。EDK中对IPCore的操作提供了很多函数,这些函数是封装了一层一层又一层,其实最基本的函数就是 XIo_In32 XIo_In16 XIo_In8 XIo_Out32 XIo_Out16 XIo_Out8,这些在xio.c中可以看到函数原型。
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2009-8-17 14:25

学习了
相关推荐阅读
用户167589 2009-10-12 11:47
静态时序分析技术提高ASIC时序性能
静态时序分析技术提高ASIC时序性能  类别:技术文章来源:未知作者:Dean Bronnenberg关键字:时序加入日期:2002-3-6今天阅读:2总共阅读:2677 〖文章转载或出处〗≡中国电子...
用户167589 2009-10-10 16:55
cache的相关知识
[精华] cache的相关知识http://www.chinaunix.net 作者:ohwww  发表于:2005-12-14 11:55:26【发表评论】【查看原文】【服务器及硬件技术讨论区】【关...
用户167589 2009-10-09 10:07
FPGA跨时钟处理小结[转]
最近逛各个论坛加上以前学习FPGA和数字电路设计的书,跨时钟处理大概有以下三种,第一种是用来处理一位数据或信号的跨时钟处理,用D触发器而不用组合电路延时的方法;第二种是总线握手方式,即当信号从A电路传...
用户167589 2009-07-09 17:46
特许.35流片总结
      辛苦了1个多月,终于把后端做通了,但是还存在很多问题,这次由于时间原因,只能很不严谨的直接拿去流片,甚至LVS都没有来得及做完,没办法,经验太少了。     首先,特许0.35工艺的库实在...
用户167589 2009-07-07 22:48
LVS实例
熟悉netlist 文件例:*******MUX2 NETLIST *********.BIPOLAR*.RESI=1K.INCLUDE ./inv.cir.PARAM.GLOBAL VSS:G VD...
用户167589 2009-07-07 22:08
Calibre经典教程和看LVS的错误报告的方法
Calibre经典教程和看LVS的错误报告的方法看calibre lvs 错误报告的方法1. Report开头部分的Warning和Error信息(因为出现Warning和Error的情况很多,这里主...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条