multiboot之ICAP

目录
0.前言
1.ICAP的例化
2.ICAP指令实现
3.比特位交换
4.跳转与fallback约束
5.生成mcs镜像
6.测试demo

0.前言

multiboot作为更新程序的一种方法,在FPGA的实现方法是将两个bit文件合成为一个mcs镜像。
但是,flash默认只读取第一个从0开始的bit。要跳转到第二个bit文件时,可以用icap控制。
在这里插入图片描述

1.ICAP的例化

在这里插入图片描述

(1)使用原语:在vivado的Language template选项中可以找到标准语法,其中包括IP的调用,icap原语例化如下:

//icap核的调用
 ICAPE2 #(
      .DEVICE_ID(32'h362D093),     // Specifies the pre-programmed Device ID value to be used for simulation
                                  // purposes.
      .ICAP_WIDTH("X32"),         // Specifies the input and output data width.
      .SIM_CFG_FILE_NAME("NONE")  // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation
                                  // model.
   )
   ICAPE2_inst (
      .O(O),         // 32-bit output: Configuration data output bus
      .CLK(sys_clk),     // 1-bit input: Clock Input
      .CSIB(CE),   // 1-bit input: Active-Low ICAP Enable
      .I(I),         // 32-bit input: Configuration data input bus
      .RDWRB(WRITE)  // 1-bit input: Read/Write Select input
   );

(2)其中设备号需要查找USER GUIDE手册,如7serials-user guider.pdf,以Artix A7-35T为例
在这里插入图片描述

(3)icap的指令也可以在用户手册找到,如图:
在这里插入图片描述

2.ICAP指令实现

parameter	DUMMY_WORD	= 32'hffff_ffff;	//伪指令,不进行操作,实际上为等待状态
parameter	SYNC_WORD	= 32'haa99_5566;	//跳转指令同步字
parameter	T1WBS		= 32'h3002_0001;	//type1 写入跳转空间的字节
parameter	WBSA		= 32'h0040_0000;	//跳转空间地址,可以根据bit大小修改
parameter	T1CMD		= 32'h3000_8001;	//type1 写入的控制指令字
parameter	IPROG		= 32'h0000_000f;	//跳转到下一个程序的控制指令
parameter	T1NOOP		= 32'h2000_0000;	//中断指令

//实现指令的跳转可以使用计数器或状态机,以计数器为例

always@(posedge sys_clk or negedge sys_rst_n)
begin
if(!sys_rst_n)
	I_reg<=DUMMY_WORD;//初始状态下为等待状态
else if(work_en==1'b1)
	case(clk_cnt)
	0:	I_reg	<= DUMMY_WORD;	
	1:	I_reg	<= SYNC_WORD;	
	2:	I_reg	<= T1NOOP;		
	3:	I_reg	<= T1WBS;		
	4:	I_reg	<= WBSA;		
	5:	I_reg	<= T1CMD;
	6:	I_reg	<= IPROG;		
	7:	I_reg	<= T1NOOP;		

	default:
	I_reg<=DUMMY_WORD;		//在错误情况下进入等待状态
	endcase
else
	I_reg<=DUMMY_WORD;		//在非工作状况下进入等待状态
end

其中可以自己配置的是跳转地址,具体两个bit文件的地址可以查看prm文件

===================================
Configuration Memory information
===================================
File Format        MCS
Interface          SPIX1
Size               16M
Start Address      0x00000000
End Address        0x00FFFFFF

Addr1         Addr2         Date                    File(s)
0x00000000    0x0021728B    Apr 24 23:41:53 2020    G:/Xilinx/practice/icap/golden_imag/golden/golden.runs/impl_1/top_icap.bit
0x00800000    0x0082F093    Apr 24 23:27:51 2020    G:/Xilinx/practice/icap/updated_imag/led2/led2.runs/impl_1/a_led.bit

3.比特位交换

根据flash的读写特性,每一个byte内高低位需要互换
在这里插入图片描述
32位互换可以用赋值的方法

assign	I={	I_reg[24],I_reg[25],I_reg[26],I_reg[27],I_reg[28],I_reg[29],
			I_reg[30],I_reg[31],I_reg[16],I_reg[17],I_reg[18],I_reg[19],
            I_reg[20],I_reg[21],I_reg[22],I_reg[23],I_reg[08],I_reg[09],
            I_reg[10],I_reg[11],I_reg[12],I_reg[13],I_reg[14],I_reg[15],
            I_reg[00],I_reg[01],I_reg[02],I_reg[03],I_reg[04],I_reg[05],
            I_reg[06],I_reg[07]};

4.跳转与fallback约束

在这里插入图片描述
Golden Image是指稳定工作的镜像系统,Updata Image是指升级的功能镜像包,两个工程中都需要添加约束

//Golden Image工程中添加
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]                 //可选的压缩项
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]      //使能回读功能
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 32'h00800000 [current_design]  //update image 的起始地址
//Updata Image工程中添加
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]

5.生成mcs镜像

在这里插入图片描述
将两个工程的bit文件添加到一起,分别设置起始地址,即可生成mcs烧制到板上测试。

6.测试demo

以Arty A7-35T为例成功测试了一个完整的ICAP功能

  • 5
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值