Verlog-流水灯-FPGA

news2025/1/10 17:43:53

Verlog-流水灯-FPGA

引言:

​ 随着电子技术的飞速发展,现场可编程门阵列(FPGA)已成为电子设计自动化(EDA)领域中不可或缺的组件。FPGA以其高度的灵活性和可定制性,广泛应用于通信、图像处理、工业控制等多个领域。为了更好地理解和掌握FPGA的设计和应用,本实验将通过一个简单而经典的项目——流水灯设计——来引入Verilog硬件描述语言的使用。

希望你在本次学习过后,能够有一定的收获!!!

​ 冲啊!!!! ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶ ٩(͡๏̯͡๏)۶

文章目录

  • Verlog-流水灯-FPGA
    • 一、任务介绍
    • 二、知识基础
      • 1、FPGA知识
      • 2、Verilog知识
    • 三、实验内容
      • 1、实验代码
      • 2、实验原理
      • 3、实验器材
      • 4、引脚配置图
    • 四、实验效果
    • 五、总结

一、任务介绍

  1. 熟悉FPGA的开发流程
  2. 练习并且巩固有关于verilog代码的相关内容
  3. 使用Verilog语言编写程序实现FPGA的流水灯效果

二、知识基础

1、FPGA知识

FPGA概述: 现场可编程门阵列(Field Programmable Gate Array,简称FPGA)是一种集成了大量可配置逻辑块(CLBs)的半导体设备。这些逻辑块可以通过加载不同的配置文件(通常称为位流文件)来重新定义其功能,从而实现不同的数字电路设计。FPGA的这种可重构特性使其在快速原型开发、复杂数字系统设计和验证等领域非常受欢迎。

FPGA特点:

  1. 灵活性: FPGA的设计可以随时更改,这使得它们非常适合于原型设计和快速迭代开发。
  2. 并行性: 由于FPGA内部的逻辑块可以独立编程和并行运行,因此它们可以同时执行多个操作。
  3. 低功耗: FPGA通常比专用集成电路(ASIC)更加节能。
  4. 成本效益: 对于小批量生产或需要定制化功能的产品,FPGA提供了一种成本效益高的解决方案。

FPGA设计流程:

  1. 概念设计: 确定项目需求和FPGA将执行的功能。
  2. 逻辑设计: 使用硬件描述语言(如Verilog或VHDL)编写代码,描述所需的逻辑功能。
  3. 仿真测试: 在计算机上模拟设计的逻辑,确保其按预期工作。
  4. 综合: 将HDL代码转换成FPGA可以理解的门级表示。
  5. 布局与布线: 将逻辑映射到FPGA的具体物理位置,并连接各个逻辑块。
  6. 位流生成: 生成配置文件,用于初始化FPGA。
  7. 下载与测试: 将位流文件下载到FPGA上,并进行实际测试。

FPGA在电子设计中的应用:

  • 通信系统: FPGA被用于实现复杂的通信协议和信号处理。
  • 视频处理: 在视频监控、图像压缩和显示技术中,FPGA能够处理高速数据流。
  • 工业控制: FPGA用于实现定制化的控制算法和接口。
  • 医疗设备: 在医疗成像和诊断设备中,FPGA可以提供必要的处理能力。
  • 航空航天: 在航空航天领域,FPGA用于导航、遥感和飞行控制系统。

通过掌握FPGA的基础知识,将能够更好地理解流水灯实验的硬件背景,并为后续的实验步骤打下坚实的基础。

2、Verilog知识

Verilog概述: Verilog是一种用于电子系统设计的硬件描述语言(HDL),它允许设计师以文本形式描述复杂的数字逻辑。Verilog语言由Gateway Design Automation公司于1983年开发,并于1989年成为IEEE标准(IEEE 1364-1989),随后经过多次修订,以适应不断变化的设计需求。

Verilog特点:

  1. 结构化设计: Verilog支持模块化和层次化的设计方法,使得大型设计可以被分解为更小、更易于管理的部分。
  2. 并发性: Verilog使用并发语句来描述系统中同时发生的事件,这与数字电路的工作原理相吻合。
  3. 可读性: Verilog的语法类似于C语言,使得有编程背景的工程师更容易上手。
  4. 仿真能力: Verilog提供了强大的仿真工具,可以在实际硬件实现之前对设计进行测试和验证。

Verilog语言基础:

  • 模块(Module): Verilog设计的基本单位,每个模块可以包含输入、输出和内部逻辑。
  • 数据类型: 包括线网(wire)、寄存器(reg)、参数(parameter)等,用于定义信号和存储数据。
  • 操作符: 提供了位操作符、算术操作符、逻辑操作符等,用于构建逻辑表达式。
  • 控制流: 使用if-elsecaseforwhile等语句来描述条件和循环逻辑。

