开发流程及仿真示例

  • FPGA整体设计开发流程
    • 1、 设计定义
    • 2、 设计输入(Quartus II)
    • 3、 分析和综合(Quartus II)
    • 4、 功能仿真(modelsim-altera/modelsim)
    • 5、 布局布线(Quartus II)
    • 6、 时序仿真(modelsim-altera/modelsim)
    • 7、 时序约束
    • 8、 IO分配以及配置文件的生成
    • 9、 配置(烧写FPGA)
    • 10、在线调试(SignalTap II、信号探针、内存查看等)
  • 仿真示例
    • Testbench文件编写及仿真
    • 执行前仿真
    • 执行后仿真

FPGA整体设计开发流程

FPGA学习入门小白,学习FPGA开始由正点原子入门,开始时候学习方法和刚开始学习单片机的方法类似,学习了简单的流水灯、数码管的简单功能,后来发现还是有些区别的,对自己未来规划的重点方向是FPGA。感觉自己对FPGA的开发流程,仿真工具掌握的不是很好,师兄推荐了小梅哥的学习视频,虽然手头的板子是正点原子的,但是型号一样,就直接再用小梅哥的视频给我回炉重造一遍吧~

1、 设计定义

设计定义的目的是先明确设计需要完成的目标及功能,然后提出合理的设计要求

2、 设计输入(Quartus II)

设计输入在Quartus ii软件上完成,使用verilog语言或调用IP核的方式,完成设计。也就是编写程序的过程。

3、 分析和综合(Quartus II)

主要用来检查语法和逻辑错误编译单个的verilog文件(类似于程序编译)

4、 功能仿真(modelsim-altera/modelsim)

前仿真,不考虑实际延迟,只考虑逻辑情况,逻辑之间零延迟。

5、 布局布线(Quartus II)

软件对设计代码布局到对应芯片并完成连线,生成带有逻辑延迟的仿真模型。(类似于全编译的过程,编译整个工程)

6、 时序仿真(modelsim-altera/modelsim)

后仿真,当芯片中进行布局布线后,芯片内部存在延迟。如果传输时间太长,会导致时序设计失败。
修改方式:
1、修改设计输入,减少组合逻辑
2、使用时序约束

7、 时序约束

通过添加时序约束的按时可以防止由于芯片内部的线延迟等原因导致时序设计失败。

8、 IO分配以及配置文件的生成

引脚分配,由FPGA连接到实际电路,具体引脚应该如何定义应该看板子内部是如何规定与外设之间的连线的。

9、 配置(烧写FPGA)

生成和执行的.qpf文件,类似于单片机中的hex文件

10、在线调试(SignalTap II、信号探针、内存查看等)

在线仿真,在工作的状态下观测输出结果是否正确。与单片机的在线仿真调试类似。

仿真示例

举个例子来实现上面的整个步骤,重点在于怎么实现功能仿真和时序仿真的过程。
设计定义:一共用三个输入、一个输出
当输入1时,a与led输出状态一致
当输入0时,b与led输出状态一致

Testbench文件编写及仿真

1、 编写testbench的verilog文件

