FPGA开发流程初识

news2025/5/17 15:36:15
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 begin
 key <= 1'b1; //按键上电默认高电平
 #200 //延迟 200ns
 key <= 1'b1; //按键没有被按下
 #1000 
 key <= 1'b0; //按键被按下
 #600 
 key <= 1'b1; 
 #1000 
 key <= 1'b0;
end

led 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 的下降沿采样数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2342075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 类型、存储和变量(栈和堆)

本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 栈和堆 程序运行时&#xff0c;它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方…

基于深度学习Yolo8的驾驶员疲劳与分心行为检测系统

基于深度学习Yolo8的驾驶员疲劳与分心行为检测系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】疲劳检测模型与行为分析统计 【技术栈】 ①&#xff1a;系统环境&#xff1a;Windows/Mac/Linux ②&#xff1a;开发环境&#xff1a;P…

AOSP Android14 Launcher3——远程窗口动画关键类SurfaceControl详解

在 Launcher3 执行涉及其他应用窗口&#xff08;即“远程窗口”&#xff09;的动画时&#xff0c;例如“点击桌面图标启动应用”或“从应用上滑回到桌面”的过渡动画&#xff0c;SurfaceControl 扮演着至关重要的角色。它是实现这些跨进程、高性能、精确定制动画的核心技术。 …

Linux系统学习----概述与目录结构

linux 是一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发已经得到业界的认可&#xff0c;目前很多企业级的项目 (c/c/php/python/java/go)都会部署到 Linux/unix 系统上。 一、虚拟机系统操作 1.网络连接的三种方式&#xff08;桥接模式、nat模式、主机模…

虚拟列表技术深度解析:原理、实现与性能优化实战

虚拟列表技术深度解析&#xff1a;原理、实现与性能优化实战 引言 在当今数据驱动的互联网应用中&#xff0c;长列表渲染已成为前端开发的核心挑战。传统的一次性全量渲染方式在数据量超过千条时&#xff0c;往往导致页面卡顿、内存飙升等问题。虚拟列表&#xff08;Virtual L…

服务器简介(含硬件外观接口介绍)

服务器&#xff08;Server&#xff09;是指提供资源、服务、数据或应用程序的计算机系统或设备。它通常比普通的个人计算机更强大、更可靠&#xff0c;能够长时间无间断运行&#xff0c;支持多个用户或客户端的请求。简单来说&#xff0c;服务器就是专门用来存储、管理和提供数…

c++下的onnx推理

参考代码&#xff1a;https://github.com/itsnine/yolov5-onnxruntime 参考链接&#xff1a;https://blog.csdn.net/magic_ll/article/details/125517798 1.下载onnx 官网&#xff1a;https://github.com/microsoft/onnxruntime/releases/tag/v1.21.0 2.下载代码 https://g…

TCP三次握手与四次挥手面试回答版本

面试官&#xff1a;说一下TCP三次握手的过程 参考面试回答&#xff1a; 在第一次握手的时候、客户端会随机生成初始化序号、放到TCP报文头部的序号字段中、同时把SYN标志设置为1 这样就表示SYN报文&#xff08;这里是请求报文&#xff09;。客户端将报文放入 TCP 报文首部的序…

0101基础知识-区块链-web3

文章目录 1 web3学习路线2 区块链简史2.1 区块链2.2 公共账本2.3 区块链的设计哲学2.3.1 去中心化2.3.2 共识2.3.2.1 上链2.3.2.2 共识算法 3 web3面向资产的互联网3.1 安全性和去中心化的权衡 4 智能合约4.1 以太坊智能合约4.2 去中心化应用 5 小结结语 1 web3学习路线 参考下…

工作纪实_63-Mac电脑使用brew安装软件

最近在接触kafka&#xff0c;想着在自己的电脑安装一套环境&#xff0c;docker也能行&#xff0c;但是还是想装一些原生的软件试试看&#xff0c;因此便想着整理一下brew的命令&#xff0c;这命令确实是方便&#xff0c;不需要下载tar包乱八七糟的东西&#xff0c;一键安装 bre…

