赞
踩
近期通过Chipyard平台生成自定义的Rocket-chip处理器后,对怎么上板产生了疑惑,牵扯一些SOC、FPGA的知识不太熟练,故写此文章记录一下对FPGA配置过程的理解。
芯片的本质就是半导体+集成电路。
FPGA是基于SRAM的架构。SRAM是静态随机存取存储器,通电后,数据可以保持不变;断电后,数据会消失。FPGA重新上电后,需要重新写入配置数据(即所谓的bit流)。根据bit流载入方式的不同,可分为两大类:
FPGA上电以后首先进入配置模式(configuration),在最后一个配置数据载入到FPGA以后,进入初始化模式(initialization),在初始化完成后进入用户模式(user-mode)。在配置模式和初始化模式下,FPGA的用户I/O处于高阻态(或内部弱上拉状态),当进入用户模式下,用户I/O就按照用户设计的功能工作。
一个器件完整的配置过程将经历复位、配置和初始化等3个过程。FPGA正常上电后,当其nCONFIG管脚被拉低时,器件处于复位状态,这时所有的配置RAM内容被清空,并且所有I/O处于高阻态,FPGA的状态管脚nSTATUS和CONFIG_DONE管脚也将输出为低。当FPGA的nCONFIG管脚上出现一个从低到高的跳变以后,配置就开始了,同时芯片还会去采样配置模式(MSEL)管脚的信号状态,决定接受何种配置模式。随之,芯片将释放漏极开路(open-drain)输出的nSTATUS管脚,使其由片外的上拉电阻拉高,这样,就表示FPGA可以接收配置数据了。在配置之前和配置过程中,FPGA的用户I/O均处于高阻态。
所以配置模式取决于配置模式管脚的信号状态。
Vivado设计过程中生成的bit流文件需要通过特定的配置引脚导入到FPGA中。专用配置引脚上的不同电压级别决定了不同的配置模式。可选的配置模式有:
不管是哪种配置模式,配置数据都是存储在FPGA中的CMOS锁存器中,每次掉电后数据都会丢失,上电之后重新配置。但是选择一个片外存储器如SPI Flash存储配置数据,并设置相应的配置模式,上电后可以自动配置FPGA。
打开Vivado,运行SYNTHESIS -> IMPLEMENTATION,需要点击 Open Implemented Design,打开之后,再看左上角Tools菜单栏会发现有Edit Device Properties选项
在Configuration Modes标签中选择配置模式,可以选择多个,并且JTAG作为最基本的配置模式总会被选中。
设置配置模式会创建约束,自动添加到约束文件的末尾。
- //这条语句是选择配置模式后生成的
- set_property CONFIG_MODE <configuration_mode> [current_design]
-
-
- //这条语句是选中"Prohibit usage of the configuration pins as user I/O and persist after configuration"才会生成的
- set_property BITSTREAM.CONFIG.PERSIST YES [current_design]
-
- //设置bank电压,这两条语句要与硬件设计相符。比如,当使用JTAG配置模式时,CFGBVS设置为GND,CONFIG_VOLTAGE就必须设置为1.8
- set_property CFGBVS GND [current_design]
- set_property CONFIG_VOLTAGE 1.8 [current_design]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。