基于FPGA的flash分区实现多功能转换(icap核)

1.前文提到通过硬件代码描述可以将程序固化到flas中,但是只能实现单一功能,无法实现多功能切换。本文通过调用ise的ip核,固化代码实现流水灯与呼吸灯的切换。

2.这次的联系,主要是为了下次的在线升级的多种功能综合做铺垫。如果只是为了实现这种转换,利用状态机也可以实现,icap可以将flash实现功能分离。实现多个功能不在需要下载器下载。

3.练习代码如下:

module	icap_ctrl(
		
		input	wire	sclk,
		input	wire	rst_n,
		input	wire	key_in
);

reg		[3:0]		cnt;
reg					ce;
reg		[15:0]		tmp_i;
wire	[15:0]		i_data;

always@(posedge sclk or negedge rst_n)		//cnt14
		if(!rst_n)
			cnt<=4'd0;
		else if(cnt==14)
			cnt<=4'd0;
		else if (ce==0)
			cnt<=cnt+1'b1;
	
always@(posedge sclk or negedge rst_n)  //ce
		if(!rst_n)
			ce<=1'b1;
		else if(cnt==14)
			ce<=1'b1;
		else if (key_in==1)
			ce<=1'b0;

always@(posedge sclk or negedge rst_n)
		if(!rst_n)
			tmp_i<=16'hffff;
		else case(cnt)
					0:	tmp_i<=16'hffff;
					1:	tmp_i<=16'haa99;
					2:	tmp_i<=16'h5566;
					3:	tmp_i<=16'h3261;
					4:	tmp_i<=16'h0000;	//
					5:	tmp_i<=16'h3281;
					6:	tmp_i<=16'h0300;	//
					7:	tmp_i<=16'h32a1;
					8:	tmp_i<=16'h0000;	//
					9:	tmp_i<=16'h32c1;
				   10:	tmp_i<=16'h030b;	//
				   11:	tmp_i<=16'h30a1;
				   12:	tmp_i<=16'h000e;
				   13:	tmp_i<=16'h2000;
				   14:	tmp_i<=16'hffff;
			  default:	tmp_i<=16'hffff;
			endcase
assign i_data={tmp_i[8],tmp_i[9],tmp_i[10],tmp_i[11],tmp_i[12],tmp_i[13],tmp_i[14],tmp_i[15],
		   tmp_i[0],tmp_i[1],tmp_i[2],tmp_i[3],tmp_i[4],tmp_i[5],tmp_i[6],tmp_i[7]};



ICAP_SPARTAN6 #(
   .DEVICE_ID(28'h4000093),     // Specifies the pre-programmed Device ID value
   .SIM_CFG_FILE_NAME("NONE")  // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation
                               // model
)
ICAP_SPARTAN6_inst (
   .BUSY(),   // 1-bit output: Busy/Ready output
   .O(),         // 16-bit output: Configuartion data output bus
   .CE(ce),       // 1-bit input: Active-Low ICAP Enable input
   .CLK(sclk),     // 1-bit input: Clock input
   .I(i_data),         // 16-bit input: Configuration data input bus
   .WRITE(1'b0)  // 1-bit input: Read/Write control input
);

endmodule

 

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Xilinx FPGA中的ICAP指的是内部配置访问端口(Internal Configuration Access Port)。根据引用\[2\],Xilinx ICAP有三个版本,分别是ICAP、ICAPE2和ICAPE3。其中,UltraScale系列对应ICAPE3,7系列对应ICAPE2,而7系列之前的产品对应ICAP。 ICAP原语可以实现FPGA中存放多个固件程序,并且应用场景也比较广泛。比如,在固件升级方案中,可以将Bootloader存放在SPI Flash的前半部分,将Application程序存放在SPI Flash的后半部分。在上电后,先运行Bootloader程序,如果在一定时间内未收到升级命令,则自动跳转到Application程序运行。如果收到升级命令,则执行升级流程,对SPI Flash的后半部分内容进行更新。这样即使升级过程中断电导致升级失败,重新上电后仍能保证Bootloader程序的完整性。另外,ICAP还可以用于多重配置的应用场景。由于FPGA逻辑资源的限制,将所有功能放在一个工程中可能会导致资源不足。因此,可以将一个庞大的FPGA工程分成多个部分,分别进行开发,并通过ICAP进行在线切换。\[3\] 总结来说,Xilinx FPGA中的ICAP原语可以实现存放多个固件程序和在线切换功能,适用于固件升级和资源利用的场景。 #### 引用[.reference_title] - *1* *2* *3* [Xilinx FPGA ICAP原语实现多重配置](https://blog.csdn.net/whik1194/article/details/130471755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值