【FPGA】高云FPGA之科学的FPGA开发流程

FPGA开发流程

  • 开发流程
    • 1、设计定义
    • 2、设计输入
    • 3、分析和综合
    • 4、功能仿真
    • 5、布局布线
    • 6、时序仿真
    • 7、IO分配以及配置文件(bit流文件)的生成
    • 8、配置(烧录)FPGA
    • 9、在线调试
  • 例子
    • 1、设计定义
      • 1.1 需求
      • 1.2 原理图
      • 1.3 真值表
    • 2、设计输入
      • 2.1 新建工程
      • 2.2 添加代码
    • 3、分析和综合
    • 4、功能仿真
    • 5、引脚约束及布局布线
    • 6、时序仿真
    • 7、bit流输出、配置烧录、板级验证

开发流程

1、设计定义

项目需要做什么,了解系统的功能,如果是大型的项目还会划分模块

2、设计输入

通过使用verilog、VHDL、成熟的IP核或者通过画原理图的方式进行逻辑输入设计

3、分析和综合

当逻辑输入设计完成后需要对其进行验证,该部分由软件部分进行验证,如果逻辑输入有问题需要检查语法错误或则重新设计设计输入

4、功能仿真

当分析和综合通过后应该进行功能性验证,针对项目设计定义的功能使用设计的逻辑输入验证其功能能否实现,一般的做法都是通过功能仿真的方式进行验证,比如软件逻辑分析仪,modelsim、vivado等软件自带的仿真工具进行仿真验证

功能仿真也称为行为仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。也可以叫做RTL仿真(test bench)

5、布局布线

当我们的IO可以开始分配了我们首先需要分配IO,如果当前还没到IO分配的时候我们可以将IO分配放在最后,当IO分配完成后我们就可以通过软件进行布局布线,在芯片内部生成芯片电路

6、时序仿真

时序仿真也称为布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,能较好地反映芯片的实际工作情况,当时序仿真不通过的时候可能还会设计到时序约束的一个过程(在比较复杂的设计中也需要用到);

7、IO分配以及配置文件(bit流文件)的生成

如果在布局布线时未进行IO分配在该步骤进行IO分配并生成BIT流文件

8、配置(烧录)FPGA

时序通过了后需要通过硬件进行验证也就是最后一步的实物验证

9、在线调试

当系统出现问题运行不正常我们可以通过外部硬件示波器或者逻辑分析仪进行实际引脚信号抓取分析

例子

1、设计定义

1.1 需求

二选一多路器,两个输入IO(a,b)可以是高电平可以是低电平,一个sel选择信号
当sel为0时候输出按键1的状态
当sel为1时候输出按键2的状态

1.2 原理图

在这里插入图片描述

1.3 真值表

在这里插入图片描述

2、设计输入

2.1 新建工程

在这里插入图片描述
在这里插入图片描述

选择自己使用的芯片(我这里采用的是小梅哥的高云FPGA开发板)

在这里插入图片描述
新建一个verilog文件
在这里插入图片描述

2.2 添加代码

在这里插入图片描述

module mux_2_1(input wire in1, // 输入端口1input wire in2, // 输入端口2input wire sel, // 输入通道的选择output wire led // 输出led
);// assign led = (sel == 1'b0) ? in1 : in2; // 第一种方式直接使用三目运算符// 第二种方式是使用always的*触发方法ifelse判断
reg out;
always @(*) beginif(sel)out <= in2;elseout <= in1;
endassign led = out;endmodule

3、分析和综合

这里代码我已经验证了所以没有语法错误,直接进行综合
在这里插入图片描述

当没有语法错误时表示代码正常然后我们可以运行工具中的RTL Desgin Viewer查看原理图网表;

在这里插入图片描述

4、功能仿真

这里我们需要将我们的源代码设置为顶层文件(这里引用一下小梅哥的图),然后我们可以看到该源码所占用的资源情况
在这里插入图片描述

在这里插入图片描述

然后我们创建一个test beach测试文件

在这里插入图片描述
代码如下

