libero ProASIC3 A3P250 JTAG-DirectC 源码分析三 dp_program_from

 

这里有个小发现,  通过 JTAG 接口 控制 A3P250 ,读取 idcode ,usercode  等等 指令 ,存在  BSDL 文件中 ;

image

 

https://ww1.microchip.com/downloads/aemdocuments/documents/fpga/ProductDocuments/BoardDesignFiles/a3p250_vq100.bsd

image

但是 我没有找到 编程 相关指令 ! 

只能  在  JTAG C代码 中 找到, 实现文档说明  JTAG-DirectC v2022.1 User Guide , 源码下载 DirectC | Microchip Technology  

 

/* General opcodes */
#define ISC_NOOP                    0x84u
#define DESELECT_ALL_TILES       0xC0u
/* Erase opcodes */              
#define ISC_ERASE                   0x85u

/* UROW opcodes */              
#define ISC_PROGRAM_UROW          0xA7u
#define ISC_READ_UROW              0xA8u
#define ISC_PROGRAM_RLOCK         0x8Cu

#define HIGHZ                        0x07u
#define BYPASS                     0xFFu
#define LDVPROP                  0xB4u
/* Factory row opcodes */
#define FACTORY_ADDRESS_SHIFT    0xF9u
#define READ_FACTORY                   0xBFu
 
#define ISC_PROGRAM              0x83u
#define ISC_VERIFY0                 0x8Du
#define ISC_VERIFY1                 0x8Eu
#define ISC_INCREMENT           0x87u
#define ISC_DATA_SHIFT           0x89u
#define ISC_ADDRESS_SHIFT   0xA9u
 

1、 好长的代码  函数  void dp_program_action(void); 

 

CORE_ENCRYPT :固件加密编程, 暂时不加密, 因此 这个暂时不关注!
CORE_SUPPORT: 我认为是  FPGA 主程序编程!
FROM_SUPPORT:FLASH ROM 编程,  A3P250 支持  1Kbits  的  FLASH  ROM!暂时 没有用到!
NVM_SUPPORT: A3P250 不支持 NVM ,  smartfusion2  支持 NVM 存储, 给 cortex-m3 内核 用的!

下面分析  CORE_SUPPORT  部分代码 :

第一步: 调用  dp_erase(); 函数进行 擦除 !

第二步:dp_program_array() 函数 执行 编程! 因为 A3P250 rows =  2300, 因此 循环 2300次!

第三步:  dp_reset_address  复位 地址, 指令是  ISC_INCREMENT = 0x87

第四步: 这里有个循环  ,  device_rows 因为 是 A3P250 ,  device_rows 初始化为 2300 , 烧录文件 header 的 Mapped rows = 0x08FC = 2300!

第五步:dp_load_row_data 加载数据,先发 指令 ISC_DATA_SHIFT = 0x89,

第六步  dp_exe_program 编程, 

第七步,判断是否发生错误,出错,则种植编程,并报告编程错误码!

第八步 地址递增 ,调用函数  dp_increment_address

 

 

 

void dp_load_row_data(void) 函数 解析 

外循环 是 4次,因为 device_SD = 4, 内循环 8次,

 

datastream_ID = 5 ;   这里指 数据块 5, 数据块5 是 FPGA 核心配置数据,A3P250 共计 2300行, 每行应该是104字节, 分成4个 SD 每个SD  26字节!
ARRAY_ROW_LENGTH =  26 ; 单位 是 字节
DataIndex = 0;每次 递增 26
 
带入函数  
dp_get_and_DRSCAN_in(5, 26, 0);
dp_get_and_shift_in( 5, 26, 0 );
 
 

 

posted on 2026-01-20 14:24  所长  阅读(12)  评论(0)    收藏  举报

导航