【中科亿海微EQ6HL45开发平台测评体验】+08.ICAP测试(zmj)
<p><strong>【中科亿海微EQ6HL45开发平台测评体验】+08.ICAP测试(zmj)</strong></p><p> </p>
<p cid="n577" mdtype="paragraph">中科亿海微的FPGA重配置功能十分强大。那么重配置功能可以应对哪些场景?如何实现呢?</p>
<p cid="n927" mdtype="paragraph">在实际工程应用场景中可能要实现几个不同功能的码流,如果采用几片FPGA+Flash的方式势必会增加成本并且会使得系统变得更加复杂,而IP核ICAP正是解决这一问题的方式之一。具体是将不同的码流下载到不同的地址,利用ICAP向配置模块发送IPROG命令切换到不同的码流地址,执行其相应的功能。FPGA的重配置操作可由FPGA外部的处理器、微控制器、计算机和按键等“智能”终端触发。</p>
<p cid="n936" mdtype="paragraph">在应用设计中,只需在每个应用程序中例化一个IP核ICAP来实现相关命令序列即可实现Multi-Boot特性。</p>
<p> </p>
<h1 cid="n792" mdtype="heading">1. ICAP概述</h1>
<p cid="n1026" mdtype="paragraph">实现多个功能的程序依据不同的地址分配统一固化到QSPI-FLASH中,当外部指令启动重配置功能时,依据设定的地址检索并加载对应的程序。</p>
<p cid="n838" mdtype="paragraph">//------ICAP手册</p>
<p cid="n838" mdtype="paragraph"></p>
<p cid="n838" mdtype="paragraph"> </p>
<h2 cid="n839" mdtype="heading">1.1 IP核ICAP端口说明</h2>
<p cid="n938" mdtype="paragraph">IP核ICAP直接调用即可,无额外的参数设置。</p>
<p cid="n950" mdtype="paragraph">ICAP模块端口说明:</p>
<p></p>
<div class="parsedown-markdown">
<pre style="background:#555; padding:10px; color:#ddd !important;">
//------ICAP例化代码
icap_0 u_icap_0(
.CLK (clk ),//时钟信号
.CE (icap_ce ),//模块选择信号
.WRITE (icap_wr_rd ),//读写信号
.I (icap_din ),//要输入的时钟数据
.O (icap_dout ),//要输出的时钟数据
.BUSY (icap_busy ),//忙信号
.ICAP_ENA (1'b1 ) //模块使能信号
);
//------指定multi_addr和gold_addr
localparam multi_addr = 32'h100000 ,
gold_addr = 32'h500000 ;
</pre>
</div>
<p> </p>
<p></p>
<h2 cid="n843" mdtype="heading">1.2 IP核ICAP接口协议</h2>
<p cid="n845" mdtype="paragraph">IP核ICAP接口协议如图所示:(工程代码中使用的是3byte寻址模式,0x5566)</p>
<p cid="n845" mdtype="paragraph"></p>
<h2 cid="n1021" mdtype="heading">1.3 关于multi_addr和gold_addr的说明</h2>
<p cid="n1023" mdtype="paragraph">在IP核ICAP中,multi_addr和gold_addr这两个地址的功能十分重要,它们是FPGA重配置功能的关键参数。</p>
<p cid="n1024" mdtype="paragraph">将原始码流和重配置码流统一下载烧录到QSPI-FLASH中。原始码流的地址和重配置码流的地址是如何分配以及与时序中的Multi-Boot地址和Golden-Boot地址之间是什么关系呢?下面详细说明。</p>
<pre style="background:#555; padding:10px; color:#ddd !important;">
//------Multi-Boot地址和Golden-Boot地址说明:
a.在原始工程中例化IP核ICAP,代码中指定multi-addr为0x100_000和golden-addr为0x500_000。
b.烧录时原始码流地址为0x000000,重配置码流地址为0x500000。
c.原始码流里面包含icap功能,上电后会首先运行此码流,在下载界面中它的地址可以由用户来指定。
d.当执行ICAP功能后,首先检索multi-addr地址。如果该地址拥有有效的码流则会执行重配置码流的功能,此时不会再去寻找Golden地址;如果该地址无有效码流则会跳转并检索golden-addr地址。对于不同开发者来讲,理论上可以在下载界面中加载多个码流利用icap进行跳转。
//------从码流运行角度讲
a.在此次功能测试中,烧录时的重配置码流地址与代码中golden-addr一致。
b.当ICAP功能启动后会先跳转到multi-addr,此时找不到码流会等待一段时间跳出,之后会跳转到Golden-addr继续寻找码流,最后启动执行重配置码流。
//------从代码功能角度分析
a.原始工程实现了LED流水灯功能,按键KEY1为复位,按键KEY4为重配置启动按钮。
b.当按下按键KEY4后,重配置工程实现了LED呼吸灯,并且扩展接口点亮了彩条灯。</pre>
<p> </p>
<h1 cid="n869" mdtype="heading">2. 工程文件</h1>
<h2 cid="n871" mdtype="heading">2.1 功能设计</h2>
<p cid="n969" mdtype="paragraph">FPGA工程包括原始工程(包含IP核ICAP)和重配置工程。</p>
<ul cid="n965" data-mark="*" mdtype="list">
<li cid="n970" mdtype="list_item">
<p cid="n971" mdtype="paragraph">原始工程功能设计:实现LED流水灯功能,按键KEY1为复位,按键KEY4为重配置启动按钮。</p>
</li>
<li cid="n974" mdtype="list_item">
<p cid="n972" mdtype="paragraph">重配置工程功能设计:使用之前的LED呼吸灯工程,添加了彩条灯功能。</p>
</li>
</ul>
<p cid="n957" mdtype="paragraph">详细工程参考附件。</p>
<p cid="n979" mdtype="paragraph">//------原始工程led_prj_v1</p>
<p cid="n1109" mdtype="paragraph"></p>
<p cid="n1111" mdtype="paragraph">//------重配置工程rtc_prj</p>
<p cid="n979" mdtype="paragraph"></p>
<p cid="n979" mdtype="paragraph"> </p>
<h2 cid="n975" mdtype="heading">2.2 工程框架</h2>
<p cid="n959" mdtype="paragraph">原始工程的工程框架如图所示:</p>
<p cid="n959" mdtype="paragraph"> </p>
<p></p>
<h1 cid="n993" mdtype="heading">3. 测试</h1>
<p cid="n994" mdtype="paragraph">IP核ICAP的重配置功能需要固化到QSPI-FLASH中,烧录时Flash选项需要勾选启动“Mulboot”,添加好原始工程码流和重配置工程码流后,点击start开始烧录。</p>
<p cid="n1035" mdtype="paragraph">烧录完成后重启开发板,通过KEY4可以启动ICAP完成FPGA的重配置功能。</p>
<p cid="n987" mdtype="paragraph">//------烧录配置</p>
<p cid="n987" mdtype="paragraph"> </p>
<p cid="n987" mdtype="paragraph"></p>
<p cid="n987" mdtype="paragraph"> </p>
<p cid="n1000" mdtype="paragraph">//------功能视频</p>
<pre style="background:#555; padding:10px; color:#ddd !important;">
//------功能视频说明:
a.原始工程实现了LED流水灯功能,按键KEY1为复位,按键KEY4为重配置启动按钮。
b.当按下按键KEY4后,重配置工程实现了LED呼吸灯,并且扩展接口点亮了彩条灯。</pre>
<p cid="n987" mdtype="paragraph"> </p>
<p cid="n987" mdtype="paragraph">393b01f9f920f68ef3c842fbf1101cd3<br />
</p>
<p cid="n987" mdtype="paragraph">//------end</p>
<p> </p>
补充一点:ICAP的重配置功能启动后,FPGA加载重配置码流需要一小段时间。
页:
[1]