金曦的技术BLOG 订阅
公告
我的邮箱 sk2400@163.com 欢迎对技术感兴趣的朋友来信探讨。
本blog中除注明“转载”或“ZZ”的文章均为本人原创
分类
内容读取中…
评论
内容读取中…
留言
内容读取中…
访客
内容读取中…
好友
内容读取中…
博文
置顶:找公司工作,找学校读博 (2008-03-21 01:30)
 趁着blog有人气,为自己做个广告。想找个地方工作,或是读博。哪位看了我的blog,觉得我还行就联系我sk2400@163.com
 我是东北大学计算机研究生,今年7月毕业。做过的东西blog里写了一少部分,还有些“高深的”没写。软件善用C,我是计算机的吗,C就是我的母语,我的汉语还没C流利。硬件用VHDL,写了快3年了,写VHDL的潜规则知道些,对综合有一定的认识,对FPGA的了解不只停留在HDL级。工作要求是感兴趣就好。读博要求是想做可重构系统相关的研究。其他的都可商量。
EDK简单使用流程(5) (2008-04-04 10:19)
这两天在看一本书《编码的奥秘》。从两个邻居小孩熄灯后用摩尔斯密码聊天,写到海豚的二进制、继电器、电报、触发器、存储器、总线、操作系统,最后写到图像化革命。这本书是写计算机软件、硬件的形成及发展的,但是语言通俗风趣,读来一点也不觉得枯燥。这个和EDK有点远,言归正传,今天想写写怎样通过PPC上跑的软件程序控制挂在总线上的IP Core。
如果需要对IPCore进行操作,必须为IPCore添加地址,这个地址对应IP Core内部的寄存器地址,当总线的地址线的值等于某个寄存器的地址时,该寄存器将之后总线数据线发送的数据接收。然后IP Core根据收到的数据进行工作。也就是说只要对IPCore的地址写数据就可以操作IPCore。EDK中对IPCore的操作提供了很多函数,这些函数是封装了一层一层又一层,其实最基本的函数就是 XIo_In32 XIo_In16 XIo_In8 XIo_Out32 XIo_Out16 XIo_Out8,这些在xio.c中可以看到函数原型。
EDK简单使用流程(4) (2008-03-30 20:43)
好久没写了......
今天写怎么向工程中添加EDK中提供的IPcore和MHS文件。
通过向导建工程后,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\Xilin
关于双核通信 (2008-03-27 10:26)
 本想把双核通信写的详细些,不过有些步骤感觉自己写不明白。xilinx的xapp996是介绍双核通信的,建议大家看看,比我写的好多了。xapp996有个2M多的说明文档和13M多的例子。上不了外网的网友可以联系我,我把例子发给你。我的邮箱 sk2400@163.com
^_^ (2008-03-21 01:00)
 最近收到很多网友的email和纸条,很感谢各位对我blog的关注。这几天比较忙,没时间写blog了。过了这几天我会继续写的。EDK的使用我会继续写下去,还有网友说的回读双核通信我会再写的详细些。重点标记一下,要不就忘了。
 
通过ipif的中断不会用 (2008-03-19 00:30)
 自定义IPCore一般会生成两个文件user_logic和core名字.VHD。user_logic是用户逻辑,其与总线连接的信号和中断都要经过ipif,可是中断信号ms在ipif中做了很复杂的处理,在user_logic中无法向外发中断。无奈只能将user_logic的中断信号绕过ipif,直接连到中断控制器上。
EDK简单使用流程(3) (2008-03-13 12:40)
继续我的长篇“简单使用流程”。一不小心写了这么长。
今天该写建工程向导中的软件初始设置。
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”这个向导就结束了。向导中的设置在工程建完后都是可以改的。
向导建完后,这个
EDK简单使用流程(2) (2008-03-13 01:14)
 昨天说到使用向导建工程中选目标板的步骤.大厂商的开发板都提供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
EDK简单使用流程(1) (2008-03-11 23:59)
 EDK的使用方法我是已经讲了一遍一遍又一遍,以后还要继续讲下去。这里简单写一下使用的步骤,希望师弟、师妹们在听我讲的云里雾里后看看这篇blog。
 xilinx fpga的基本开发工具是ISE,ISE包括FPGA开发所需要的大部分工具。后来由于FPGA内有了硬核(powerpc)和可配置的软核(MicroBlaze),ISE的功能无法满足对软硬核开发的需求,所以出现了EDK。EDK可以同时配置FPGA内的硬件逻辑(*.mhs文件中是硬件配置信息)和跑在软硬核上的软件程序(*.mss文件中是软件配置信息)。EDK提供的图像化界面可以使用户方便的修改mhs和mss的配置信息。每个EDK工程包含一种硬件配置和若干个软件工程。同一硬件配置上的软件工程不能同时有效。下面以EDK9.1为例简单介绍使用流程:
1、打开Xilinx Platform Studio,会弹出一个小窗口。选第一项(Base System Builder wizard)新建一个EDK工程,然后选择工程目录,这里要自己建工程文件夹。
2、base system builder-welcome 窗口选'I would like to create a new design'.之后是选目标板。这个地方比较麻烦,明天再写...
opb_timer 实现系统时钟 (2008-03-10 23:41)
 项目需要一个系统时间,uc本身没有系统时间。用硬件做太占资源,软件做误差太大,用ds的时间芯片估计没时间调了。最后想了个折中的办法,用EDK中提供的opb_timer,大约1s触发一次中断,在中断处理函数中进行以s为单位的计时,误差是不小,但我们的项目对这个时间误差还可以忍受。
MHS
BEGIN opb_timer
 PARAMETER INSTANCE = opb_timer_0
 PARAMETER HW_VER = 1.00.b
 PARAMETER C_BASEADDR = 0x20050000
 PARAMETER C_HIGHADDR = 0x200503FF
 BUS_INTERFACE SOPB = opb_v20_0
 PORT CaptureTrig0 = net_gnd
 PORT Interrupt = opb_timer_0_Interrupt
END
 
程序
#include 'xtmrctr_l.h'

 XTmrCtr_mSetLoadReg(XPAR_OPB_TIMER_0_BASEADDR, 0, 100000000 - 2);//100M时钟,计数后位1s

 XIntc_RegisterHandler(XPAR_OPB_
ppc的vector放置地址 (2008-03-08 00:30)
 今天将别人移植完的ucos,整合到自己的工程中,出现了一个很奇怪的错误。ppc的.vector的开始地址要求放到64K对齐的位置。开始时将.vector和程序所有的段都放在plb_bram中该bram的地址是0xFFFF0000--0xFFFFFFFF,vector放在0xFFFF0000处。这个确实是64K地址对齐处。但是下载程序发现中断没起来。后来在工程中加入iocm和docm,将vector单独放在plb_ram(0x00000000--0x00003fff)中,其他段放在iocm和docm中。这次下载后程序运行正常了。
新浪BLOG意见反馈留言板 不良信息反馈 电话:95105670 提示音后按2键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有