icape3 的使用
在FPGA中,有时需要使用用户代码重配置FPGA,配置的内容可以是flash或者是其他的来源这样FPGA的启动模式有关,在本实验中配置文件是存放在flash中。实际的操作步骤如下:
1:生成一个工程,工程的内容是led灯在闪烁。并且生成相应的mcs文件,通过jtag烧录到板卡上的 bpi flash中,等待FPGA重新加载flash的内容。如果加载成功led灯就是这个工程的闪烁状态。
创建工程,Verilog写led灯,就不说,关键是如何生成mcs文件。通过如下的两条命令:
cd E:/work/MT28QU01GAAA1E/mt28_prj/prj/flsh_cntrl/flsh_cntrl.runs/impl_1 (切换当前的工作目录,到生成工程bit的目录下)
write_cfgmem -force -format mcs -interface bpix16 -size 128 -loadbit "up 0x0 flash_cntrlor.bit" -file flash_cntrlor.mcs
关于write_cfgmem命令的参数可以百度,不同的flash是有不同的对应参数,比如这块板卡上用的是bpi * 16bit的128MB 镁光flash,起始地址对应到0x0,这也是FPGA加载flash的地址,bit的文件 名肯定是要改的,最后的是生成mcs文件的名字。
在生成mcs文件后,烧录到flash中,这里也不写,在hardmanager有add configuration memory device 添加对应的flash,和mcs文件即可。
2:在生成一个工程称工程2,工程2的内容包括led状态,但是led状态需要和工程1不一致,还包括icape3的操作。
下面是icape3的例化,因为我的目标是使用它来启动FPGA的,输出端口并没有使用。在这些信息都xilinx的ug570有介绍,接口是一个使能,一个输入数据总线,时钟,读写选择。
ICAPE3#(
.DEVICE_ID ( 'h03628093 ) , //Specifiesthepre-programmedDeviceIDvaluetobeusedforsimulation
//purposes.
.ICAP_AUTO_SWITCH ( "DISABLE" ) , //EnableswitchICAPusingsyncword
.SIM_CFG_FILE_NAME ( "NONE" ) //SpecifiestheRawBitstream(RBT)filetobeparsedbythesimulation
//model
)
ICAPE3_inst(
.AVAIL ( icap_vail ) , //1-bit output: Availability status of ICAP
.O ( icap_dt_out ) , //32-bit output: Configuration data output bus
.PRDONE ( icap_prdone ) , //1-bit output: Indicates completion of Partial Reconfiguration
.PRERROR ( icap_prerror ) , //1-bit output: Indicates Error during Partial Reconfiguration
.CLK ( clk_100 ) , //1-bit input: Clock input
.CSIB ( icap_en_n2 ) , //1-bit input: Active-Low ICAP enable
.I ( icap_dt ) , //32-bit input: Configuration data inputbus
.RDWRB ( icap_rd_wr2 ) //1-bit input: Read/Write Select input 1:read 0:write
);

上图是ug570有的,可以知道发送的顺序,各个命令字的意思也清楚。notes是要注意的,这些命令字是需要改变顺序的,如提示page131,入下图,关系也是明确的。

到此,几乎可以做好了,但是还有一个关键步骤,需要通过什么样的时序将这些命令字,写入。在xilinx的网站找了很久没有找到,但是在百度里找到了参考链接 http://www.elecfans.com/emb/fpga/20140124334884_2.html , 里面就提到
一个周期拉低读或写,第二个时钟周期拉低使能,第三个时钟开始发送命令字和相应的参数。如果能够画一个波形可能更清晰了。
3:如果已将mcs文件烧录到flash中,此时再将工程2的bit文件通过jtag下载到FPGA中,可以发现没用多长的时间,led的显示状态是flash中的配置文件。
单独关于ICAPE3的使用到此结束。
icape3 的使用的更多相关文章
随机推荐
- BZOJ 1875 【SDOI2009】 HH去散步
题目链接:HH去散步 如果不考虑不能走上一次走的边的话,这道题就是一个矩乘的裸题. 现在有了这个条件其实也很好做.我们平常的矩阵都是按点建的,\(A_{i,j}\)表示从第\(i\)个点走到第\(j\ ...
- [转]Cryengine渲染引擎剖析
转篇Napoleon314 大牛的分析,排版好乱,见谅,耐心读,这是个好东西,注意看他自己的实现,是个技术狂人啊,Ogre焕发次时代的光芒啊~~~努力 ------------------------ ...
- javascript之分时函数
在一些开发场景中,我们可能会一次性向文档中注入上千个节点,在短时间内向浏览器中大量添加DOM节点可能会让浏览器吃不消,结果往往会让浏览器卡顿或吃不消,解决方案之一便是使用分时函数(timeChunk) ...
- Angular单元测试
https://angular.github.io/protractor/#/http://jasmine.github.io/2.4/introduction.html 测试程序有两种主要方法:端对 ...
- Android Studio 中实现高德定位并获取相应信息
Android开发项目时常常会遇到定位这个功能,所以写了这篇博客,今天主要讲的高德地图的定位并获取相应信息. 首先导入高德的jar包 选中jar包右键点击 Add As Library, 在buil ...
- 随机梯度下降算法求解SVM
测试代码(matlab)如下: clear; load E:\dataset\USPS\USPS.mat; % data format: % Xtr n1*dim % Xte n2*dim % Ytr ...
- 牛客网——E进阶吧阶乘
链接:https://www.nowcoder.net/acm/contest/75/E来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32768K,其他语言65536K ...
- python 多进程——使用进程池,多进程消费的数据)是一个队列的时候,他会自动去队列里依次取数据
我的mac 4核,因此每次执行的时候同时开启4个线程处理: # coding: utf-8 import time from multiprocessing import Pool def long_ ...
- SSRS实现 矩阵列实现动态列
需求背景:按区域查询店铺的销售量和库存量,然后店铺的数据是动态的.实现类似效果如下图,其中蓝色框是动态的,店铺的数量是不确定的,可能是3个,也可能是20个. 步骤一: 步骤二: 加工后: 最后效果:
- maven 的repository index构建
1,windows -- >preferences里面选择maven,选中“Download repository index updates on startup" 2.window ...