《电子技术应用》
您所在的位置:首页 > 电子元件 > 业界动态 > How to自制易灵思FPGA的FLASH 桥接文件

How to自制易灵思FPGA的FLASH 桥接文件

2022-07-29
作者:疯狂的FPGA
来源:电子技术应用专栏作家 疯狂的FPGA
关键词: FPGA

  在操作系统中,BootLoader在内核运行之前先启动,可以初始化硬件设备、建立内存空间映射图,从而按照设定启动软硬件环境,使之工作在预期状态。

  其实FPGA也是如此,在上电之后,需要有逻辑去FLASH读取数据,然后配置FPGA,使得可以正常运行我们设计的代码。

  微信图片_20220729165909.png

  FPGA FLASH的固化,可以使用AS模式,也可以采用JTAG以bridge的方式去固化。但是,提倡经济低碳的我们,为了环保与体积,非得使用一个JTAG的方式,既可以实现在线下载与Debug,也可以通过桥接完成FLASH的固化。

  不管是Altera还是Xilinx,都支持通过JTAG桥接方式对FLASH的烧录,以Altera为例,采用Quartus将sof转成jic后,直接用JTAG烧录FLASH。由于FLASH固化在上电测试或者最终产品化的时候采用,因此虽然麻烦点,但考虑到经济效益,也可以忍。其GUI界面如下:

  微信图片_20220729165929.png

  那么,骨骼精奇的易灵思,也是这样的吗?如果这样就没有下文了。。。

  1.1.易灵思FPGA通过JTAG固化Flash的方法

  易灵思的工具链神奇的将这一步到位的操作,分成了独特的2步,请见下文分解。

  微信图片_20220729165947.png

  1)首先,通过JTAG下载一个FLASH桥接的固件(bit文件),如下图所示:

  微信图片_20220729170000.png

  2)接着,选择当前设计的hex文件,并且选择使用JTAG桥接下载flash,点击开始将数据送给1)中spi_flash_loader的固件,然后它接收数据后写入到片外FLASH中。

  微信图片_20220729170013.png

  备注:这里软件默认会自动完成擦除以及写入新的固件。

  微信截图_20220729170030.png

  3)CRESET_N复位或者重新上电后,FPGA会重新从FLASH读取数据并且完成新的配置,最后FPGA按照最新的设计进行工作。

  那么,问题来了,跟Quartus II相比,这里多了spi_flash_loader的bit,这个bit官方并没有直接提供给我们,初来乍到的小伙伴也就懵逼了。

  然而现状就是:易灵思目前需要针对不同的FPGA硬件,需要自己制作FPGA的SPI_Flash_Loader启动文件,具体流程如下:

  1.2.易灵思FPGA 制作FLASH桥接文件

  整体流程:配置spi_flash_loader的IP,生成的example,然后修改相关引脚配置,具体如下:

  1)打开Efinity软件,选中JTAG SPI FLASH Loader,如下图

  微信图片_20220729170121.png

  2)输入IP名称jtag_spi_flash_loader,参数默认保持不变

  微信图片_20220729170130.png

  3)选择需要生成的Demo,不同系列FPGA不一样,Generate

  微信图片_20220729170140.png

  微信图片_20220729170150.png

  这里特别注意,前面1)中非得打开一个(任意的)工程,否则无法给你生成这个IP

  4)回到当前工程的文件目录,在ip文件夹下会找到jtag_spi_flash_loader的example,如下所示:

  微信图片_20220729170214.png

  5)这里以T35为例,我们修改一下相关文件名,如下:

  微信图片_20220729170224.png

  6)然后用Efinify软件打开工程文件:jtag_spi_flash_loader.xml

  7)删除*T20.sdc,替换为上图的*T35.sdc

  8)File→Edit Project,在Device中将FPGA型号修改为T35F324

  微信图片_20220729170237.png

  9)默认选择Update Existing Design,干掉Backup

  微信图片_20220729170245.png

  确认后完成并报错,时钟不可避免地需要重新配置,如下图:

  微信图片_20220729170258.png

  10)点击Finish打开Interafce,我们首先进行时钟rstn引脚的修改,如下:

  微信图片_20220729170308.png

  备注:这里FLASH IO刚好和T20是一样的,但是CRESET_N不一样。

  11)由于我设计的T35F324开发板使用的是12MHz的晶振,因此对PLL的输入及位置修改如下:

  微信截图_20220729172010.png

  12)Check Design,0W0E后,然后生成约束文件

  微信图片_20220729172030.png

  13)回到Efinity界面,采用template中的sdc模板(主要是时钟变了,12M PLL输入只能出来48M,出不来50M(这PLL有点弱))

  微信图片_20220729172041.png

  14)Dashboard中点击启动编译流程,软件将自动跑完新的bit。

  至此,基于我设计的T35F324开发板(12M时钟)的JTAG SPI_FLASH_Loader镜像,制作完成。如果你用了同一个系列的FPGA,基本上只需要在Interface修改引脚及时钟就可以完成新硬件的FLASH Loader的制作。

  微信图片_20220729172054.png

  1.3.所以为啥不能得更好呢??

  我不得不继续深入探讨一个问题:为什么Altera FPGA不用那么麻烦?

  既然FPGA上电后自己会从FLASH中引导程序,那么说明FPGA内部一定有时钟源。查询Altera的相关手册,得知Cyclone IV系列FPGA内部有40MHz的时钟源:

  微信图片_20220729172106.png

  同时在Quartus II也把这部分功能开放给用户用了,可在IP列表中找到,如下:

  微信图片_20220729172118.png

  备注:这里又说了最大80MHz,且不去深究了。

  于是我又去研究了Efinity的手册,我也找到了肯定的答案,如下所示T与Ti系列FPGA的内部时钟源:

  微信图片_20220729172128.png

  另外,T35软件没有开放内部osc给用户,Ti60开放内部osc了,如下(Interface中):

  微信图片_20220729172141.png

  那么我们必须要检讨,你既然有内部时钟,同时确定了型号工具相关的IO分配,那为啥这部分功能就不能做到工具链里面去呢?有完美强迫症的我再也无法入睡。。。

  问了FAE,也没能给出更好的答案,这让初学者内心受到了N点的伤害。只能说,我又看到了进步空间。,呼吁原厂,在未来软件版本的release中,尽快将jtag spi_flash_loader的功能,包含到软件中去。

  我们向往更好的明天。。。

  最后,给个图,在我自研的T35F324开发板上,下载前面jtag spi_flash_loader.bit后,再下载流水灯的hex文件,8个LED欢快地跑了起来。

  微信图片_20220729172202.png

  如果有些地方我理解的不对,也欢迎在评论区使劲的怼我,谢谢!!

  更多细节,请转crazyfpga.taobao.com(“CB电子”淘宝店铺)了解。

  对易灵思FPGA感兴趣的朋友,欢迎进FPGA讨论组交流,我们共同进步,等待“世界末日”过去……

  由于开发板并非针对学生市场,而是偏向于公司/行业用户,加之前期开发投入的巨大,以及人力物力暴涨,因此开发板价格并不会那么亲民,请大家慎重考虑。另外,从平台转过来的采购的朋友,在本帖发布一个月内,可享受88折体验价(口号:104)。

  由于群规模在短时间内超过了200人,无法再扫码入群,请有兴趣的朋友添加客服木头同学的微信,再邀请入群。

 微信图片_20220729172245.jpg



  原文链接:https://mp.weixin.qq.com/s/T2Wd8lESXGXKODR_e1oSgQ

微信截图_20220705135121.png

 电子技术应用专栏作家


更多信息可以来这里获取==>>电子技术应用-AET<<


本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。