打印

spartan3-400a移植AC97 CORE

[复制链接]
3571|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LIU_XF|  楼主 | 2010-11-2 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自已做的一开发板,AC97芯片为LM4550,电路和ML401的开发板一样

网上下载了ML401的例程,

由于例程是EDK8.1版的,我电脑里装的是EDK12.2版

因此不能直接打开,只好重新创建

大家知道,EDK12.2版的MB没有OPB总线,而AC97的核是基于OPB总线的,所以用了一个PLB OPB的桥

AC97的核没有做任何修改,直接复制到了我工程的pcores下,添加到EDK中
不知道这样是否可以

编译下载后,发现IP核并没有工作,

ac97_rst_n_pin为高
ac97_Clk_pin输入12.288MHz
ac97_SData_In_pin、ac97_SData_Out_pin、ac97_Sync_pin 上都没有波形

程序中读IP寄存器读到的数据也不正确

不知为何?

是不是,用低版本软件创建的IP在高版本软件上不能使用?

xilinx真的很麻烦,软件升级都无法向下兼容的。。

相关帖子

沙发
SuperX-man| | 2010-11-2 17:52 | 只看该作者
不用做一个桥接的,现在的PLB总线完全替代了原来的OPB总线.
直接挂在PLB总线上就行了

使用特权

评论回复
板凳
SuperX-man| | 2010-11-2 18:02 | 只看该作者
而且如果是低版本的话,直接在高版本打开的话,会有一个升级向导,会自动替换的.

你这个AC97的IP核是在8.1下做的,也就是说,可能这个自定义IP核中用的是OPB总线的模式.
你直接全部导入的话,在读写上可能是会出些问题的.

你可以先在工程中Hardware->create or import peripheral来新建一个自定义IP核,会自动生成总线的一个框架,你可以比较下在你的AC97 中改,也可以直接把相关代码复制到新的IP核中.

具体如何自定义IP核在小版我上传的EDK12.2实例里的Lab3有详细文档.

使用特权

评论回复
地板
LIU_XF|  楼主 | 2010-11-2 18:21 | 只看该作者
谢谢 superx-man

我觉得OPB桥应该是没问题,因为我在OPB桥上挂了一个GPIO的核,GPIO可以正常的访问

所以说明PLB 到OPB的桥是正常的

问题是我AC97的核挂到OPB上就不行,

重新定义一个IP,改到PLB上试试

对了,还问一下,假设我的PLB OPB桥是完全没有问题的,8.1下创建的IP,直接复制到工程的pcores下,添加到EDK中
这样是否可以?IP里的PAO和MPD文件,需不需要修改

使用特权

评论回复
5
SuperX-man| | 2010-11-2 19:33 | 只看该作者
PAO和MPD是要根据你的IP核内的情况做适当修改.
MPD文件定义的是相关外部定义.
PAO是你整个自定义IP核中包含的所有的结构文件.如果你在HDL文件夹中增加了VHDL文件,在PAO里需要说明的.

你加了OPB桥的话,挂你自己的IP的时候,看一下是否正确挂上了,包括PORT分配上(时钟什么的),应该要从OPB上引过去

使用特权

评论回复
6
LIU_XF|  楼主 | 2010-11-2 20:05 | 只看该作者
是正确挂上了的,port分配了




工程包
[local]4[/local]

使用特权

评论回复
7
LIU_XF|  楼主 | 2010-11-2 20:17 | 只看该作者
工程包

ac97_test.part2.rar

1.25 MB

ac97_test.part1.rar

4 MB

使用特权

评论回复
8
SuperX-man| | 2010-11-3 09:42 | 只看该作者
我看了你的工程文件了....
你自己加的OPB总线及OPB桥的核都不被认可,12.2提示告诉你该类总线已经被取代了.
我也看了要移植的AC97 代码,不是很多.
你只需要先创建一个新的自定义IP核,让其帮你把总线结构写好,再把AC97的代码复制过去,当然大部分都是相同的,部分地方需要修改.
小版我每次软件版本升级都会收到更新例程的工作的,呵呵,就当学习学习了.
写这个也有很多收获的,完全可以在EDK环境下做ISE的工作,特别是时钟,MB已经帮你处理好了,直接拉过来用就行,呵呵

使用特权