Verilog在FPGA设计中的应用:

  1. 行为描述: 用于描述模块的功能,不涉及具体的逻辑门或电路实现。
  2. 数据流描述: 侧重于信号之间的数学关系,常用于描述组合逻辑。
  3. 结构描述: 描述电路的物理实现,包括逻辑门、触发器等的连接方式。

Verilog设计流程:

  1. 需求分析: 明确设计目标和性能要求。
  2. 设计编写: 使用Verilog语言编写模块的代码。
  3. 功能仿真: 对设计进行仿真,验证其逻辑功能是否正确。
  4. 综合: 将Verilog代码转换成适用于FPGA的门级描述。
  5. 时序仿真: 检查设计的时序特性,确保满足FPGA的时钟要求。
  6. 布局布线: 在FPGA上安排逻辑和互连,优化性能和面积。
  7. 下载测试: 将设计下载到FPGA开发板上,进行实际测试和验证。

三、实验内容

1、实验代码

module led (
    input  clk,
    input  rst_n,
    output reg[7:0] led
);
	
    parameter  TIME_1s = 25_000_000;

    reg    [30-1:0]    cnt_1s     ; 
    wire   add_cnt_1s ,  end_cnt_1s ; 
    always @(posedge clk or negedge rst_n) 
        if (!rst_n)
            cnt_1s  <= 30'b0;
        else if (add_cnt_1s )
            if (end_cnt_1s )
                cnt_1s <=30'b0;
            else 
                cnt_1s  <= cnt_1s  +1'd1;
        else 
            cnt_1s  <= cnt_1s ;
    assign add_cnt_1s  = 1'b1;
    assign end_cnt_1s  = add_cnt_1s  && (TIME_1s-1 == cnt_1s );

    always @(posedge clk or negedge rst_n)
        if(!rst_n)
            led <= 8'b0000_0001;
        else if(end_cnt_1s)
            led <= {led[6:0],led[7]};
        else
            led <= led;
    
endmodule

2、实验原理

设计目标: 本实验的目标是创建一个简单的流水灯效果,即通过FPGA控制一组LED灯依次点亮,从而产生动态的视觉效果。

设计思路:

  1. 时钟信号(clk): 提供整个设计的脉冲源,所有的逻辑变化都依赖于时钟信号的上升沿。
  2. 复位信号(rst_n): 用于初始化和同步系统状态,当复位信号为低时,系统将重置到初始状态。
  3. LED输出(led): 表示8个LED灯的状态,每一位对应一个LED灯,1表示点亮,0表示熄灭。

核心逻辑:

  1. 1秒计数器: 使用一个30位的寄存器cnt_1s来实现1秒的计数。由于FPGA的时钟频率通常远高于1秒的倒数,因此需要通过计数来实现1秒的延迟。
  2. 计数控制信号: add_cnt_1send_cnt_1s是控制cnt_1s寄存器的关键信号。add_cnt_1s始终为1,表示始终在时钟上升沿增加计数;end_cnt_1s在计数达到TIME_1s - 1时为1,表示1秒时间已到。

实现步骤:

  1. 初始化: 当复位信号rst_n为低时,cnt_1s寄存器清零,所有LED灯熄灭。
  2. 计数: 在每个时钟上升沿,如果复位信号为高,则cnt_1s寄存器增加1。
  3. 1秒判断:cnt_1s寄存器的值在时钟上升沿达到TIME_1s - 1时,表示1秒时间已到,此时end_cnt_1s为1。
  4. LED状态更新: 每当1秒时间到,将最左边的LED状态(led[7])移动到最右边(led[0]),其余LED状态向左移动一位,从而实现流水灯效果。

代码解析:

  • 使用always块来描述在时钟上升沿或复位信号下降沿时的行为。
  • if (!rst_n)判断复位信号,如果是复位状态,则重置cnt_1sled
  • if (add_cnt_1s)if (end_cnt_1s)用于控制计数器和LED状态的更新。
  • assign语句用于生成控制信号,add_cnt_1s直接赋值为1,而end_cnt_1s在计数达到预设的1秒时间时为1。

通过上述原理和实现步骤,可以清晰地理解流水灯FPGA设计的核心逻辑和工作流程。

3、实验器材

在这里插入图片描述

4、引脚配置图

在这里插入图片描述

四、实验效果

v-lsd

五、总结

实验目的回顾: 本次实验的核心目的在于通过实践操作,熟悉FPGA的开发流程,并通过编写Verilog代码来实现FPGA的流水灯效果,以此来练习和巩固Verilog编程的相关知识。

