当前位置: 首页 > news >正文

FPGA开发流程初识

FPGA 的开发流程可知,在 FPGA 开发的过程中会产生很多不同功能的文件,为了方便随时查找到对应文件,所以在开始开发设计之前,我们第一个需要考虑的问题是工程内部各种文件的管理。如 果不进行文件分类,而是将所有文件存放在一起,非常不易于后期文件的查找、管理和移植。下面我们就开始讲解我们所有工程文件的统一管理模式。、
文件夹名功能说明
doc存放项目开发过程中的辅助文档,如波形图、流程图、设计说明等
prj存放项目工程文件,如 Quartus/Vivado 工程文件、约束文件(XDC/SDC)、顶层配置等
rtl存放 RTL(Register Transfer Level)级代码,如 Verilog/VHDL 源码模块
sim存放仿真文件,包括测试平台 testbench、仿真脚本等

 接下来我们只讲一篇简单的流程应用作为举例。

“点亮 LED”实验是使用的XC7A100TFGG484-2I、XC7A35TFGG484-2I、XC7A200TFBG484-2I的KEY0 按键来控制 LED0 灯亮灭。按键没有被按下时,LED0 灯保持常灭;当按键 KEY0 被按下时, LED0 灯被点亮;当按键 KEY0 被松开时, LED0 灯被被熄灭。
发光二极管的原理图,LED0 LED3 4 个发光二极管的阴极分别连到 S8050 NPN三极管)的集电极上,阳极都与 3.3V 电压相连,三极管的基极分别与 FPGA 相连,这是由于 FPGA IO口的电压只有 1.3 5V ,电压较低,所以此处连接三极管是为了起到放大电压的作用。这样就可以通过改变三极管的状态来控制 LED 的亮灭。当 FPGA 输出到为高电平时,三极管导通, LED 灯亮;当 FPGA 输出到为低电平时,三极管截止,LED 灯灭。原理图中 LED 与三极管之间的电阻起到限流作用。
更多的硬件内容在我的硬件篇当中,不懂的话可以去看看。
因此我们可以产生这样的一个波形就能解决问题,FPGA更像是一切问题回归到波形。
因此我们的程序写的也非常的简单。
module led( input key, output led 
);assign led = ~key; endmodule

之后我们就进行仿真就行,也是非常的简单,就是要针对上述的代码写个应用实例,非常像LINUX中的内核跟用户,如果你之前只会LINUX系列的主控的话,就这样去理解就好了。如下所示代码。

 `timescale 1ns / 1ns //仿真单位/仿真精度module tb_led(); reg key;wire led;initial beginkey <= 1'b1; //按键上电默认高电平#200 //延迟 200nskey <= 1'b1; //按键没有被按下#1000 key <= 1'b0; //按键被按下#600 key <= 1'b1; #1000 key <= 1'b0;
endled u_led(.key (key),.led (led)
);
endmodule

接着我们通过Modelsim 软件来进行仿真。

最后回到我们的软件芯片平台,还是上述那个代码。

module led( 
 input key, 
 output led 
);

 assign led = ~key; 
 endmodule

将文件工程加入进去即可。
因此,你要针对代码区增加你的硬件描述。
注意, Vivado 的约束文件是以“ .xdc ”为后缀的文本文件,其中存储的是一条条的 xdc 约束命令。
我们双击打开 led.xdc 文件,开始对工程进行约束。约束一般分为两种,一种是 IO 管脚的约束,另外
一种是对时序进行约束。我们先来看下 IO 管脚的约束,约束语句如下:
#IO 管脚约束
set_Property -dict {PACKAGE_PIN T4 IOSTANDARD LVCMOS15} [get_ports key]
set_Property -dict {PACKAGE_PIN V9 IOSTANDARD LVCMOS15} [get_ports led]

 之后就是程序固化了。

当我们调试好一个工程后我们不能每次上电都要去下载一次代码,那样显得操作太麻烦。为了能够让工程上电就能运行,所以我们还需要最后一个步骤就是生成固化文件,然后将文件固化到板载 flash 中去,这样上电后程序就能启动。这里我们向读者提供三种方法固化工程,在生成固化文件之前我们先打开我们的工程时序约束文件,在时序约束文件里添加这样一段原语:
程序固化 = 把 bitstream 文件烧进外部 Flash,让 FPGA 上电即加载,永久保存配置。

FPGA 芯片本身是SRAM 架构,上电后内容全丢,每次必须加载配置文件(bitstream)才能工作。

在开发阶段,我们使用 JTAG 下载临时运行(掉电就没了);

在产品部署阶段,就需要将 bitstream 固化进外部 Flash,上电自动加载。

FPGA → 配置时钟 CCLK  
FPGA → 配置数据 DIN/D0  
FPGA ← 状态监测 DONE/INIT_B

因此我们添加如下代码

set_Property CFGBVS VCCO [current_design]
配置引脚电压参考源为 VCCO
set_Property CONFIG_VOLTAGE 3.3 [current_design]
设置 FPGA 配置电压为 3.3V
set_Property BITSTREAM.GENERAL.COMPRESS true [current_design]
启用 bitstream 压缩
set_Property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
设置 FPGA 从 Flash 加载配置数据的速率为 50 Mbps
set_Property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
配置使用 Quad SPI 模式(4线 SPI)加载 bitstream
set_Property BITSTREAM.CONFIG.SPI_FALL_EDGE Yes [current_design]
在 SPI 的下降沿采样数据

相关文章:

  • WPF 图片文本按钮 自定义按钮
  • 人工智能华迪杯比赛项目推荐
  • xcode 16 遇到contains bitcode
  • 深度剖析塔能科技精准节能方案:技术创新与实践价值
  • 人爱科技-RACRM客户管理系统介绍
  • 如何开启远程桌面连接外网访问?异地远程控制内网主机
  • Javashop新零售电商系统:构建智能零售生态的终极解决方案
  • 【计算机网络】现代网络技术核心架构与实战解析
  • 路由与OSPF学习
  • Collection集合,List集合,set集合,Map集合
  • “该虚拟机似乎正在使用中“
  • 全面解析 classification_report:评估分类模型性能的利器
  • Neo4j社区版在win下安装教程(非docker环境)
  • SQL注入漏洞中会使用到的函数
  • 2025.04.23【探索工具】| STEMNET:高效数据排序与可视化的新利器
  • 使用Geotools实现将Shp矢量文件加载SLD并合并图例生成-以湖南省周边城市为例
  • 手写深拷贝函数
  • 【C语言-选择排序算法】实现对十个数进行排序
  • ubuntu24设置拼音输入法,解决chrome不能输入中文
  • 排序(C)
  • 重庆一幼儿园回应招聘硕士幼教:统一标准,江北区学前教育岗的硬性要求
  • 王毅将出席中国一中亚外长第六次会晤、金砖国家外长会晤和第十五次金砖国家安全事务高级代表会议
  • 涡虫首上太空,神舟二十号任务将开展3项生命科学实验
  • 七大外贸省市,靠什么撑起一季度的出口?
  • 光影连接世界,中国企业出海绘就城市新名片
  • 执政将满百日,特朗普政府面临国内“三重暴击”