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

FPGA 第5讲 点亮你的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/1nsmodule tb_led();//********************************************************************////****************** Parameter and Internal Signal *******************////********************************************************************////wire  define  wire  led_out ;//reg   definereg   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:可以进行波形图的绘制

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

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


http://www.mrgr.cn/news/69726.html

相关文章:

  • 机器学习:XGBoost模型(升级版)——高效且强大的树形模型
  • 设计模式(四)装饰器模式与命令模式
  • 显示微服务间feign调用的日志
  • 【菜笔cf刷题日常-1400】C. RationalLee(贪心)
  • OSPF总结
  • RabbitMq项目实战--延迟队列实现超时订单处理
  • AI重塑软件开发流程
  • A025-基于SpringBoot的售楼管理系统的设计与实现
  • 【网络安全】Nginx功能快速入门
  • 05_docker 安装常用软件
  • 【GPTs】EmojiAI:轻松生成趣味表情翻译
  • Linux服务器进程的控制与进程之间的关系
  • ReentrantLock【复习】
  • 微服务(二)
  • AI背后的“思考者“:LLM大语言模型是什么?
  • 使用热冻结数据层生命周期优化在 Elastic Cloud 中存储日志的成本
  • 一定要chatgpt吗?
  • 十八:Spring Boot 依赖(3)-- spring-boot-starter-data-jpa 依赖详解
  • 对静态资源加载失败的场景做降级处理
  • 防倒灌电路【手电钻工作日志】
  • 素数筛选法
  • 说说HDD老将的那些事儿
  • 这是我见过讲解大模型最详细的一本书!学习大模型的建议都去读!
  • 拓扑学与DNA双螺旋结构的奇妙连接:从算法到分子模拟
  • 大模型入门自学资源汇总,很难找到比这还全的大模型学习资源总结了!
  • <项目代码>YOLOv8 草莓成熟识别<目标检测>