实验过程概述:

  1. 理论学习: 首先需要了解FPGA的基本概念、特点以及设计流程,同时掌握Verilog语言的基础语法和编程技巧。
  2. 环境搭建: 配置FPGA开发环境,包括安装相应的软件工具和硬件设备。
  3. 设计实现: 根据实验原理,使用Verilog语言编写流水灯模块的代码,并在开发环境中进行功能仿真。
  4. 硬件测试: 将编译后的位流文件下载到FPGA开发板上,进行实际的硬件测试,观察LED灯的流水效果。

实验关键点:

  • 时钟和复位信号的处理: 理解时钟信号在数字设计中的重要性,以及如何使用复位信号来初始化和同步系统状态。
  • 计数器的设计: 学习如何利用计数器产生定时信号,以实现LED灯的顺序点亮。
  • 状态寄存器的更新: 掌握如何在Verilog中通过状态寄存器来控制LED灯的状态变化,实现流水灯效果。

实验成果: 通过本次实验,应能够:

  • 熟练掌握FPGA的设计流程和开发环境的搭建。
  • 深入理解Verilog语言的编程方法,包括模块定义、数据类型、操作符和控制流语句。
  • 学会使用Verilog进行基本的数字逻辑设计,如计数器和移位寄存器。
  • 能够独立完成从设计、仿真到硬件测试的整个FPGA设计过程。

实验成果: 通过本次实验,应能够:

  • 熟练掌握FPGA的设计流程和开发环境的搭建。
  • 深入理解Verilog语言的编程方法,包括模块定义、数据类型、操作符和控制流语句。
  • 学会使用Verilog进行基本的数字逻辑设计,如计数器和移位寄存器。
  • 能够独立完成从设计、仿真到硬件测试的整个FPGA设计过程。

未来展望: 流水灯实验是FPGA设计的一个基础入门项目。未来,可以在此基础上探索更复杂的设计,如加入传感器输入、实现更复杂的逻辑控制、或者设计具有特定功能的数字系统。

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

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

相关文章

【系统分析师】软件架构设计

文章目录 1、构件与软件复用1.1 主流构件标准1.2 构件获取与管理1.3 构件复用的方法 2、软件架构概述3、软件架构建模4、软件架构风格4.1 经典架构风格4.2 层次架构风格4.3 富互联网应用-RIA 5、面向服务的架构5.1 SOA概述5.2 SOA的关键技术5.3 SOA的实现方法 6、软件架构评估6…

ARM时钟树结构(GD32)

时钟树的简易框图 初始化配置系统时钟 配置系统初始化时钟&#xff08;参考手册&#xff09; 对应hal库函数 使用72MHz的系统时钟 do -----------while&#xff08;0&#xff09;的使用方法 系统时钟 #include <stdint.h> #include "gd32f30x.h"int main(void)…

实现MYSQL8.3.0 版本流量抓取

实现MYSQL8.3.0 版本流量抓取 根据测试需求&#xff0c;需要抓取MYSQL8.3.0流量包&#xff0c;使用wireshark 数据库客户端实现 安装数据库服务端 这里就不给详细操作方法&#xff0c; 网上教程一大堆&#xff0c;小编这里是最新的MYSQL 8.3.0版本 安装成功后&#xff0c;创…

PyQt6--Python桌面开发(7.QTextEdit多行富文本框控件)

QTextEdit多行富文本框控件 保存文件到本地QLine多行文本框.ui import sys import time from PyQt6.QtGui import QValidator,QIntValidator from PyQt6.QtWidgets import QApplication,QLabel,QLineEdit,QTextEdit from PyQt6 import uic,QtGuiif __name__ __main__:appQApp…

管道液位传感器可以应用在哪些领域

管道液位传感器是一种利用光学原理来检测水管液位的传感器&#xff0c;其工作原理基于光线在水和空气中折射率不同的特性。通过光电管道传感器&#xff0c;可以有效解决传统机械式传感器存在的低精度、卡死失效等问题&#xff0c;同时也避免了电容式传感器因感度衰减而导致的不…

差分信号的前世今生

网上搜索到一篇简洁文章&#xff0c;描述差分信号&#xff0c;我觉得挺好&#xff0c;和大家一起分享&#xff0c;同时也发表个人的浅浅想法。 一、原文摘录 所谓差分方式传输&#xff0c;就是发送端在两条信号线上传输的幅值是相等的&#xff0c;相位是相反的电信号&#xff…

30年赚1000亿美元--“量化之王”和他最传奇的基金“大奖章”的秘密

文艺复兴是华尔街最成功、最神秘的机构之一。从1988-2018年的30年里&#xff0c;文艺复兴仅向内部员工开放的旗舰基金“大奖章”累计创造了超过1000亿美元的收益&#xff0c;年均回报率高达39%。作为对比&#xff0c;同期“股神”巴菲特的年均回报率为20.5%。 而且&#xff0c;…

怎么将一张包含多个帧的精灵图分割成一帧一帧的小图