Cadence学习笔记之---库元件制作、元件放置

目录 01 | 引 言 02 | 环境描述 03 | 工具介绍 04 | 无源器件的制作 05 | IC芯片制作 06 | 放置元件 07 | 结 语 01 | 引 言 在上一篇小记中&#xff0c;讲述使用Cadence创建原理图工程和元件库&#xff1b; 本篇小记主要讲述如何制作常用的库元件&#xff0c;如电阻、…

服务器如何修复SSL证书错误?

修复服务器上的SSL证书错误需要根据具体错误类型逐步排查和解决。以下是常见的步骤和解决方案&#xff1a; --- ### **1. 确认错误类型** 首先检查浏览器或工具&#xff08;如OpenSSL&#xff09;报错的具体信息&#xff0c;常见错误包括&#xff1a; - **证书过期**&#xf…

图解Mysql原理:深入理解事务的特性以及它的实现机制

前言 大家好&#xff0c;我是程序蛇玩编程。 Mysql中事务大家不陌生吧&#xff0c;事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。那它具有哪些特性&#xff0c;如何实现的呢?接着往下看。 正文 事务的特性: 事务的基本特性主要为四种…

Linux[指令与权限]

Linux指令与权限 Linux环境中,打包文件有多种 tar (打包/解包) 指令 tar -czvf 文件要打包到的位置 文件(打包并压缩到) tar -xzvf 文件(在当前目录下解压) tar选项 -c创建压缩文件 -z使用gzip属性压缩 -v展现压缩过程 -f后面使用新建文档名 -x不要新建,解压 -C 文件…

MySQL 的锁,表级锁是哪一层的锁?行锁是哪一层的锁?

MySQL 的锁层级与类型 在 MySQL 中&#xff0c;锁的层级和实现与存储引擎密切相关。 1. 表级锁&#xff08;Table-Level Locks&#xff09; &#xff08;1&#xff09;存储引擎层的表级锁 实现层级&#xff1a;存储引擎层&#xff08;如 MyISAM、InnoDB&#xff09;。特点&a…

windows docker desktop 无法访问容器端口映射

为什么使用docker desktop访问映射的端口失败&#xff0c;而其端口对应的服务是正常的&#xff1f; 常见问题&#xff0c;容器的防火墙没有关闭&#xff01;&#xff01;&#xff01; 以centos7为例&#xff0c;默认情况下防火墙处于开启状态&#xff1a; 这下访问就OK了

OpenRAN 6G网络:架构、用例和开放问题

英文标题&#xff1a; Open RAN for 6G Networks: Architecture, Use Cases and Open Issues 作者信息 Bharat Agarwal&#xff1a;2016年毕业于Galgotias University&#xff0c;获得电气与电子工程学士学位&#xff1b;2023年在爱尔兰都柏林城市大学获得电子工程博士学位。2…

《TCP/IP详解 卷1:协议》之第四、五章:ARP RARP

目录 一、ARP && RARP 报文结构 1、ARP请求报文示例 2、ARP响应报文示例 3、RARP请求报文示例 4、RARP响应报文示例 5、关于 padding 6、免费ARP 二、tcpdump 的使用 1、基本语法 2、常用选项 3、常用过滤条件 三、arp 命令的使用 1、基本语法 2、常用选…

实战华为1:1方式1 to 1 VLAN映射

本文摘自笔者于2024年出版&#xff0c;并得到广泛读者认可&#xff0c;已多次重印的《华为HCIP-Datacom路由交换学习指南》。 华为设备的1 to 1 VLAN映射有1:1和N :1两种方式。1:1方式是将指定的一个用户私网VLAN标签映射为一个公网VLAN标签&#xff0c;是一种一对一的映射关系…

NLP 梳理03 — 停用词删除和规范化

一、说明 前文我们介绍了标点符号删除、文本的大小写统一&#xff0c;本文介绍英文文章的另一些删除内容&#xff0c;停用词删除。还有规范化处理。 二、什么是停用词&#xff0c;为什么删除它们&#xff1f; 2.1 停用词的定义 停用词是语言中的常用词&#xff0c;通常语义…