首页 > 其他分享 >ICAP和在线升级

ICAP和在线升级

时间:2024-03-27 12:23:08浏览次数:39  
标签:RD PP wire Slave 在线 ICAP 升级 flag data

ICAP

描述:

通过指定顺序向原语写入地址,以完成FPGA从指定存储器读取数据的目的;(此处是需要反转的)

Opcode:

Opcode的物理意义是对用flash的读命令代码,对应镁光的一般是0x03。

地址分为:

起始地址低位+起始地址高位

回调地址低位+回调地址高位

assign    i_crop    =    {i_data[8],i_data[9],i_data[10],i_data[11],i_data[12],i_data[13],i_data[14],i_data[15],i_data[0],i_data[1],i_data[2],i_data[3],i_data[4],i_data[5],i_data[6],i_data[7]};
parameter    DUM_WORD        =    16'hFFFF;
parameter    SYNC_WORD1      =    16'hAA99;
parameter    SYNC_WORD2      =    16'h5566;
parameter    GEN_WORD1       =    16'h3261;
parameter    LOW_ADDR        =    16'h0000;
parameter    GEN_WORD2       =    16'h3281;
parameter    HIG_ADDR        =    16'h0310;
parameter    GEN_WORD3       =    16'h32A1;
parameter    LOW_ADDR_BACK   =    16'h0000;
parameter    GEN_WORD4       =    16'h32C1;
parameter    HIG_ADDR_BACK   =    16'h0300;
parameter    GEN_CMD_WORD    =    16'h30A1;
parameter    IPROG_CMD       =    16'h000E;
parameter    NOP_CMD         =    16'h2000;

 

笔记:SP6

在线升级之ICAP,ISP,BIN,HEX,MCS_icap ip核 flash读写-CSDN博客

代码:

1、DEVICE_ID:不同芯片的DEVICE_ID不相同,在使用该原语时,一定要查找对用芯片的ID,具体查找的数据手册UG380 ;
2、SIM_CFG_FILE_NAME:仿真使用,默认即可。
3、BUSY:原语对应的忙信号
4、O:配置数据的输出
5、CE:原语的使能信号,低电平有效
6、CLK:原语的时钟信号
7、I:原语配置数据的输入信号
8、WRITE:读写原语的使能信号,低电平有效

ICAP_SPARTAN6 #(
      .DEVICE_ID(0'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(BUSY),   // 1-bit output: Busy/Ready output
      .O(O),         // 16-bit output: Configuartion data output bus
      .CE(CE),       // 1-bit input: Active-Low ICAP Enable input
      .CLK(CLK),     // 1-bit input: Clock input
      .I(I),         // 16-bit input: Configuration data input bus
      .WRITE(WRITE)  // 1-bit input: Read/Write control input
   );

   // End of ICAP_SPARTAN6_inst instantiation
icap_delay Flash_ICAP_WAIT_inst0(
    .sclk                    ( Sys_clk     ),
    .rst                     ( Rst_P       ),
    .rx_flag                 ( rx_done     ),
    .rx_data                 ( data_receive),

    .icap_flag               ( icap_flag   ),
    .led                     ( led         )
);

icap_ctrl Flash_ICAP_CTL_inst0(
    .sclk                    ( Sys_clk      ),
    .rst_n                   ( Rst_n        ),
    .pi_flag                 ( icap_flag    )
);
module Flash_top (
    input   wire            Sys_clk,
    input   wire            Rst_n  ,
    input   wire            rx     ,
    output  wire            tx     ,
    output  wire            Slave_CLK     ,
    output  wire            Slave_CS_N    ,
    output  wire            Slave_data_out,
    input   wire            Slave_data_in ,
    output  wire            led
);
    //rx
            wire [7:0]      data_receive;
            wire            rx_done     ;
    //tx
            wire [7:0]      tx_data_in  ;
            wire            uart_en     ;
            wire            done_flag   ;
    //SE
            wire            SE_flag          ;
            wire [23:0]     SE_ADDR          ;
            wire            SE_Slave_CLK     ;
            wire            SE_Slave_CS_N    ;
            wire            SE_Slave_data_out;
    //PP
            wire            PP_flag          ;
            wire [23:0]     PP_ADDR          ;
            wire            PP_WR_EN         ;
            wire [7:0]      PP_WR_DATA       ;
            wire            PP_Slave_CLK     ;
            wire            PP_Slave_CS_N    ;
            wire            PP_Slave_data_out;
    //RD
            wire            RD_flag          ;
            wire [23:0]     RD_ADDR          ;
            wire [10:0]     RD_data_length   ;
            wire            FIFO_RD_EN       ;
            wire            FIFO_RD_ready    ;
            wire [7:0]      RD_DATA          ;
            wire            RD_Slave_CLK     ;
            wire            RD_Slave_CS_N    ;
            wire            RD_Slave_data_out;
    //ICAP
            wire            icap_flag        ;
            wire            Rst_P            ;
    assign Rst_P = ~Rst_n;
