[其他芯片] 【国产FPGA高云GW1N-4系列开发板测评】——5、内部Flash和外部Flash程序固化测试

gs001588   2021-12-20 00:42 楼主

   【国产FPGA高云GW1N-4系列开发板测评】——5、内部Flash和外部Flash程序固化测试

 

   FPGA在功能调试过程中是把程序下载到SRAM中,断电后丢失。

   要实现断电重新上电后程序自动运行,需要将程序固化到Flash中。

   开发板使用的GW1N-4B系列FPGA,可通过内部Flash加载程序,也可通过外部Flash加载程序,通过模式选择位MODE0、MODE1来区分。外部Flash开发板上默认不焊,自己已采购并焊接,型号为华邦的W25Q64JVSIQ。在之前的开箱贴中有说过(【国产FPGA高云GW1N-4系列开发板测评】——2、补个开箱贴开发板与购买的Flash https://bbs.eeworld.com.cn/thread-1189058-1-1.html

 

   在用户手册“DK_MINI_GW1N-LV4LQ144C6I5_V1.1.pdf”中有相关内部介绍。如下图所示:

2021-12-19_007.jpg

 

   在开发板实物,MODE0、MODE1位置,及“0”、“1”设置,如下图所示。

IMG_20211211_123305_1.jpg

 

   开发板背面有管脚标示如下图,分别为1、3脚。

IMG_20211211_123455.jpg

 

    对照原理图“DK_MINI_GW1N-LV4LQ144C6I5_V1.1_Sch.pdf”中相关部分如下图,跳线帽短接1、2脚,相当于MODE1接3.3V,逻辑高电平“1”;跳线帽短接2、3脚,逻辑低电平“0”。

2021-12-19_009.jpg

 

 

    为测试如何程序固化,仍然使用LED闪灯来实现,代码如下。代码比较简单,时钟分频、LED状态翻转。

--*******************************************************************************
--*-------------------------- file ---------------                                      
--* name:  hello_led.vhd	
--* ver : A
--* date:2021-12-9
--*------------------------------------------------
--*******************************************************************************

---------- LIB  ----------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;

----------ENTITY -------------------------------------------------------------
ENTITY hello_led IS
PORT (						                                                        
-------------------------------------------------------------------------------  
--系统全局时钟 CLK
-------------------------------------------------------------------------------           
    CLK_50M:  	IN  STD_LOGIC;	--50MHz系统时钟
                       
-------------------------------------------------------------------------------  
--系统全局复位 RESET
------------------------------------------------------------------------------- 
    NRESET:   IN  STD_LOGIC;
				
-------------------------------------------------------------------------------  
--系统状态指示灯
------------------------------------------------------------------------------- 
    LED:			OUT  STD_LOGIC_VECTOR(4 DOWNTO 1));
-------------------------------------------------------------------------------

END hello_led;

-----------ARCHITECTURE-------------------------------------------------------

ARCHITECTURE MY_CODE OF hello_led IS
	
-----------------------------------------------------------------------
    SIGNAL	 COUNTER:       integer range 0 to 50000000;
    SIGNAL	 LED_Reg:       STD_LOGIC_VECTOR(3 downto 0);

--**********************************************************************************
--*****   
--**********************************************************************************
BEGIN

LED <=  LED_Reg;

PROCESS(NRESET,CLK_50M)
BEGIN
	IF (NRESET = '0') THEN
        COUNTER <= 0;
	ELSIF (RISING_EDGE(CLK_50M)) THEN
        IF (COUNTER < 50000000-1) THEN
            COUNTER <= COUNTER + 1;
        ELSE
            COUNTER <= 0;
        END IF;
	END IF;		
END PROCESS;

PROCESS(NRESET,CLK_50M)
BEGIN
	IF (NRESET = '0') THEN
        LED_Reg <= "0101";
	ELSIF (RISING_EDGE(CLK_50M)) THEN
        IF (COUNTER = 25000000-1) OR (COUNTER = 50000000-1)THEN
            LED_Reg <= NOT LED_Reg;
        END IF;
	END IF;		
END PROCESS;

END MY_CODE;

 

    程序工程中使用了4个LED灯,LED(1)到LED(4)分别对应开发板实物的D7、D8、D9、D20,开发板上D7、D9在左边,D8、D20在右边。对照原理图如下图,可以知到LED灯是低电平“0”点亮。

2021-12-20_012.jpg

 

   为区别内部Flash程序和外部Flash程序效果,程序代码稍做区分。

   给内部Flash烧写程序的代码第67行,LED初始状态“0101”,表示复位时右边的D8、D20点亮,左边的D7、D9灭状态。每秒左边、右边的两个灯分别交替亮灭一次。

2021-12-19_010.jpg

 

   给外部Flash烧程序的代码第67行,LED初始状态“1100”,表示复位时上边的D7、D8点亮,下边的D9、D20灭状态。每秒上边、下边的两个灯分别交替亮灭一次。

2021-12-19_011.jpg

 

   烧写内部Flash,首先将MODE0、MODE1分别设置为“0”、“0”,使用工程“hello_led1”生成的目标文件“hello_led.fs”。双击“Operation”列的下面的方式选项,弹出的“Device configuration”窗口,访问模式选择内嵌Flash方式,操作方式选择内嵌Flash擦除、编程、验证(也可以选择内嵌Flash擦除、编程,不需要验证,这里选验证只是个人习惯,不选验证一般也不会出问题)。设置完毕,保存设置,关闭器件配置窗口。最后先“程序/配置”按钮开始向内部Flash烧录程序。

2021-12-19_001.jpg

 

   烧录过程中擦除和编程都很快,不足5秒。

2021-12-19_002.jpg

 

   在最后的验证阶段用了三十多秒。

2021-12-19_003.jpg

 

   烧录完毕,在输出窗口有相关信息提示,具体内容无需比较明确,无需过多解释。值得注意的是最后一条,用时40.82秒,主要花在了验证阶段。

2021-12-19_004.jpg

   烧录完成,按开发板左下角的复位按键SW5(目前实际为重配置功能),可看到左边、右边的两个灯分别每秒交替亮灭一次,与预期效果一致。

   至此,内部Flash程序固化功能实现。

 

   烧写外部Flash,将MODE0、MODE1分别设置为“1”、“1”,使用工程“hello_led2”生成的目标文件“hello_led.fs”。双击“Operation”列的下面的方式选项,弹出的“Device configuration”窗口,访问模式选择外部Flash方式,操作方式选择外部Flash擦除、编程、验证通过GAO-Bridge(与上面相同,选择验证项,纯性个人习惯)。

2021-12-19_005.jpg

 

   整个烧录过程用时9.52秒。单纯的擦除、编程两个步骤,内部Flash要快一些;加上验证后,外部Flash要快些。

2021-12-19_006.jpg

   烧录完成,将MODE0、MODE1分别设置为“0”、“1”,按开发板左下角的复位按键SW5(目前实际为重配置功能),可看到上边、下边的两个灯分别每秒交替亮灭一次,与预期效果一致。

   至此,外部部Flash程序固化功能实现。

 

   从按复位按键SW5到FPGA正式执行程序,使用内部Flash要比外部Flash用时短一些,具体原因未作研究。

 

DK_MINI_GW1N-LV4LQ144C6I5_V1.1_Sch.pdf (122.28 KB)
(下载次数: 12, 2021-12-19 23:53 上传)

DK_MINI_GW1N-LV4LQ144C6I5_V1.1.pdf (939.7 KB)
(下载次数: 6, 2021-12-19 23:53 上传)


 

本帖最后由 gs001588 于 2021-12-20 00:47 编辑

回复评论 (4)

在外部Flash器件选择列表中没找到 W25Q64JVSIQ,需要选 W25Q64BV

点赞  2021-12-20 02:22

整的不错

用内部Flash要比外部Flash用时短一些这比较正常,

 

华邦的W25Q64JVSIQ是64Mb FLASH 存储器

好像价格下来了,几元一片

 

点赞  2021-12-20 07:31

学习一下

点赞  2021-12-20 08:17

测试的很详细。楼主还可以使用一种自动模式切换启动方式。这个可以自己研究一下

没有什么不可以,我就是我,不一样的烟火! 
点赞  2021-12-20 08:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复