卿小小 发表于 2022-11-18 20:33

【中科亿海微EQ6HL45开发平台测评体验】+08.ICAP测试(zmj)

<p><strong>【中科亿海微EQ6HL45开发平台测评体验】+08.ICAP测试(zmj)</strong></p>

<p>&nbsp;</p>

<p cid="n577" mdtype="paragraph">中科亿海微的FPGA重配置功能十分强大。那么重配置功能可以应对哪些场景?如何实现呢?</p>

<p cid="n927" mdtype="paragraph">在实际工程应用场景中可能要实现几个不同功能的码流,如果采用几片FPGA+Flash的方式势必会增加成本并且会使得系统变得更加复杂,而IP核ICAP正是解决这一问题的方式之一。具体是将不同的码流下载到不同的地址,利用ICAP向配置模块发送IPROG命令切换到不同的码流地址,执行其相应的功能。FPGA的重配置操作可由FPGA外部的处理器、微控制器、计算机和按键等&ldquo;智能&rdquo;终端触发。</p>

<p cid="n936" mdtype="paragraph">在应用设计中,只需在每个应用程序中例化一个IP核ICAP来实现相关命令序列即可实现Multi-Boot特性。</p>

<p>&nbsp;</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">&nbsp;</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例化代码
&nbsp; &nbsp; icap_0 &nbsp;u_icap_0(
&nbsp; &nbsp; .CLK &nbsp; &nbsp; &nbsp; &nbsp;(clk &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;),//时钟信号
&nbsp; &nbsp; .CE &nbsp; &nbsp; &nbsp; &nbsp; (icap_ce &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;),//模块选择信号
&nbsp; &nbsp; .WRITE &nbsp; &nbsp; &nbsp;(icap_wr_rd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),//读写信号
&nbsp; &nbsp; .I &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(icap_din &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),//要输入的时钟数据
&nbsp; &nbsp; .O &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(icap_dout &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;),//要输出的时钟数据
&nbsp; &nbsp; .BUSY &nbsp; &nbsp; &nbsp; (icap_busy &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;),//忙信号
&nbsp; &nbsp; .ICAP_ENA &nbsp; (1&#39;b1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ) //模块使能信号
&nbsp; &nbsp; );
//------指定multi_addr和gold_addr
localparam &nbsp; &nbsp;multi_addr = 32&#39;h100000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gold_addr &nbsp;= 32&#39;h500000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;
</pre>
</div>

<p>&nbsp;</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>&nbsp;</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">&nbsp;</p>

<h2 cid="n975" mdtype="heading">2.2 工程框架</h2>

<p cid="n959" mdtype="paragraph">原始工程的工程框架如图所示:</p>

<p cid="n959" mdtype="paragraph">&nbsp;</p>

<p></p>

<h1 cid="n993" mdtype="heading">3. 测试</h1>

<p cid="n994" mdtype="paragraph">IP核ICAP的重配置功能需要固化到QSPI-FLASH中,烧录时Flash选项需要勾选启动&ldquo;Mulboot&rdquo;,添加好原始工程码流和重配置工程码流后,点击start开始烧录。</p>

<p cid="n1035" mdtype="paragraph">烧录完成后重启开发板,通过KEY4可以启动ICAP完成FPGA的重配置功能。</p>

<p cid="n987" mdtype="paragraph">//------烧录配置</p>

<p cid="n987" mdtype="paragraph">&nbsp;</p>

<p cid="n987" mdtype="paragraph"></p>

<p cid="n987" mdtype="paragraph">&nbsp;</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">&nbsp;</p>

<p cid="n987" mdtype="paragraph">393b01f9f920f68ef3c842fbf1101cd3<br />
&nbsp;</p>

<p cid="n987" mdtype="paragraph">//------end</p>

<p>&nbsp;</p>

卿小小 发表于 2022-11-18 20:34

补充一点:ICAP的重配置功能启动后,FPGA加载重配置码流需要一小段时间。
页: [1]
查看完整版本: 【中科亿海微EQ6HL45开发平台测评体验】+08.ICAP测试(zmj)