完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,我正试图通过ICAP部分重新配置我的设备(ML310板上的XC2VP30)。
我把我的ICAP附在OPB上,附在Microblaze上。 在bitgen.ut文件中,我将模式引脚(M2M1M0)的值设置为1(PULLUP)。 因此在101上没有设置JTAG模式。 我还确保没有设置持久位。 同样,我的HWICAP的基地址和高地址是0x42000000和0x42000fff,如HWICAP数据表中所述。 我的系统(处理器和OPB总线)时钟频率为25 MHz,以确保ICAP正常。 系统包含一个定时器,一个SysAce,一个hwicap,一个uartlite和一个opb-mdm(用于调试),所有这些都连接到opb。 微纤维也有一些本地记忆。 我也在使用EDK,ISE 8.2。 这是关于我的系统的整个设置。 现在问题是:我只需要通过ICAP来衡量重新配置的延迟。 以下是我实现的非常简单的C代码,用于读取框架并在屏幕上打印内容。 后来我想写一些东西到一个帧并再次读回来只是为了确保实际上它改变了重新配置。 首先,我初始化ICAP模块,然后调用XHwIcap_DeviceReadFrame(),然后通过XHwIcap_StorageBufferRead()读取配置。 XHwIcap my_icap; XStatus icap_stat; icap_stat = XHwIcap_Initialize(&amp; my_icap,XPAR_OPB_HWICAP_0_DEVICE_ID,XHI_READ_DEVICEID_FROM_ICAP); if(icap_stat!= XST_SUCCESS)print(“ n初始化不成功!! n”); Xuint32 frame_content; icap_stat = XHwIcap_DeviceReadFrame(&amp; my_icap,XHI_FAR_CLB_BLOCK,32,32); if(icap_stat!= XST_SUCCESS)print(“ n有一些东西在读取帧! n”); for(i = 0; i {print(“word number”); putnum(i + 1); print(“等于:”); frame_content = XHwIcap_StorageBufferRead(&amp; my_icap,i); putnum(frame_content); putchar (' n');} 问题是当我回读框架时,除了前7个单词之外,一切都是0,无论它是什么框架。 我仔细研究了ICAP的驱动程序功能及其实现。 我知道驱动程序将前7个字写入存储缓冲区,基本上是伪字,同步字,设置CMD寄存器,设置FAR寄存器等。虽然我还没有确认要回读这些是应该发送的字 ICAP但听起来合情合理。 我读的七个字如下: 30008001 0000000d ffffffff ffffffff 30002001 00404000 2800619c (我想这应该不是问题,但前4个字与DeviceReadFrame函数中写的不同,我意识到在DeviceReadFrame函数中调用Desync命令后内容发生了变化!) 正如我所提到的,我的问题是我基本上无法正确读取配置框架。 你知道我做错了什么或问题是什么吗? 我被建议使用DeviceRead和DeviceWrite而不是DeviceReadFrame和DeviceWriteFrame。 有没有人在驱动程序中使用这些功能失败的成功? 我也有一些疑问和疑问。 首先,为什么我们应该先读取一个帧,修改它然后再将它写回配置? 我们不能只是写一些东西到设备? 我还没有使用基于差异的重新配置,它可能与此有关。 但是,如果我只想将配置写入一个没有实现任何其他电路的任何其他部分的帧,那么我不能只是在没有先读取并修改它的情况下向该帧写入内容吗? 我的第二个问题是关于HWICAP模块的存储缓冲区。 首先,我认为我必须设置一个opb_bram,以便HWICAP可以使用它。 然而,后来通过研究驱动程序,我意识到HWICAP的基地址与存储缓冲区(即BRAM)相同,所以我得出结论,当我使用HWICAP时,我隐式地为它分配了一个BRAM。 这样吗? 如果没有,请告诉我。 第三个问题是ICAP运行的时钟频率! 我在某处读过最高的66MHz。 它是正确的还是我们可以设置比这更高的时钟? 这个消息变得很长,但如果你能帮助我,我真的很感激。 我已阅读过许多以前关于ICAP的帖子,但找不到足够的信息来解决我的问题。 所以也许这篇文章可以补充它们。 非常感谢,事先 以上来自于谷歌翻译 以下为原文 Hi everybody, I'm trying to partially reconfigure my device (XC2VP30 on ML310 board) through ICAP. I have my ICAP attached to OPB which is attached to Microblaze. In bitgen.ut file I have set the value of mode pins (M2M1M0) to 1 (PULLUP). So it is not set on 101 which is JTAG mode. I also made sure that persist bit is not set. As well the base address and high address of my HWICAP is 0x42000000 and 0x42000fff as mentioned in the datasheet of HWICAP. My system's (processor and OPB bus) clock frequency is 25 MHz to make sure that ICAP is OK with it. The system contains a timer, a SysAce, a hwicap, a uartlite and an opb-mdm (for debugging) all attached to the opb. The microblaze has some local memory too. I'm also using EDK, ISE 8.2. That's the whole setting about my system. Now here is the problem: I just need to measure the delay of reconfiguration through ICAP. The following is a very simple C code I have implemented to read a frame and print the content on the screen. Later I want to write something to a frame and again read it back just to make sure that in fact it changed the reconfiguration. Firstly I initialize the ICAP module and then invoke XHwIcap_DeviceReadFrame() and then I read the configuration through XHwIcap_StorageBufferRead(). XHwIcap my_icap; XStatus icap_stat; icap_stat = XHwIcap_Initialize(&my_icap, XPAR_OPB_HWICAP_0_DEVICE_ID, XHI_READ_DEVICEID_FROM_ICAP); if(icap_stat != XST_SUCCESS) print("n Initialization not successful!!n"); Xuint32 frame_content; icap_stat = XHwIcap_DeviceReadFrame(&my_icap, XHI_FAR_CLB_BLOCK, 32, 32); if(icap_stat != XST_SUCCESS) print("n There is something working in reading a frame!n"); for(i = 0; i < my_icap.WordsPerFrame; i++) { print("word number"); putnum(i+1); print(" is equal to: "); frame_content = XHwIcap_StorageBufferRead(&my_icap, i); putnum(frame_content); putchar('n'); } The problem is when I read back the frame except for the first 7 words everything is 0, no matter what frame it is. I have carefully studied ICAP's driver's functions and their implementation. I know that the driver writes the first 7 words in the storage buffer which are basically dummy word, sync word, setting CMD register, setting FAR register and etc. While I have not verified that to read back these are the words that should be sent to ICAP but they sound reasonable. The seven words that I read are as follows: 30008001 0000000d ffffffff ffffffff 30002001 00404000 2800619c (I guess this should not be an issue but the first 4 words are different than what was written in DeviceReadFrame function, I realized that the content changes after invoking Desync command in DeviceReadFrame function!) So as I mentioned, my problem is I can't basically read a frame of configuration correctly. Do you have any idea where I'm doing wrong or what the problem is? I have been advised to use DeviceRead and DeviceWrite instead of DeviceReadFrame and DeviceWriteFrame. Does any one have a successful on unsuccessful experience with these functions in the driver? As well I have some doubts and questions. Firstly why should we first read a frame, modify it and then write it back to the configuration? Can't we just write something to the device? I haven't still worked with difference-based reconfiguration and it might have something to do with that. But if I just want to write configuration to one frame that doesn't implement any other part of any other circuit, can't I just write something to that frame without first reading it and modifying it? The second question that I have is about the storage buffer of the HWICAP module. Firstly I thought that I have to set an opb_bram so that HWICAP can use it. However later through studying the driver I realized that the base address for HWICAP is the same as storage buffer (which is the BRAM) so I concluded that when I use a HWICAP I implicitly assign a BRAM to it. Is this so? If not please let me know. The third question is the clock frequency that ICAP operates! I have read somewhere that the highest is 66MHz. Is it correct or we can set the clock higher than that? This message became very long, but I really appreciate it if you could kindly help me out with it. I have read many of the previous posts about ICAP but couldn't find enough information to solve my problems. So perhaps this post can be a complement to them. Thanks a lot beforehand, |
|
相关推荐
3个回答
|
|
我遇到了同样的问题!
我正在使用HWICAP来回读帧数据,但是当我打印出来时,我发现所有的回读数据都是0 !! 我已经更改了配置框架地址,但全部为0。 我已经将一个帧数据(不是0)写入设备,然后使用函数 - XHwIcap_DeviceReadFrame()来回读。 回读数据均为0。 你是如何处理这个问题的? 谢谢! 我的邮箱:iamadog3333#163.com#== at 以上来自于谷歌翻译 以下为原文 I meet the same problem with you! I am using HWICAP to readback a frame data, but when I print them out I found that all the readback data is 0!! I have changed the configuration frame address, but all 0. I have written a frame data(not 0) into the device, then use the function-- XHwIcap_DeviceReadFrame() to readback. The readback data are all 0. How do you handle the problem? Thank you! my mail: iamadog3333#163.com #==at |
|
|
|
这是一年多以前,但据我记得,我尝试了不同的帧(不同的MNA和MJA),最终可以找到一个非零配置位的帧。
我记得我的设计并不大,所以我很期待为什么我试过的很多帧都是零。 您可以检查模块的位置,并粗略地找到您应该查找的框架。 我认为你应该能够找到一个非零配置位的帧。 祝你好运, 阿米尔 以上来自于谷歌翻译 以下为原文 It was more than a year ago, but as far as I remember I tried different frames (different MNA and MJA) and could finally find a frame with non-zero configuration bits. I remember my design was not large, so it was quite expected why many of the frames I tried were zero. You can check the placement of your module and roughly find the frame you should be looking for. I think you should be able to find a frame with non-zero configuration bits. Best of luck, Amir |
|
|
|
问题解决了!
主要原因是bitgen.ut中的一些设置是错误的。我使用bitgen.ut文件如下,然后它的工作原理! -g DebugBitstream:否-g Binary:no -g CRC:启用-g ConfigRate:4 -g CclkPin:PullUp -g M0Pin:PullUp -g M1Pin:PullUp -g M2Pin:PullUp -g ProgPin:PullUp -g DonePin:PullUp -g PowerdownPin:PullUp -g TckPin:PullUp -g TdiPin:PullUp -g TdoPin:PullNone -g TmsPin:PullUp -g UnusedPin:PullDown -g UserID:0xFFFFFFFF -g DCMShutdown:Disable -g DisableBandgap:No -g DCIUpdateMode:AsRequired -g StartUpClk:CClk -g DONE_cycle:4 -g GTS_cycle:5 -g GWE_cycle:6 -g LCK_cycle:NoWait -g Match_cycle:Auto -g Security:None -g Persist:No -l -m -g ReadBack -g DonePipe :否-g DriveDone:否-g加密:没有HWICAP的IP版本是1.00b,驱动程序的版本是1.00a。 以上来自于谷歌翻译 以下为原文 The problem was solved! The main reason is some setting in bitgen.ut was wrong.I use the bitgen.ut file as follows, then it works! -g DebugBitstream:No -g Binary:no -g CRC:Enable -g ConfigRate:4 -g CclkPin:PullUp -g M0Pin:PullUp -g M1Pin:PullUp -g M2Pin:PullUp -g ProgPin:PullUp -g DonePin:PullUp -g PowerdownPin:PullUp -g TckPin:PullUp -g TdiPin:PullUp -g TdoPin:PullNone -g TmsPin:PullUp -g UnusedPin:PullDown -g UserID:0xFFFFFFFF -g DCMShutdown:Disable -g DisableBandgap:No -g DCIUpdateMode:AsRequired -g StartUpClk:CClk -g DONE_cycle:4 -g GTS_cycle:5 -g GWE_cycle:6 -g LCK_cycle:NoWait -g Match_cycle:Auto -g Security:None -g Persist:No -l -m -g ReadBack -g DonePipe:No -g DriveDone:No -g Encrypt:No HWICAP's IP version is 1.00b, the driver's version is 1.00a. |
|
|
|
只有小组成员才能发言,加入小组>>
2385 浏览 7 评论
2800 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2264 浏览 9 评论
3336 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2433 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
759浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
548浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
371浏览 1评论
1966浏览 0评论
685浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 08:09 , Processed in 1.229307 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号