首页 > 其他分享 >FPGA 第5讲 点亮你的LED灯

FPGA 第5讲 点亮你的LED灯

时间:2024-11-11 09:15:11浏览次数:6  
标签:仿真 LED FPGA 点亮 -- 代码 波形图 信号 led

时间:2024.11.10

一、学习内容

1.设计流程(9个步骤)

2.项目工程的文件体系

我们将不同类型的文件进行分类存放在不同的文件夹中,这样方便文件的查找、管理和移植。

2.1新建文件夹

 doc文件夹:

主要放置一些文档资料,比如数据手册、我们绘制的波形图以及自己编写的文档或项目日志等。

quartus_prj文件夹:

主要放置工程文件

rtl文件夹:

主要放置可综合的代码,即最后可以生成硬件电路的代码,这部分代码主要是寄存器描述的、寄存器传输级的代码,rtl是寄存器传输级的英文首字母缩写。

sim文件夹:

主要放置可综合代码的仿真文件。

3.点亮你的LED灯

3.1设计规划

功能实现:可以使用按键控制LED灯的亮灭

层次划分(将整个系统划分为子功能模块):一个模块即可

硬件资源:KEY1-->LED6

原理图查看:

3.2波形绘制

打开doc文件夹-->新建一个visio绘图-->打开visio软件,不选择绘图类型-->进行波形工具箱的加载-->进行波形图的绘制

模块框图的绘制:模块框图的绘制只需要知道输入信号、输出信号即可,具体的模块功能的实现在波形图中体现。

 波形图的绘制:

输入信号一般使用绿色填充,输出信号一般使用红色填充,如果使用了内部变量,可以填充为黄色。

按键未按下时输出0,按下时输出1,led是输入0点亮,输入1熄灭。

3.3代码编写 

打开rtl-->新建.v文件-->进行代码的编写

module led
(

     input   wire   key_in  ,//输入按键

   output  wire   led_out   //输出控制 led 灯
 );

 //led_out:led 灯输出的结果为 key_in 按键的输入值
//因为输入信号和输出信号一致,所以直接使用组合逻辑将输入信号赋值给输出信号
 assign led_out = key_in;


endmodule

3.4代码编译

代码编译之前,先要新建工程

 

 工程新建完成,将编写的.v文件加载到工程当中

 添加.v文件-->apply

