FPGA状态机思想实现流水灯及HDLBits学习

目录

    • 第一章 在DE2-115上用状态机思想实现LED流水灯
      • 1.1 状态机设计思路
      • 1.2 Verilog代码实现
      • 1.3. 仿真测试代码
      • 1.4 编译代码与仿真
    • 第二章 CPLD和FPGA芯片的主要技术区别是什么?它们各适用于什么场合?
      • 2.1 主要技术区别
      • 2.2 适用场合
    • 第三章 HDLBits学习
      • 3.1四位右移寄存器
      • 3.2 半加器
      • 3.3 全加器
      • 3.4 线材
      • 3.5 与门
    • 参考资料

第一章 在DE2-115上用状态机思想实现LED流水灯

1.1 状态机设计思路

  1. 状态定义:定义多个状态,每个状态对应一个LED亮起。
  2. 状态转移:按顺序从一个状态转移到下一个状态。
  3. 计数器:用于控制每个状态的持续时间。

1.2 Verilog代码实现

  1. 环境配置
    在这里插入图片描述
  2. 代码
module led_fsm(input wire clk,          // 时钟信号input wire reset,        // 复位信号output reg [7:0] leds    // 8个LED输出
);// 定义状态
parameter STATE0 = 3'b000;
parameter STATE1 = 3'b001;
parameter STATE2 = 3'b010;
parameter STATE3 = 3'b011;
parameter STATE4 = 3'b100;
parameter STATE5 = 3'b101;
parameter STATE6 = 3'b110;
parameter STATE7 = 3'b111;reg [2:0] current_state, next_state;// 计数器,用于控制每个状态的持续时间
reg [25:0] cnt;always @(posedge clk or posedge reset) beginif (reset) begincurrent_state <= STATE0;cnt <= 0;end else beginif (cnt == 25'd10000000) begin  // 每个状态持续约1秒(假设时钟为50MHz)cnt <= 0;current_state <= next_state;end else begincnt <= cnt + 1;endend
endalways @(*) begincase (current_state)STATE0: beginleds = 8'b00000001;next_state = STATE1;endSTATE1: beginleds = 8'b00000010;next_state = STATE2;endSTATE2: beginleds = 8'b00000100;next_state = STATE3;endSTATE3: beginleds = 8'b00001000;next_state = STATE4;endSTATE4: beginleds = 8'b00010000;next_state = STATE5;endSTATE5: beginleds = 8'b00100000;next_state = STATE6;endSTATE6: beginleds = 8'b01000000;next_state = STATE7;endSTATE7: beginleds = 8'b10000000;next_state = STATE0;enddefault: beginleds = 8'b00000001;next_state = STATE1;endendcase
endendmodule

1.3. 仿真测试代码

module tb_led_fsm;// 时钟和复位信号
reg clk;
reg reset;
wire [7:0] leds;// 实例化被测试模块
led_fsm uut (.clk(clk),.reset(reset),.leds(leds)
);// 时钟生成
initial beginclk = 0;forever #10 clk = ~clk;
end// 测试过程
initial beginreset = 1;#20 reset = 0;#10000 $stop;
endendmodule

1.4 编译代码与仿真

  1. 编译led_fsm.v
    在这里插入图片描述

  2. 点击Processing–>Start–>Start test bench template writer,并在flie中添加生成的led_fsm.vt文件
    vt

  3. 修改led_fsm.vt文件内容
    把仿真代码copy到该文件内,并在第一行声明时间扫描间隔
    ts

  4. 配置仿真环境
    点击Tools–>Options–>EDA ToolsOptions选项,配置ModelSim环境,如果Modelsim版本为INTEL FPGA Edition,那么文件地址应为安装文件内........\modelsim_ase\win32aloem,如图所示。
    在这里插入图片描述

  5. 配置仿真文件,点击Assignments–>Settings
    配置

  6. 选择上面的Compile test bench点击后面Test Bench进入选择,点击New新建
    new

  7. 按照顺序先编辑名字,然后浏览刚才的.vt文件,最后点击Add添加达到如下图效果,再点击OK
    在这里插入图片描述

  8. 点击Tools–>Run Simulation Tool–>RTL Simulation开始进行仿真
    sim

仿真结果
仿真

第二章 CPLD和FPGA芯片的主要技术区别是什么?它们各适用于什么场合?

2.1 主要技术区别

  1. 结构
    CPLD:基于查找表(LUT)和可编程连线的简单结构,逻辑资源较少。
    FPGA:基于查找表(LUT)和可编程连线的复杂结构,逻辑资源丰富,支持大规模设计。
  2. 编程方式
    CPLD:通常使用一次性可编程(OTP)技术,编程后不可擦除。
    FPGA:使用SRAM配置,可多次擦写和重新编程。
  3. 速度和性能
    CPLD:延迟较低,适合高速简单逻辑。
    FPGA:延迟较高,但支持复杂的逻辑设计。
  4. 成本和功耗
    CPLD:成本较低,功耗较低。
    FPGA:成本较高,功耗较高。

2.2 适用场合

CPLD

  1. 适合简单的逻辑设计和组合逻辑。
  2. 适合需要低延迟和低功耗的场合。
  3. 适合需要一次性编程的场合。

FPGA

  1. 适合复杂的逻辑设计和大规模数字系统。
  2. 适合需要频繁更新和调试的场合。
  3. 适合需要高性能计算的场合。

第三章 HDLBits学习

通过访问HDLBits以及HDLBits中文导学网站,完成组合逻辑(combinational logic)中的各题目

3.1四位右移寄存器

  1. 题目
    在这里插入图片描述

  2. 代码实现

module top_module(input clk,input areset,  // async active-high reset to zeroinput load,input ena,input [3:0] data,output reg [3:0] q); 
// 异步复位,同步加载和移位
always @(posedge clk or posedge areset) beginif (areset) beginq <= 4'b0000; // 异步复位为0end else beginif (load) beginq <= data; // 同步加载end else if (ena) beginq <= {1'b0, q[3:1]}; // 右移一位,最高位清零end// 如果load和ena都无效,保持当前状态end
endendmodule
  1. 提交结果
    在这里插入图片描述

3.2 半加器

  1. 题目
    在这里插入图片描述
  2. 代码实现
module top_module(input a, b,output cout, sum
);assign sum = a ^ b;assign cout = a & b;
endmodule
  1. 提交结果
    在这里插入图片描述

3.3 全加器

  1. 题目
    在这里插入图片描述
  2. 代码实现
module top_module(input a, b, cin,output cout, sum
);assign sum = a ^ b ^ cin;assign cout = (a & b) | (a & cin) | (b & cin);
endmodule
  1. 提交结果
    在这里插入图片描述

3.4 线材

  1. 题目
    在这里插入图片描述
  2. 代码
module top_module(input in,output out
);assign out = in;
endmodule
  1. 提交结果
    在这里插入图片描述

3.5 与门

  1. 题目
    在这里插入图片描述
  2. 代码实现
module top_module(input a,input b,output out
);assign out = a & b;
endmodule
  1. 提交结果
    在这里插入图片描述

参考资料

Quartus使用步骤及联合Modelsim仿真教程
FPGA基础入门【2】ModelSim官方免费版安装
quartus和modelsim联合仿真详细教程

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

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

相关文章

与总社团联合会合作啦

2025.4.2日&#xff0c;我社团向总社团联合会与暮光社团发起合作研究“浔川代码编辑器v2.0”。至3日&#xff0c;我社团收到回复&#xff1a; 总社团联合会&#xff1a; 总社团联合会已收到浔川社团官方联合会的申请&#xff0c;经考虑&#xff0c;我们同意与浔川社团官方联合…

Shiro学习(三):shiro整合springboot

一、Shiro整合到Springboot步骤 1、准备SpringBoot 环境&#xff0c;这一步省略 2、引入Shiro 依赖 因为是Web 项目&#xff0c;所以需要引入web 相关依赖 shiro-spring-boot-web-starter&#xff0c;如下所示&#xff1a; 3、准备Realm 因为实例化 ShiroFilterFactoryBean 时…

【图形API】片段着色器自动计算LOD

片段着色器中的自动 LOD 计算详解 在图形渲染中&#xff0c;Level of Detail (LOD) 用于优化纹理采样的性能和视觉质量。片段着色器&#xff08;Fragment Shader&#xff09;能够自动计算 LOD&#xff0c;而顶点着色器&#xff08;Vertex Shader&#xff09;则不行。以下是详细…

24、 Python Socket编程:从协议解析到多线程实战

Python Socket编程&#xff1a;从协议解析到多线程实战 一、文章概述 本文深入讲解Python网络编程核心技术&#xff0c;涵盖TCP/UDP协议底层原理、Socket API全流程解析、高并发服务端开发实践&#xff0c;以及网络通信中的典型问题解决方案。通过3个递进式代码案例和协议设计…

LabVIEW 中数字转字符串常用汇总

在 LabVIEW 编程环境里&#xff0c;数字与字符串之间的转换是一项极为基础且重要的操作&#xff0c;广泛应用于数据处理、显示、存储以及设备通信等多个方面。熟练掌握数字转字符串的方法和技巧&#xff0c;对编写高效、稳定的程序起着关键作用。接下来&#xff0c;我们将全面深…

轨迹速度聚类 实战

根据轨迹把速度聚类为3个类别,速度快的那部分不用平滑,速度慢的部分需要平滑。 速度聚类3个类别: kmeans++ import numpy as np import cv2 from sklearn.cluster import KMeans from matplotlib.colors import hsv_to_rgb from scipy.ndimage import gaussian_filter1d# …

vulkanscenegraph显示倾斜模型(5.6)-vsg::RenderGraph的创建

前言 上一章深入分析了vsg::CommandGraph的创建过程及其通过子场景遍历实现Vulkan命令录制的机制。本章将在该基础上&#xff0c;进一步探讨Vulkan命令录制中的核心封装——vsg::RenderGraph。作为渲染流程的关键组件&#xff0c;RenderGraph封装了vkCmdBeginRenderPass和vkCmd…

第二十八章:Python可视化图表扩展-和弦图、旭日图、六边形箱图、桑基图和主题流图

一、引言 在数据可视化领域&#xff0c;除了常见的折线图、柱状图和散点图&#xff0c;还有一些高级图表类型可以帮助我们更直观地展示复杂数据关系。本文将介绍五种扩展图表&#xff1a;和弦图、旭日图、六边形箱图、桑基图和主题流图。这些图表在展示数据关系、层次结构和流量…

大模型-爬虫prompt

爬虫怎么写prompt 以下基于deepseek r1 总结&#xff1a; 以下是为大模型设计的结构化Prompt模板&#xff0c;用于生成专业级网络爬虫Python脚本。此Prompt包含技术约束、反检测策略和数据处理要求&#xff0c;可根据具体需求调整参数&#xff1a; 爬虫脚本生成Prompt模板1 …

Vue中将pdf文件转为图片

平时开发中,我们经常遇到的场景应该是调用后端接口返回给前端pdf格式的文件流,然后我们可以通过URL.createObjectURL的方式转为object url临时路径然后可以通过window.open的方式来打开一个新的浏览器页签来进行预览,效果如下图: 但有时候这样满足不了的需求,它不想这样预…

物联网安全技术:守护智能世界的防线

最近研学过程中发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…

kubernetes安装部署k8s

kubernetes https://github.com/kubernetes/kubernetes.git go mod tidy go mod vendor go build -o .\bin -v ./… //手动创建bin文件夹 使用 minikube&#xff1a;https://gitee.com/mirrors/minikube.git 使用minikube启动本地化的集群服务 minikube start 启动集群&…

JT/T 1078 协议基本介绍与解析

文章目录 一、JT/T 1078 协议基本介绍二、JT/T 1078 与 JT808 的关系三、JT1078 协议核心功能四、JT1078 数据结构概览4.1、消息结构&#xff1a;4.2、消息类型&#xff08;部分&#xff09;&#xff1a; 五、Java 中如何解析 JT1078 协议数据&#xff1f;5.1、JT1078 消息 ID …

手机为电脑提供移动互联网络的3种方式

写作目的 在当今数字化时代,电脑已成为人们日常工作和生活中不可或缺的工具,而网络连接更是其核心功能之一。无论是处理工作任务、进行在线学习、还是享受娱乐资源,稳定的网络环境都是保障这些活动顺利开展的关键。然而,在实际使用过程中,电脑网络驱动故障时有发生,这可…

Linux的 /etc/sysctl.conf 笔记250404

Linux的 /etc/sysctl.conf 笔记250404 /etc/sysctl.conf 是 Linux 系统中用于 永久修改内核运行时参数 的核心配置文件。它通过 sysctl 工具实现参数的持久化存储&#xff0c;确保系统重启后配置依然生效。以下是其详细说明&#xff1a; &#x1f4c2; 备份/etc/sysctl.conf t…

deepseek v3-0324 Markdown 编辑器 HTML

Markdown 编辑器 HTML 以下是一个美观的 Markdown 编辑器 HTML 页面&#xff0c;支持多种主题切换和实时预览功能&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&q…

Linux make 检查依赖文件更新的原理

1. 文件的时间戳 make 主要依靠文件的时间戳来判断依赖文件是否有更新。每个文件在文件系统中都有一个时间戳&#xff0c;记录了文件的三种重要时间&#xff1a; ​​访问时间&#xff08;Accesstime&#xff09;​​&#xff1a;文件最后一次被访问的时间。​​修改时间&…

HDEBits中组合逻辑类的部分题目练习

文章目录 1. More logic gates2. Truth tables3. 256-to-1 4-bit multiplexer4. 3-bit binary adder5. Signed addition overflow6. 4-digit BCD adder7. Minimum SOP and POS8. Karnaugh map9. K-map implemented with a multiplexer总结 1. More logic gates 题目&#xff1…

Apache httpclient okhttp(2)

学习链接 Apache httpclient & okhttp&#xff08;1&#xff09; Apache httpclient & okhttp&#xff08;2&#xff09; okhttp github okhttp官方使用文档 okhttp官方示例代码 OkHttp使用介绍 OkHttp使用进阶 译自OkHttp Github官方教程 SpringBoot 整合okHttp…

【git项目管理】长话短说

目录 主要分为三种使用情况 安装git后第一次使用创建新仓库并管理克隆仓库并管理 初次使用git 首先确定电脑的用户名是纯英文&#xff0c;没有中文和奇怪的符号&#xff0c;如果不满足这个条件&#xff0c;参考这个 链接 修改用户名 git config --global user.name "…