`timescale 1ns/1psmodule mux_2_1_tb();reg In1;reg In2;reg Sel;wire Led;// 创建模块实例并赋值参数mux_2_1 Mux_2_1(.in1(In1),.in2(In2),.sel(Sel),.led(Led));// 初始化运行 测试每个真值表上对应的参数设定initial beginIn1 = 0;In2 = 0;Sel = 0;#100; In1 = 0;In2 = 0;Sel = 1;#100;In1 = 0;In2 = 1;Sel = 0;#100;In1 = 0;In2 = 1;Sel = 1;#100;In1 = 1;In2 = 0;Sel = 0;#100;In1 = 1;In2 = 0;Sel = 1;#100;In1 = 1;In2 = 1;Sel = 0;#100;In1 = 1;In2 = 1;Sel = 1;#100;endendmodule

点击综合和布线,验证有无逻辑错误
在这里插入图片描述

然后我们打开modsim软件创建工程
在这里插入图片描述
添加我们的两个源码文件并编译
在这里插入图片描述
进入 Add Simulation Configuration 页面,我们在 Design 标签页面中选择work 库中的“ mux_2_1_tb”模块作为设计顶层,点击复制模块名作为仿真配置“ Simulation Configuration Name”的命名,确保命名保持一致。在复杂的工程设计中,我们可以设计多个不同的仿真配置顶层对工程进行仿真测试。
在这里插入图片描述
点击“ Optimization Options…”, 在“ Optimization Options…” 设置栏中选择“ Apply full visibility to all modules(full debug module)”,点击“ OK”
在这里插入图片描述
配置元件库(这一步的操作需要在modsim中已经添加了高云fpga的仿真库后操),点击“ libraries” 设置栏, 在“ Search libraries(-L)” 一栏中点击“ Add…”添加我们新建的高云的库文件“ gw5a”,在“ Search Libraries First(-Lf)”同样选择库文件“ gw5a”,最后点击“ Save”保存设置;
在这里插入图片描述
然后双击我们的仿真文件进入仿真界面
在这里插入图片描述
然后我们选中模块右击后点击Add Wave放到显示波形中
在这里插入图片描述

添加好波形后回到“ Library”栏,右键单击“ work”点击 Update 将
“ mux_2_1_tb”文件更新在“ work”栏,如下所示
在这里插入图片描述
然后我们点击状态栏中的运行即可捕捉到波形,然后右击Zoom Full可以快速查看波形,在这一步我们可以验证我们的波形是否是我们需要的效果;
在这里插入图片描述
下一步我们可以将modsim的工程和波形文件保存到项目project路径下;
在这里插入图片描述
然后点击波形界面一下再点击这个按钮选择保存波形路径
在这里插入图片描述
下次还需打开工程只需要点击该目录下的.mpf文件即可
在这里插入图片描述
到这里功能仿真也就是RTL仿真就结束了,下一步我们需要分配我们程序中引脚并完成布局布线;

5、引脚约束及布局布线

首先我们需要确认我们输入和输出接的引脚,这里小梅哥的板子提供了excel表格,下面是我使用到的资源;
在这里插入图片描述
然后我们回到软件中进行引脚约束
在这里插入图片描述
保存后进行点击布线查看是否存在错误
在这里插入图片描述

最终生成文件

//Copyright (C)2014-2023 Gowin Semiconductor Corporation.
//All rights reserved. 
//File Title: Physical Constraints file
//Tool Version: V1.9.9 (64-bit)
//Part Number: GW5A-LV25UG324C2/I1
//Device: GW5A-25
//Device Version: A
//Created Time: Mon 12 25 15:47:02 2023IO_LOC "led" D14; // 指定“led”io位置为D14
IO_PORT "led" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3; // 无上拉 驱动等级8 io电压3.3v
IO_LOC "sel" C15;
IO_PORT "sel" PULL_MODE=NONE BANK_VCCIO=3.3;
IO_LOC "in2" A15;
IO_PORT "in2" PULL_MODE=NONE BANK_VCCIO=3.3;
IO_LOC "in1" B16;
IO_PORT "in1" PULL_MODE=NONE BANK_VCCIO=3.3;

6、时序仿真

在仿真章节的代码中其实有涉及到时序相关的代码,在那一章节就可以观察时序相关的需求,例如本设计的需求有三个输入,分别是key1、key2以及sel,我们要实现的功能便是根据这三个信号的输入状态来输出led,那当我们三个输入信号发生后多久led会产生变化,这就是时序,当我们的需求是要在10ms内反应操作,那我们就需要观察输入信号发生变化时输入信号离输出信号产生的间隙是多长如下图,这里的设计没有复杂的运算以及复杂的判断电路类似直接导通所以没有延时产生(实际不会如此,很难有绝对)
在这里插入图片描述
如果仿真产生的延时达不到我们的需求我们就需要进行调整修改,而且实际的IO输出和仿真的效果往往也会有不同,例如这里的输入是按键,那按键抖动时波形的状态我们就可以通过示波器或则硬件逻辑分析仪进行时序分析这样会更加准确一些;

7、bit流输出、配置烧录、板级验证

需要注意在烧录验证之前,我们需要在高云软件中配置硬件默认状态,高云编译器默认IO上拉我们需要手动更改为接地
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
默认烧录是烧录到sram也就是掉电后程序就不在了,如果重启后直接开始运行需要设置未固化到flash中如下图2设置

在这里插入图片描述
在这里插入图片描述
然后我们就可以在板子上验证我们设计的功能了;
在这里插入图片描述

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

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

相关文章

Docker - 镜像 | 容器 | 数据卷 日常开发常用指令 + 演示(一文通关)

目录 Docker 开发常用指令汇总 辅助命令 docker version docker info docker --help 镜像命令 查看镜像信息 下载镜像 搜索镜像 删除镜像 容器命令 查看运行中的容器 运行容器 停止、启动、重启、暂停、恢复容器 杀死容器 删除容器 查看容器日志 进入容器内部…

软件测试/测试开发丨Pytest学习笔记

Pytest 格式要求 文件: 以 test_ 开头或以 _test 结尾类: 以 Test 开头方法/函数: 以 _test 开头测试类中不可以添加构造函数, 若添加构造函数将导致Pytest无法识别类下的测试方法 断言 与Unittest不同, 在Pytest中我们需要使用python自带的 assert 关键字进行断言 assert…

中介者模式-Mediator Pattern-1

如果在一个系统中对象之间的联系呈现为网状结构&#xff0c; 对象之间存在大量的多对多联系&#xff0c;将导致系统非常复杂。 这些对象既会影响别的对象&#xff0c;也会被别的对象所影响。 这些对象称为同事对象&#xff0c;它们之间通过彼此的相互作用实现系统的行为。 在网…

找不到msvcp140.dll怎么办-msvcp140.dll丢失的解决方法分享

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。那么&#xff0c;msvcp140.dll究竟是什么文件&#xff1f;为什么会出现丢失的情况&#xff1f;本文将详细介绍msvcp140.dll的属性、作用以及丢失的原因&#xff0c;并…

Java学习笔记(八)——面向对象编程(高级)

目录 一、类变量和类方法 &#xff08;一&#xff09;类变量/静态变量 类变量内存布局 类变量使用注意事项和细节 &#xff08;二&#xff09;类方法 类方法经典的使用场景 类方法使用注意事项和细节 二、理解main方法语法 三、代码块 代码块使用注意事项和细节 四、…

Graylog日志搜索技巧

graylog搜索日志用的语法是Syntax接近Lucene&#xff0c;搜起来比较方便 Search query languagehttps://go2docs.graylog.org/4-0/making_sense_of_your_log_data/writing_search_queries.html?tocpathSearching%20Your%20Log%20Data|_____1 1.Syntax 语法 1.1 基本匹配 搜…

java keytool.exe ssl

JDK如果没有先安装 JDK8 install_jdk aleady install-CSDN博客 java keytool.exe ssl keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore D:\server.keystore -validity 3650 server.ssl.key-storeD:\server.keystore server.ssl.key-…

怎么使用jupter notebook并配置环境变量

有的时候需要使用Jupyter Notebook运行代码&#xff0c;Jupyter Notebook的主要特点&#xff1a; ① 编程时具有语法高亮、缩进、tab补全的功能。 ② 可直接通过浏览器运行代码&#xff0c;同时在代码块下方展示运行结果。 ③ 以富媒体格式展示计算结果。富媒体格式包括&…

linux ubuntu常用命令大总结(1)

假设&#xff1a;在/home/test文件夹下有一个a.py文件 清屏 clear 文件和目录操作&#xff1a; clear: 清屏 clearls: 列出 /home/test 目录中的文件和子目录。 ls ls /home/testcd: 切换到 /home/test 目录。 cd cd /home/testpwd: 显示当前工作目录的路径。 pwdtouch:…

IPv4 VS IPv6代理全解,跨境电商代理IP选哪种?

IP&#xff08;互联网协议&#xff09;被网站用来收集用户位置信息。当今最流行的两种互联网协议是 IPv4 和 IPv6。 在我们选择IP代理的过程中可以看到IPv4、IPv6两种类型&#xff0c;他们有何区别&#xff1f;如何选择&#xff1f;下面为大家讲解&#xff01; 在这篇文章中&a…

数据库开发之子查询的详细解析

1.4 子查询 1.4.1 介绍 SQL语句中嵌套select语句&#xff0c;称为嵌套查询&#xff0c;又称子查询。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... ); 子查询外部的语句可以是insert / update / delete / select 的任何一个&#xff0c;最常见…

【JavaScript】Set、Map、WeakSet、WeakMap

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

数据治理认证大揭秘:CDMP、CDGA与CDGP,你了解多少?

IT码农们&#xff0c;你们是否经常被问到关于数据治理认证CDMP、CDGA和CDGP的问题&#xff1f;今天就来给大家好好科普一下&#xff01; &#x1f52e; CDMP&#xff1a;数据治理的基石 CDMP&#xff0c;即数据管理专业人士认证&#xff0c;是迈向数据治理旅程的起点。它为你打…

分享七种msvcp140.dll丢失的解决方法,帮助大家解决msvcp140.dll丢失

msvcp140.dll是一个重要的系统文件&#xff0c;它是微软视觉C可再发行包的一部分。这个动态链接库&#xff08;DLL&#xff09;文件对于运行那些用Visual Studio 2015及其更新版本开发的应用程序至关重要。在Windows操作系统中&#xff0c;DLL文件提供执行许多常见任务的必要指…

【回溯】装载问题Python实现

文章目录 [toc]问题描述问题转换回溯法时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;回溯法 问题描述 有一批共 n n n个集装箱要装上 2 2 2艘载重量分别为 c 1 c_{1} c1​和 c 2 c_{2} c2​的轮船&#xff0c;其中集装箱 i i i的重量为 w i w_{i} w…

async和await的使用

async和await是promise的一种语法糖,也就是更简单易懂的写法。 在很多项目中,你会经常看到async和await的配合使用,看到原始的promise写法反而不多,就是因为async-await这种写法是用同步的语法去实现异步的逻辑。 基础使用 原生promise写法 let value nulllet proFn new P…

AR智慧校园三维主电子沙盘系统研究及应用

一 、概述 易图讯科技(www.3dgis.top)自主研发的智慧校园三维主电子沙盘系统&#xff0c;采用B/S架构模式&#xff0c;采用自主可控高性能WebGIS可视化引擎&#xff0c;支持多用户客户端通过网络请求访问服务器地图和专题数据&#xff0c;提供地理信息数据、专题数据的并发访问…

Temu和Shein争端再起:海外电商“围城”下,一场厮杀正在酝酿

两家中国电商出海“双子星”&#xff0c;争端再起。 最近&#xff0c;美国法院最新公开临时限制令显示&#xff0c;跨境电商平台Temu&#xff08;特木&#xff09;的男装、休闲装、运动服等50款产品涉侵权时尚电商平台Shein&#xff08;希音&#xff09;&#xff0c;并向Temu旗…

智能优化算法应用:基于蜣螂算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蜣螂算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蜣螂算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜣螂算法4.实验参数设定5.算法结果6.参考文献7.MA…

十二.视图

视图 1.常见数据库对象2.视图概述2.1为什么使用视图2.2视图的理解 3.创建视图3.1创建单表视图3.2创建多表联合试图3.3基于试图创建视图 4.查看视图5.更新视图的数据5.1一般情况5.2不可更新的视图 6.修改、删除视图6.1修改视图6.2删除视图 7.总结7.1视图优点7.2视图不足 1.常见数…