3.5逻辑仿真

 编写测试文件-->Files-->添加文件

 `timescale  1ns/1ns
 module tb_led();

 //********************************************************************//
 //****************** Parameter and Internal Signal *******************//
 //********************************************************************//
 //wire  define  
 wire  led_out ;

 //reg   define
 reg   key_in  ;

 //********************************************************************//
 //***************************** Main Code ****************************//
 //********************************************************************//
 //初始化输入信号
 initial key_in <= 1'b0;

//key_in:产生输入随机数,模拟按键的输入情况
 always #10 key_in <= {$random} % 2; /*取模求余数,产生非负随机数 0、1

每隔 10ns 产生一次随机数*/

 //********************************************************************//
 //**************************** Instantiate ***************************//
 //********************************************************************//
 //------------- led_inst -------------
led led_inst
 (

.key_in (key_in ), //input     key_in

.led_out(led_out)
//output    led_out
 );

 endmodule

 仿真的设置-->跳转到modelsim软件中查看波形

3.6管脚绑定-->全编译-->上板验证

3.7程序的固化:

我们下载到FPGA的程序断电之后就会丢失,进行程序的固化之后,断电后重新上电,仍可以执行固化的程序。

生成jic文件-->选择芯片-->添加器件、添加文件-->generate

二、知识点和小技巧

1.正确的设计流程(9个步骤)

   正确的设计流程是开发项目的关键,大概主要分为以下几个步骤:

1. 设计规划

       首先我们要进行设计前的规划,即对项目要有一个全局的考虑,分析项目的具体需求来设计系统的结构、划分系统的层次,确定各个子模块的结构关系和信号之间的相互关系,然后确定模块的端口信号有哪些;

2.波形绘制

      根据每个模块的功能和自己的理解并结合芯片、接口的时序手册我们使用 Visio 画出该模块能正常工作的时序波形图;

3.代码编写

      根据所画的波形图严格设计代码,所谓的严格就是要保证设计代码的仿真结果要和所画的波形保持一致;

4.代码编译

      代码编写完成后对代码进行编译,目的是检查代码中的语法错误。若代码存在语法错误,对代码进行修改,再次编译,直至通过编译;

5.逻辑仿真

    根据 RTL 代码设计合理的 Testbench 进行逻辑仿真(也称为前仿真、功能仿真);

6.波形对比

       使用仿真工具进行仿真(可以使用软件自带的仿真工具,也可以使用其他的第三方仿真工具,本教程中我们使用 ModelSim),并将仿真出来的波形和用 Visio 画出的时序波形图进行对比,如果对比有差别则修改代码直至相同;

7.绑定管脚、分析综合布局布线、上板验证

      绑定管脚是将工程中的输入输出信号和对应的FPGA的芯片的I/O管脚进行绑定,这一步可以通过引脚勾选或者编写引脚约束来实现管脚绑定。

       绑定管脚后进行分析综合、布局布线,对整个工程进行分析综合、布局布线,生成网表文件。

       然后下载到硬件板卡中,此时如果硬件板卡能够正常工作,则说明前期的设计和编写的代码都正确;如果硬件板卡不能够正常工作,查找并解决问题,反复迭代直至正确实现功能,并重复后面的流程,最终保证硬件板卡能够正常工作。

2.波形绘制的好处

波形图的绘制有利于模块功能实现的理解,同时波形图的绘制更加方便代码的编写。

      模块功能的实现就是通过我们的输入信号得到我们需要的输出信号,输入信号和输出信号之间的关系近似为时间和逻辑的关系,表示这种关系最清晰和直观的方式就是波形图,FPGA本身是并行执行,当信号较多时,仅靠我们的记忆和联想,很难理清各信号之间的时序和逻辑的关系,所有我们可以通过绘制波形图来将这种关系表达出来。

     参考波形图可以更加清晰直观地了解各个信号之间的跳变点和跳变条件,代码写起来更加轻松,准确率更高。同时,如果进行项目的升级,参考波形图更加方便直观。

3.波形工具箱的加载

FPGA_DESIGN:可以进行波形图的绘制

状态机形状:可以进行状态机的绘制

逻辑图形状:常用的逻辑门电路

标签:仿真,LED,FPGA,点亮,--,代码,波形图,信号,led
From: https://blog.csdn.net/2201_75297369/article/details/143649781

相关文章

  • FPGA学习笔记#6 Vitis HLS For循环的优化(2)
    本笔记使用的VitisHLS版本为2022.2,在windows11下运行,仿真part为xcku15p_CIV-ffva1156-2LV-e,主要根据教程:跟XilinxSAE学HLS系列视频讲座-高亚军进行学习目录1.循环优化中的基本参数2.PIPELINE&UNROLL    2.1.PIPELINE    2.2.UNROLL3.LOOP_MERGE1.DATAFLOW......
  • SchedulingConfigurer 实现定时任务(动态修改cron,解决@Scheduled需重启服务问题)
    通过实现SchedulingConfigurer接口,实现定时任务,解决@Scheduled的定时任务改动cron需要服务重启的问题。@Slf4j@ComponentpublicclassATestScheduleJobimplementsSchedulingConfigurer{@Value("${a.c:0/5****?}")privateStringcron1;@Override......
  • ffmpeg Detailed description
    ffmpeg buildsatranscodingpipelineoutofthecomponentslistedbelow.Theprogram’soperationthenconsistsofinputdatachunksflowingfromthesourcesdownthepipestowardsthesinks,whilebeingtransformedbythecomponentstheyencounteralongt......
  • FPGA实现串口升级及MultiBoot(六)ICAPE2原语实例讲解
    本文目录索引一个指令和三种方式通过ICAPE2原语添加ICAPE2IP构建Golden位流工程MultiBoot位流工程验证example2总结代码缩略词索引:K7:Kintex7V7:Vertex7A7:Artix7MB:MicroBlaze上一篇文章种总结了MultiBoot关键技术,分为:一个指令、二种......
  • 25-018、基于STM32单片机智能行李箱设计-LED-BELL-KEY-指纹-LCD1602-GSM-GPS+HX711称
    本设计由STM32F103C8T6单片机核心板电路+LED指示灯电路+蜂鸣器报警电路+按键电路+指纹电路+LCD1602液晶显示电路+GSM模块电路+GPS模块电路组成。1、如果指纹错误。LED灯会闪,同时蜂鸣器发出滴滴声(3声即可)2、如果指纹输入三次失败后,禁止再用指纹解锁,如果指纹打不开,可以输入按键......
  • 【51单片机】程序实验1——点亮LED
    由于博主还未学习数字电路和计算机组成原理,因此本系列先开展单片机软件编程的内容,硬件结构的内容简单带过,会考虑安排在后续学习计划中,编程入门部分不会深入涉及单片机电路结构原理。博主已有C语言基础,因此相关内容不会从零开始赘述主要参考学习资料:B站【普中官方】51单片......
  • FPGA实例——数码管(下)
    前言:上一篇文章的话是介绍了关于数码管的基础知识和静态数码管的verilog代码,那本章的话将去介绍如何实现动态数码管以及它的verilog代码和展示动态数码管:简易计数器:这里的话主要去介绍一个简易的计数器,由按键控制开始和结束,每秒自加1,从0计到9999,计满后清零动态数码管显示......
  • Hyperledger fabrics实战项目(区块链溯源)
    Hyperledgerfabrics是什么Hyperledgerfabric是一个全新解决问题的方式,是基于区块链的企业级分布式账本,通过智能合约来解决多个组织间的信任问题.Hyperledgerfabrics特点模块化:组件可定制,可插拔设计,隔离功能可扩展:支持多个共识机制,高性能处理,分区和多通道超安......
  • 终于搞全了:GPIO/ADC/LED/I2C/SPI/USB…
    合宙低功耗4G模组经典型号Air780E,支持两种软件开发方式:一种是传统的AT指令;一种是基于模组做Open开发。传统AT指令的开发方式,合宙模组与行业内其它模组品牌在软件上区别不大,在硬件功耗上更有优势;模组Open开发,合宙采用的是LuatOS方式,相对C-SDK入门更简单,开发更方便,开发时间上也更......
  • 点阵LED电路分析
    以点阵的左上角LED为例,即A1LED为例,进行电路分析9号脚接着LED的阳极,所以9号脚需是高电平,13号脚连着LED的阴极,所以13号脚需是低电平9号脚连接着Q10的集电极,欲使9号脚为高电平,则需要Q10导通Q10的发射极连接着+5V电压,欲使Q10导通,则基极需为低电平,即LEDC0为低电平欲使13号脚低电......