评论回复
9
LIU_XF|  楼主 | 2010-11-4 18:53 | 只看该作者
谢谢superx-man

只是有一点 我不明白的是,为什么我的GPIO挂在OPB上能行

这说明PLB OPB 的桥是没有问题的,您说对不?

使用特权

评论回复
10
SuperX-man| | 2010-11-4 23:14 | 只看该作者
本帖最后由 SuperX-man 于 2010-11-4 23:29 编辑

这个问题,小版我得咨询下其他工程师才行了,呵呵,我从来没这么做过。

我看了下你的那个OPB3.0的GPIO核,是直接从8.1中拷贝过来的么?

在你的工程里microblaze_0\libsrc,implementation\opb_v20_0_wrapper和implementation\opb_gpio_0_wrapper都没有相关驱动.
我怀疑是不是编译的时候自动替换成XPS_GPIO了

使用特权

评论回复
11
SuperX-man| | 2010-11-4 23:29 | 只看该作者
在你的工程里microblaze_0\libsrc,implementation\opb_v20_0_wrapper和implementation\opb_gpio_0_wrapper都没有相关驱动.
我怀疑是不是编译的时候自动替换成XPS_GPIO了

使用特权

评论回复
12
LIU_XF|  楼主 | 2010-11-5 15:27 | 只看该作者
是从8.1拷过来了,

在你的工程里microblaze_0\libsrc,implementation\opb_v20_0_wrapper和implementation\opb_gpio_0_wrapper都没有相关驱动.
我怀疑是不是编译的时候自动替换成XPS_GPIO了
----------------------
还有这事,我看看

使用特权

评论回复
13
SuperX-man| | 2010-11-5 15:55 | 只看该作者
俄,我就是猜想.由于版本升级后,有些内部宏不一样了,所以可能也是导致你AC97没反应.

小版我也耐心等待真正的高手出现了.如果你有了进展,也请告诉我真相哈.

使用特权

评论回复
14
LIU_XF|  楼主 | 2010-11-30 17:19 | 只看该作者
问题解决了

是UCF文件中,管脚约束的问题

导致BIT_CLK布线可能不成功,

改了后就好了

使用特权

评论回复
15
SuperX-man| | 2010-11-30 18:14 | 只看该作者
还是用的OPB桥,然后挂在OPB上的方法么?

使用特权

评论回复
16
LIU_XF|  楼主 | 2010-11-30 21:02 | 只看该作者
是的,PLB - OPB -AC97 IP

OPB桥我测试过,没有问题的

而且OPB桥就是为这种应用而存在的,没道理不行

使用特权

评论回复
17
LIU_XF|  楼主 | 2010-11-30 21:06 | 只看该作者
NET AC97Clk   LOC = F8;
NET AC97RESET_N   LOC = E6;
NET SYNC     LOC = F7;
NET SDATA_OUT LOC = E8;
NET SDATA_IN  LOC = E9;

NET AC97Clk   IOSTANDARD = LVTTL;
NET AC97RESET_N   IOSTANDARD = LVTTL;
NET SYNC     IOSTANDARD = LVTTL;
NET SDATA_OUT IOSTANDARD = LVTTL;
NET SDATA_IN  IOSTANDARD = LVTTL;

NET AC97RESET_N   DRIVE = 8 | SLEW = SLOW;
NET SYNC     DRIVE = 8 | SLEW = SLOW;
NET SDATA_OUT DRIVE = 8 | SLEW = SLOW;


--------------------
不明白DRIVE = 8是什么意思,版主能不能解释一下

使用特权

评论回复
18
SuperX-man| | 2010-11-30 23:08 | 只看该作者
最小驱动电流的意思.
DRIVE=8 就是在最坏情况下,最小驱动电流为8 mA

可以有2,4,6,8,12,16这几种模式.

使用特权

评论回复
19
LIU_XF|  楼主 | 2010-12-1 08:03 | 只看该作者
版主真是兢兢业业的守着论坛了

每次都是有问必回

感谢版主

xilinx版块一定会越来越红火的

使用特权

评论回复
20
daiy5210| | 2011-8-16 19:47 | 只看该作者
Mark~~~:)
正好也我也需要挂AC97的核。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:无

68

主题

372

帖子

3

粉丝