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

这篇具有很好参考价值的文章主要介绍了【FPGA】高云FPGA之科学的FPGA开发流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发流程

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 原理图

高云fpga vio,FPGA,fpga开发,高云FPGA

1.3 真值表

高云fpga vio,FPGA,fpga开发,高云FPGA

2、设计输入

2.1 新建工程

高云fpga vio,FPGA,fpga开发,高云FPGA
高云fpga vio,FPGA,fpga开发,高云FPGA

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

高云fpga vio,FPGA,fpga开发,高云FPGA
新建一个verilog文件
高云fpga vio,FPGA,fpga开发,高云FPGA

2.2 添加代码

高云fpga vio,FPGA,fpga开发,高云FPGA

module mux_2_1(
    input wire in1, // 输入端口1
    input wire in2, // 输入端口2
	
	input wire sel, // 输入通道的选择

    output wire led // 输出led
);

// assign led = (sel == 1'b0) ? in1 : in2; // 第一种方式直接使用三目运算符

// 第二种方式是使用always的*触发方法ifelse判断
reg out;
always @(*) begin
	if(sel)
		out <= in2;
	else
		out <= in1;
end

assign led = out;

endmodule

3、分析和综合

这里代码我已经验证了所以没有语法错误,直接进行综合
高云fpga vio,FPGA,fpga开发,高云FPGA

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

高云fpga vio,FPGA,fpga开发,高云FPGA

4、功能仿真

这里我们需要将我们的源代码设置为顶层文件(这里引用一下小梅哥的图),然后我们可以看到该源码所占用的资源情况
高云fpga vio,FPGA,fpga开发,高云FPGA

高云fpga vio,FPGA,fpga开发,高云FPGA

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

高云fpga vio,FPGA,fpga开发,高云FPGA
代码如下