`timescale 1ns/1ps //1ps:仿真精度 1ns:仿真步进
//#100.001  //延时100.001ns
module led_test_tb;
//激励信号定义,对应连接到待测试模块输入端口reg signal_a;reg signal_b;reg signal_c;
//检测信号定义,对应连接到待测试模块输出端口  wire led;//一个模块设计好后,可以多次使用//led_test led_test0、led_test led_test1//待测试模块例化led_test led_test0(.a              (signal_a),// 输入端口.b                (signal_b),.key_in      (signal_c),.led_out     (led));//   驱动激励信号initial beginsignal_a = 0;signal_b = 0;signal_c = 0;#100;signal_a = 0;signal_b = 0;signal_c = 1;#100;signal_a = 0;signal_b = 1;signal_c = 0;#100;signal_a = 0;signal_b = 1;signal_c = 1;#100;signal_a = 1;signal_b = 0;signal_c = 0;#100;signal_a = 1;signal_b = 0;signal_c = 1;#100;signal_a = 1;signal_b = 1;signal_c = 0;#100;signal_a = 1;signal_b = 1;signal_c = 1;#200;$stop;//在仿真完成之后及时停止endendmodule

2、 在EDA工具中添加仿真工具
首先将仿真工具的路径添加到Quartus中

添加对应仿真工具的仿真路径

这里因为课题室电脑和笔记本不太一样,笔记本装的是Modelsim,笔记本是modelsim-altera,所以报错了,注意选择对应的仿真工具。

在工程中加载自己编写的testbench文件

执行前仿真

点击

遇到问题
之前在电脑上使用modelsim进行仿真,后来使用modelsim-altera进行仿真

解决方法
删除之前编译产生的simulation中的内容,重新编译


前仿真结果


执行后仿真

点击
仿真结果

发现有不希望产生的脉冲出现,和逻辑延迟产生

小梅哥FPGA学习笔记——开发流程及仿真示例相关推荐

  1. 小梅哥FPGA学习笔记

    小梅哥FPGA学习笔记 一.38译码器 功能: 译码器其任一时刻的稳态输出,仅仅与该时刻的输入变量的取值有关,它是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等).38 ...

  2. 小梅哥FPGA学习笔记——状态机设计学习

    状态机学习 状态机编写方式 设计目的 设计思路 设计代码编写 测试代码编写 仿真波形结果 状态机编写方式 状态机设计编写有三种方式,分别是一段式.两段式.三段式三种方式. 设计目的 通过一段式状态机编 ...

  3. 小梅哥FPGA学习笔记——串口发送模块

    串口发送模块 串口发送模块结构框图 顶层模块 串口发送模块结构框图 发送模块具体实现结构框图如图所示,按照图片的内容一步步实现发送模块的设计. DR_LUT查找表的作用是选择不同波特率时,得到对应波特 ...

  4. 【小梅哥SOPC学习笔记】系统时钟的使用

    给NIOS II CPU添加一颗澎湃的心--系统时钟的使用 本实验介绍如何在Qsys中添加一个定时器作为NIOS II的心跳定时器,并在NIOS II中软件编程使用该定时器. 将上一个实验watchd ...

  5. 【小梅哥SOPC学习笔记】Altera SOPC嵌入式系统设计教程

    Altera SOPC嵌入式系统设计教程 第1章 概述 SOPC(System On Programmable Chip,可编程的片上系统)是Altera公司提出来的一种灵活.高效的SOC解决方案.它 ...

  6. 小梅哥FPGA视频教程学习总结(持续学习中……)

    首先附上小梅哥FPGA视频教程链接:https://www.bilibili.com/video/BV1va411c7Dz?p=2&spm_id_from=pageDriver 小梅哥yyds ...

  7. 学习小梅哥FPGA培训视频第一天

    ** 学习小梅哥FPGA培训视频第一天 ** 学习实现计数器 利用quartus II 编写代码并仿真 仿真为前仿真和后仿真 这是前仿真 这是后仿真 在后仿真中,会有毛刺的出现,例如在 1(0001) ...

  8. FPGA学习笔记(1)简单的时序逻辑电路——流水灯

    FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...

  9. FPGA学习笔记(十二)IP核之FIFO的学习总结

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

最新文章

  1. docker常用命令详解
  2. javascript事件与event对象的属性
  3. 精心整理,kafka常见面试题,看这篇文章就够了(共17题,含详细解答)
  4. Windows Phone 7 自定义弹出窗口
  5. scala 隐式参数入门及应用
  6. python怎么让图片旋转45度_是否有方法将matplotlib打印旋转45度?
  7. Cglib 代码生成库使用快速入门
  8. Listings of System and Object Privileges--系统和对象权限列表
  9. 基于 Arduino 的 RFID 识别实验
  10. 广州坐标系转换大地2000_实用帖 | 从地方坐标系到2000国家大地坐标系的转换方法...
  11. 20幻读是什么,幻读有什么问题
  12. CTPN源码解析2-代码整体结构和框架
  13. 互联网晚报 |11/24 星期四 | 比亚迪涨价2000到6000元不等;苹果15或告别纯直边;星巴克回应0.01元抢券不兑换...
  14. Android-NuPlayer音视频同步之安卓Q新功能
  15. 而立之年——那些从一线城市退到二三线的程序员,现在过的怎么样了?
  16. 何恺明的ResNet引用量突破10万!
  17. 5G LAN — 技术实现原理
  18. vue使用echart图表过程所遇问题整理
  19. 计算机儿歌音乐谱大全,简单乐谱儿歌有哪些?
  20. C#/.NET 电子口岸IC卡/UKEY用WebSocket方式进行读卡/数据加签

热门文章

  1. You can't take the sky from me
  2. mysql stdistance_SQL Server 利用 geography 计算地理位置距离、距我最近排序
  3. Vue零基础到实战权威开发宝典_学习笔记
  4. Python 二次开发 SAP2000 绘制
  5. 最全Python算法入门
  6. 华为RS4 IP编址
  7. 面对找不到工作的困难,小伙选择创业开酒吧,月收入竟达到了6万
  8. OCR文字识别之CTC原理和实现
  9. WebService:一些常用的webservice网址
  10. 不存在从 “int“ 转换到 “registers“ 的适当构造函数