tx_driver tx_driver_inst0(
    .Sys_clk                 ( Sys_clk          ),
    .Rst_n                   ( Rst_n            ),
    .data_in                 ( tx_data_in       ),
    .uart_en                 ( uart_en          ),

    .data_out                ( tx               ),
    .done_flag               ( done_flag        )
);
rx_teach rx_teach_inst0(
    .Sys_clk                 ( Sys_clk           ),
    .Rst_n                   ( Rst_n             ),
    .data_in                 ( rx                ),

    .data_receive            ( data_receive      ),
    .rx_done                 ( rx_done           )
);
Flash_CTL Flash_CTL_inst0(
    .Sys_clk                 ( Sys_clk           ),
    .Rst_n                   ( Rst_n             ),
    .rx_done                 ( rx_done           ),
    .data_receive            ( data_receive      ),
    .done_flag               ( done_flag         ),
    .SE_Slave_CLK            ( SE_Slave_CLK      ),
    .SE_Slave_CS_N           ( SE_Slave_CS_N     ),
    .SE_Slave_data_out       ( SE_Slave_data_out ),
    .PP_Slave_CLK            ( PP_Slave_CLK      ),
    .PP_Slave_CS_N           ( PP_Slave_CS_N     ),
    .PP_Slave_data_out       ( PP_Slave_data_out ),
    .FIFO_RD_ready           ( FIFO_RD_ready     ),
    .RD_DATA                 ( RD_DATA           ),
    .RD_Slave_CLK            ( RD_Slave_CLK      ),
    .RD_Slave_CS_N           ( RD_Slave_CS_N     ),
    .RD_Slave_data_out       ( RD_Slave_data_out ),

    .Slave_CLK               ( Slave_CLK         ),
    .Slave_CS_N              ( Slave_CS_N        ),
    .Slave_data_out          ( Slave_data_out    ),
    .tx_data_in              ( tx_data_in        ),
    .uart_en                 ( uart_en           ),
    .SE_flag                 ( SE_flag           ),
    .SE_ADDR                 ( SE_ADDR           ),
    .PP_flag                 ( PP_flag           ),
    .PP_ADDR                 ( PP_ADDR           ),
    .PP_WR_EN                ( PP_WR_EN          ),
    .PP_WR_DATA              ( PP_WR_DATA        ),
    .RD_flag                 ( RD_flag           ),
    .RD_ADDR                 ( RD_ADDR           ),
    .RD_data_length          ( RD_data_length    ),
    .FIFO_RD_EN              ( FIFO_RD_EN        )
);
Flash_SE Flash_SE_inst0(
    .Sys_clk                 ( Sys_clk           ),
    .Rst_n                   ( Rst_n             ),
    .SE_flag                 ( SE_flag           ),
    .SE_ADDR                 ( SE_ADDR           ),
 
    .Slave_data_out          ( SE_Slave_data_out ),
    .Slave_CS_N              ( SE_Slave_CS_N     ),
    .Slave_CLK               ( SE_Slave_CLK      )
); 
// flash_se flash_se_inst0(
//     .sclk                    ( Sys_clk    ),
//     .rst                     ( Rst_n      ),
//     .se_flag                 ( SE_flag    ),
//     .se_addr                 ( SE_ADDR    ),

//     .sck                     ( SE_Slave_CLK       ),
//     .cs_n                    ( SE_Slave_CS_N      ),
//     .sdi                     ( SE_Slave_data_out  )
// );
Flash_PP Flash_PP_inst0( 
    .Sys_clk                 ( Sys_clk           ),
    .Rst_n                   ( Rst_n             ),
    .PP_flag                 ( PP_flag           ),
    .PP_ADDR                 ( PP_ADDR           ),
    .WR_EN                   ( PP_WR_EN          ),
    .WR_DATA                 ( PP_WR_DATA        ),
 
    .Slave_data_out          ( PP_Slave_data_out ),
    .Slave_CS_N              ( PP_Slave_CS_N     ),
    .Slave_CLK               ( PP_Slave_CLK      )
); 
Flash_RD Flash_RD_inst0( 
    .Sys_clk                 ( Sys_clk           ),
    .Rst_n                   ( Rst_n             ),
    .RD_flag                 ( RD_flag           ),
    .RD_ADDR                 ( RD_ADDR           ),
    .RD_data_length          ( RD_data_length    ),
    .Slave_data_in           ( Slave_data_in     ),
    .FIFO_RD_EN              ( FIFO_RD_EN        ),
 
    .Slave_CLK               ( RD_Slave_CLK      ),
    .Slave_CS_N              ( RD_Slave_CS_N     ),
    .Slave_data_out          ( RD_Slave_data_out ),
    .FIFO_RD_ready           ( FIFO_RD_ready     ),
    .RD_DATA                 ( RD_DATA           )
);

icap_delay Flash_ICAP_WAIT_inst0(
    .sclk                    ( Sys_clk     ),
    .rst                     ( Rst_P       ),
    .rx_flag                 ( rx_done     ),
    .rx_data                 ( data_receive),

    .icap_flag               ( icap_flag   ),
    .led                     ( led         )
);