`timescale 1ns/1ps

module 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 begin
        In1 = 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;
	end
	
endmodule

点击综合和布线,验证有无逻辑错误
高云fpga vio,FPGA,fpga开发,高云FPGA

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

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

5、引脚约束及布局布线

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

最终生成文件

//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 2023

IO_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内反应操作,那我们就需要观察输入信号发生变化时输入信号离输出信号产生的间隙是多长如下图,这里的设计没有复杂的运算以及复杂的判断电路类似直接导通所以没有延时产生(实际不会如此,很难有绝对)
高云fpga vio,FPGA,fpga开发,高云FPGA
如果仿真产生的延时达不到我们的需求我们就需要进行调整修改,而且实际的IO输出和仿真的效果往往也会有不同,例如这里的输入是按键,那按键抖动时波形的状态我们就可以通过示波器或则硬件逻辑分析仪进行时序分析这样会更加准确一些;

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

需要注意在烧录验证之前,我们需要在高云软件中配置硬件默认状态,高云编译器默认IO上拉我们需要手动更改为接地
高云fpga vio,FPGA,fpga开发,高云FPGA

高云fpga vio,FPGA,fpga开发,高云FPGA
高云fpga vio,FPGA,fpga开发,高云FPGA
默认烧录是烧录到sram也就是掉电后程序就不在了,如果重启后直接开始运行需要设置未固化到flash中如下图2设置

高云fpga vio,FPGA,fpga开发,高云FPGA
高云fpga vio,FPGA,fpga开发,高云FPGA
然后我们就可以在板子上验证我们设计的功能了;
高云fpga vio,FPGA,fpga开发,高云FPGA文章来源地址https://www.toymoban.com/news/detail-766817.html

到了这里,关于【FPGA】高云FPGA之科学的FPGA开发流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于高云FPGA开发板的十字路口交通灯

    结合高云MiniStar_Nano EDA开发板,完成设计十字路口交通信号灯控制系统。 1.要求该交通灯为三色灯控制器,红灯亮表示禁止通行,绿灯亮表示允许通行,黄灯亮表示要求压线车辆快速穿越。主干道和次干道灯的亮灭时序按照交通规则设置。 2.可以调整主干道和次干道绿灯和红

    2024年01月19日
    浏览(75)
  • 高云FPGA系列教程(2):FPGA点灯工程创建、程序下载和固化

    本文是高云FPGA系列教程的第2

    2023年04月08日
    浏览(55)
  • 高云FPGA使用过程中端口复用设置

    高云FPGA使用过程中端口复用设置 使用芯片:GW2AR-18C; 编译环境:高云Version:1.9.8; 在移植FPGA程序过程中,由于使用了SSPI专用管脚,所以在把专用管脚当做普通IO的时候,就会报错,说当前管脚不支持; 在之前使用Quartus的Cyclone芯片的时候,里面有一个管脚复用的设置,那

    2024年02月07日
    浏览(44)
  • FPGA_学习_15_IP核_VIO

    前一篇博客我们提到在线调试的时候, 可执行文件只要烧进板子,程序它就会自己跑起来,不会等你点 这个按钮,它才开始跑。我们测试的模块中,里面可能有几个我们关心的信号,它会在程序刚运行很短的时间内发生状态跳变。 当我们打算去捕获它的状态变化的时候,这

    2024年02月12日
    浏览(30)
  • 【FPGA】FPGA入门 —— 基本开发流程

    快速上手verilog语法 状态机,线性序列机 FPGA常见的设计方法 自己写代码,下载代码进行使用,使用厂家/第三方提供的IP核 常见接口设计 等等。。 学习时间:基础内容的学习 - 20*8h,啊啊啊我可以我能行,看来这个月我给把时间砸这上面了~~ 仿真两大作用:检查验证设计功能

    2024年02月11日
    浏览(51)
  • 高云FPGA芯片GW1NSR-4C芯片资源介绍

    首先自我介绍:我司市高云的一级代理商  随时欢迎大家和我探讨高云FPGA芯片:Lattice_joan 高云4K的FPGA芯片采用的是高云半导体小蜜蜂系列的GW1NSR-4C,它是一颗SoC芯片,片上集成了FPGA逻辑和ARM Cortex-M3 硬核处理器 。注意是硬核处理器,而不是软核,两者有很大的区别,硬核处

    2024年02月06日
    浏览(43)
  • 高云FPGA系列教程(9):cmd-parser串口命令解析器移植

    本文是高云FPGA系列教程的第9篇文章。 上一篇文章介绍片上ARM Cortex-M3硬核处理器 串口外设 的使用,演示轮询方式和中断方式接收串口数据,并进行回环测试。 本文在上一篇工程的基础上,移植cmd-parser串口命令解析器,到高云GW1NSR-4C ARM处理器上,实现3个命令:

    2024年02月08日
    浏览(37)
  • FPGA学习笔记-1 FPGA原理与开发流程

    注:笔记主要参考: B站 正点原子 教学视频“正点原子手把手教你学FPGA-基于达芬奇Pro开发板 Artix-7 XC7A35T/XC7A100T”。 小梅哥爱漂流 教学视频“【零基础轻松学习FPGA】小梅哥Xilinx FPGA基础入门到项目应用培训教程”。 B站搬运 “特权同学2020版《深入浅出玩转FPGA视频教程》

    2024年02月05日
    浏览(50)
  • 02体验FPGA开发流程

    标准的 FPGA 开发流程主要有以下几个步骤: 需求分析:做一个项目之前,首先需要对项目需求进行详细分析,弄明白项目所需要实现的功能 系统设计:根据项目所需的功能进行系统架构设计,架构设计主要是确定将系统分为子模块,模块之间数据流怎么走,控制流怎么走,

    2024年01月24日
    浏览(45)
  • FPGA开发基本流程详解

    FPGA是一种可编程逻辑器件,与传统的硬连线电路不同,它具有高度的可编程性和灵活性。FPGA的设计方法包括硬件设计和软件设计两部分,硬件设计包括FPGA芯片电路、存储器、输入输出接口电路等等,软件设计则是HDL程序开发,以及软硬件的联调。 本文主要介绍FPGA设计的基

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包