工具 图片分割 - 图文工具箱 - imgtool.net 设置行列 下载即可

【6大模型让你的沟通汇报更有条理】项目管理常见问题大揭秘 03

6大模型让你的沟通汇报更有条理 虽然头脑中构思众多&#xff0c;一开口却发现空白一片&#xff1f; 工作表现出色&#xff0c;汇报时却总是支支吾吾不知从何说起&#xff1f; 生性腼腆&#xff0c;却难以避免需要站在众人面前发言&#xff1f; 阿道掐指一算&#xff1a;你需…

短剧APP开发,为短剧市场提供更多活力

近年来&#xff0c;短剧一直是一个大热赛道&#xff0c;不仅各大视频平台刮起了一股短剧热潮&#xff0c;各大品牌也纷纷开始进军短剧市场。短剧作为当下的流量密码&#xff0c;深受各大短剧观众与创业者的关注。吸引了大量的资本、制作方涌入到市场中&#xff0c;短剧行业发展…

[GESP样题 四级] 填幻方和幸运数

B3940 [GESP样题 四级] 填幻方 题目 在一个NN 的正方形网格中&#xff0c;每个格子分别填上从 1 到 NN 的正整数&#xff0c;使得正方形中任一行、任一列及对角线的几个数之和都相等&#xff0c;则这种正方形图案就称为“幻方”&#xff08;输出样例中展示了一个33 的幻方&am…

postgresql中写python去读取HDFS数据,像表一样使用。

简介 首先postgresql是支持python的&#xff0c;在安装postgresql数据库的时候需要执行python支持。可以使用python进行写fundcation 自然也就可以自定义funcation去读取HDFS文件&#xff0c;以此替换掉hive的&#xff0c;省去中间频繁切换服务器的麻烦。 安装postgresql use…

民航电子数据库:select查询时部分字段缺失

目录 前言异常排查原因解决使用systemPath标签引入本地Jar包后无法打包 前言 1、对接民航电子数据库 2、框架为shardingsphere caedb mybatis 3、部分SQL查询时&#xff0c;会出现字段缺失的情况 4、查看日志打印出来的SQL&#xff0c;字段并未缺失 异常 这里省略SQL语句…

【Java】/*逻辑控制语句和输入输出—快速总结*/

目录 前言 一、分支语句 1.1 if 语句 1.2 switch 语句 二、循环语句 2.1 while 循环 2.1.1 break 2.1.2 continue 2.2 for 循环 2.3 do_while 循环 三、逻辑语句的小结 四、Java 中的输入输出 4.1 输出到控制台 4.2 从键盘输入 前言 Java 中的逻辑控制语句和C语…

1分钟搞定Pandas DataFrame创建与索引

1.DataFrame介绍 DataFrame 是一个【表格型】的数据结构,可以看作是【由Series组成的字典】(共用同一个索引)。DataFrame 由按一定顺序排列的多列数据组成。设计初衷是将 Series 的使用场景从一维扩展到多维。DataFrame 既有行索引,也有列索引。 行索引:index 列索引:co…

【18-Ⅱ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础&#xff0c;通过阅读Java廖雪峰网站&#xff0c;简单速成了java&#xff0c;但对其中一些入门概念有所疏漏&#xff0c;阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

【qt】纯代码界面设计

界面设计目录 一.界面设计的三种方式1.使用界面设计器2.纯代码界面设计3.混合界面设计 二.纯代码进行界面设计1.代码界面设计的总思路2.创建项目3.设计草图4.添加组件指针5.初始化组件指针6.添加组件到窗口①水平布局②垂直布局③细节点 7.定义槽函数8.初始化信号槽9.实现槽函数…

如何禁止打开PDF文件?推荐2种方法!

在工作中&#xff0c;我们经常会使用到PDF文件&#xff0c;对于重要的文件&#xff0c;不想被随意打开怎么办呢&#xff1f;下面小编分享2个方法&#xff0c;第二个很实用&#xff0c;记得收藏起来&#xff01; 方法1&#xff1a;设置密码保护 我们可以通过PDF编辑器&#xff…

【图像识别】Swin Transformer

一、引言 论文&#xff1a; Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 作者&#xff1a; Microsoft Research Asia 代码&#xff1a; Swin Transformer 特点&#xff1a; 提出滑动窗口自注意力 (Shifted Window based Self-Attention) 解决Vi…

恶意软件正劫持安全软件更新进行分发

GuptiMiner 是一个高度复杂的威胁&#xff0c;最早在 2018 年发现&#xff0c;主要为了在大型企业中分发后门。一种是 PuTTY Link 的增强版本后门&#xff0c;能够针对本地网络进行 SMB 扫描&#xff0c;并通过网络横向移动到网络上其他可能易受攻击的 Windows 7 和 Windows Se…