icap_ctrl Flash_ICAP_CTL_inst0(
    .sclk                    ( Sys_clk      ),
    .rst_n                   ( Rst_n        ),
    .pi_flag                 ( icap_flag    )
);
endmodule
View Code

这个原语在后续的芯片信号中升级为:

ICAPE2

和ICAP的操作顺序是不同的。

可参考转载:FPGA中ICAP原语的使用——Multiboot功能的实现_icap源语-CSDN博客

整体Flash升级操作步骤:

参考之前写的笔记:

在线升级之ICAP,ISP,BIN,HEX,MCS_icap ip核 flash读写-CSDN博客

1.JTAG的方式烧入Flash读写擦除程序;

2.通过上位机软件将BIN文件烧入Flash中指定好的地址(步骤1烧入的程序接受并处理);

Flash操作和ICAP相关代码:

 

标签:RD,PP,wire,Slave,在线,ICAP,升级,flag,data
From: https://www.cnblogs.com/VerweileDoch/p/18098687

相关文章

  • pageoffice6控制在线打开的Excel编辑区域(局部编辑)
    转发:控制Excel编辑区域(局部编辑)#控制Excel编辑区域(局部编辑)本示例关键代码的编写位置Vue+Springboot注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。在实际项目开发中,以下场景可能会用到Excel局部编辑......
  • 一套集群实时在线扩容为两套集群方案
    一套集群实时在线扩容为两套集群方案解决问题:当一套集群A承担不了业务压力,需要在A集群在线情况下,扩出来一套与A集群完全一样的B集群,之后从业务层面控制A和B各自承担原A承担的一半业务压力。1、配置A集群1.1A集群创建用户并赋权selectfrompg_userwhere;......
  • 【https】如何让http升级成https
    1、获取SSL证书:SSL证书是用于加密服务器与客户端之间通信的公钥证书。你需要从可信的证书颁发机构(CA)购买SSL证书。或者登录joyssl官网输入Invitation码230915即可免费获取SSL证书。根据你的需求,可以选择不同类型的证书,如单域名证书、多域名证书或通配符证书。2、生成CSR......
  • 深入在线文档系统的 MarkDown/Word/PDF 导出能力设计
    深入在线文档系统的MarkDown/Word/PDF导出能力设计当我们实现在线文档的系统时,通常需要考虑到文档的导出能力,特别是对于私有化部署的复杂ToB产品来说,文档的私有化版本交付能力就显得非常重要,此外成熟的在线文档系统还有很多复杂的场景,都需要我们提供文档导出的能力。那么本文就......
  • 中国国内怎么使用订阅升级Duolingo多邻国plus?多邻国使用教程
    多邻国Duolingo合租平台,环球巴士首单9折优惠码:110072多邻国Duolingo是什么,能用来做什么?众所周知,多邻国考试的性价比非常高,不仅考试时间短,出分也很快,国际认可度越来越高。不过要注意的是,虽然相比托福和雅思,多邻国的考试难度有所降低,但依旧需要同学们投入大量时间和精力备考,想要......
  • PTA基础编程题目集 6-10 阶乘计算升级版
    阶乘计算升级版本题要求实现一个打印非负整数阶乘的函数。函数接口定义:voidPrint_Factorial(constintN);其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalidinput”。裁判测试程序样例:#include<stdio.h>......
  • ssm基于Vue.js的在线购物系统的设计与实现论文
    毕业设计(论文)在线购物系统学院专业班级学号用户姓名指导教师完成日期年月日摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于在线购物系统当然也不能排除在外,随着网络技术的不断成熟,带动了在线购物系统,它彻......
  • 基于ssm的新能源汽车在线租赁管理系统—文档
    新能源汽车在线租赁是以实际运用为开发背景,运用软件工程开发方法,采用SSM技术构建的一个管理系统。整个开发过程首先对软件系统进行需求分析,得出系统的主要功能。接着对系统进行总体设计和详细设计。总体设计主要包括系统总体结构设计、系统数据结构设计、系统功能设计和系统安......
  • OpenAI创始人Sam独家专访!GPT5升级时间确定!揭秘OpenAI内幕
    原文链接:OpenAI创始人Sam独家专访!GPT5升级时间确定!揭秘OpenAI内幕3月25日,LexFridman与SamAltman进行了一场深度对话,这次采访持续了近两个小时,可以说是一次全面而深入的交流。在这次对话中,他们几乎触及了当前科技界最为关注的几个热点话题。SamAltman针对GPT-5、Sora......
  • 【干货】Apache DolphinScheduler2.0升级3.0版本方案
    升级背景因项目需要使用数据质量模块功能,可以为数仓提供良好的数据质量监控功能。故要对已有2.0版本升级到3.0版本以上,此次选择测试了3.0.1和3.1.1两个版本,对进行同数据等任务调度暂停等操作测试,最后选择3.0.1版本原因:1.3.1.1在测试sql任务时,同时启动上百sql任务时,会出......