FPGA—硬件电路一旦上电配置完成,各个功能模块会并行地持续工作

1.示例代码参考

这段代码是用 Verilog 编写的一个 LED 闪烁控制模块,主要实现了 LED 按一定时间间隔循环移位闪烁的功能。下面详细解释其架构组成:

模块定义与端口声明

  • 模块名为 led_flash,包含三个端口:
    • sys_clk:输入端口,是系统时钟信号,用于驱动整个模块的时序逻辑。
    • rst_n:输入端口,是系统复位信号(低电平有效),用于在复位时将模块状态恢复到初始状态。
    • led:输出端口,是一个 4 位的寄存器,用于控制 4 个 LED 的亮灭状态。

内部信号声明

  • cnt:28 位的寄存器,作为计数器,用于计时,实现 0.25 秒的时间间隔。
  • add_cnt:线网类型(wire)信号,用于指示是否进行计数操作。
  • end_cnt:线网类型(wire)信号,用于指示计数是否结束(即达到 0.25 秒的时间)。

计数器逻辑(cnt 部分)

  • 采用时序逻辑(always @(posedge sys_clk or negedge rst_n)),在时钟上升沿或复位信号下降沿时触发。
    • 当 rst_n 为低电平时(复位),cnt 被置为 0。
    • 当 add_cnt 为高电平时(允许计数):
      • 如果 end_cnt 为高电平(计数结束),cnt 被置为 0,重新开始计数。
      • 否则,cnt 加 1,继续计数。

控制信号赋值

  • add_cnt 被赋值为 1,意味着始终允许计数器进行计数操作。
  • end_cnt 是一个组合逻辑信号,当 add_cnt 为 1 且 cnt 计数到 10_000_000 - 1 时,end_cnt 为 1,表示计数结束(即经过了 0.25 秒,假设系统时钟频率为 40MHz,10_000_000 个时钟周期约为 0.25 秒)。

LED 控制逻辑

  • 同样采用时序逻辑(always @(posedge sys_clk or negedge rst_n))。
    • 当 rst_n 为低电平时(复位),led 被置为 4'b1110,这是复位后的初始状态(可以根据实际硬件连接,确定具体哪个 LED 亮灭)。
    • 当 end_cnt 为高电平时(计数结束,即经过 0.25 秒),led 进行循环移位操作({led[2:0], led[3]}),实现 LED 状态的切换。
    • 否则,led 保持当前状态不变。
// 模块名称:led_flash
// 功能描述:实现4个LED按0.25秒间隔循环移位闪烁
// 输入信号:sys_clk(系统时钟)、rst_n(复位信号,低电平有效)
// 输出信号:led(4位,控制4个LED的亮灭状态)
module led_flash(input        sys_clk,  // 系统时钟,假设频率为40MHzinput        rst_n,    // 复位信号,低电平有效output reg [3:0] led   // 4位LED输出,高/低电平对应LED亮/灭(取决于硬件设计)
);// 内部信号定义
reg [27:0] cnt;           // 28位计数器,用于计时(最大计数2^28-1,满足计时需求)
wire       add_cnt;       // 计数使能信号,为1时允许计数器递增
wire       end_cnt;       // 计数结束信号,为1时表示达到设定时间// 计数器时序逻辑:在时钟上升沿或复位下降沿更新计数器值
always @(posedge sys_clk or negedge rst_n) beginif(!rst_n) begin           // 复位状态:计数器清零cnt <= 28'd0;endelse if(add_cnt) begin     // 计数使能有效if(end_cnt) begin      // 计数达到目标值:计数器清零,重新计数cnt <= 28'd0;endelse begin             // 未达到目标值:计数器递增cnt <= cnt + 28'd1;endendelse begin                 // 计数使能无效:保持当前值cnt <= cnt;end
end// 计数使能信号:始终为1,让计数器持续工作
assign add_cnt = 1'b1;// 计数结束信号:当计数器达到10,000,000-1时为1
// 计算依据:40MHz时钟周期为25ns,10,000,000个周期 = 10,000,000 × 25ns = 0.25秒
assign end_cnt = add_cnt && (cnt == 28'd9_999_999);// LED控制时序逻辑:在时钟上升沿或复位下降沿更新LED状态
always @(posedge sys_clk or negedge rst_n) beginif(!rst_n) begin           // 复位状态:初始LED状态为4'b1110(假设低电平点亮,此时最右侧LED亮)led <= 4'b1110;endelse if(end_cnt) begin     // 每0.25秒更新一次LED状态:循环左移一位// 移位逻辑:将低3位移到高3位,最高位移到最低位// 例:1110 → 1101 → 1011 → 0111 → 1110(循环)led <= {led[2:0], led[3]};endelse begin                 // 未到更新时间:保持当前LED状态led <= led;end
endendmodule

2.通过本程序对FPGA的进一步理解

硬件并行特性与非软件式循环

FPGA 是基于硬件描述语言(如 Verilog、VHDL)进行设计,本质上是对硬件电路的描述。 它通过配置可编程逻辑单元(如查找表、触发器等)和布线资源来实现特定功能。硬件电路一旦上电配置完成,各个功能模块会并行地持续工作。比如在一个简单的流水灯 FPGA 设计中,计数器模块和 LED 控制模块是同时在工作的,不存在像软件程序中由 CPU 一条一条按顺序执行指令那样的循环。

时钟驱动下的持续状态更新

FPGA 中的时序逻辑(如触发器、寄存器等)通常由时钟信号驱动。以之前提到的 LED 闪烁控制模块为例,在时钟上升沿或者下降沿,相关寄存器(如计数器 cnt 、LED 输出寄存器 led )会根据当前的输入信号和逻辑条件来更新状态。 时钟信号不断地产生上升沿或下降沿,就会让这些模块持续不断地进行状态更新,看起来就好像是在 “循环运行”。

组合逻辑的即时响应

FPGA 中的组合逻辑部分,如加法器、多路选择器等,只要输入信号发生变化,输出就会立即根据逻辑关系进行更新。比如一个由组合逻辑实现的简单运算电路,输入数据一旦改变,输出会马上重新计算得出新值,这种持续根据输入变化而即时响应的特性,也会给人一种在不断 “运行” 的感觉。

状态机与类似循环的操作

状态机是 FPGA 设计中常用的一种设计方法。在状态机里,会根据当前状态和输入信号决定下一个状态。 当状态机进入一个循环状态序列时,就会在这些状态之间不断切换,从而实现特定的功能。比如一个交通灯控制状态机,会在 “红灯 - 绿灯 - 黄灯” 等状态间循环切换,从宏观功能上看就像是在循环运行。

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

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

相关文章

从零到上线:Docker、Docker Compose 与 Runtime 安装部署全指南(含实战示例与应用场景)

文章目录一、Docker 安装1. Ubuntu / Debian&#xff08;官方仓库&#xff09;2. RHEL / CentOS / Rocky / AlmaLinux3. 验证4. macOS / Windows&#xff08;Docker Desktop&#xff09;二、Docker Compose&#xff08;V2&#xff09;安装与基本用法1) 验证2) 最小示例&#xf…

Java基础篇02:基本语法

1 注释 注释是写在程序中对代码进行解释说明的文字&#xff0c;方便自己和其他人查看&#xff0c;以便理解程序的。注释分为三种&#xff1a;单行注释、多行注释、文档注释注释不影响代码的执行&#xff1a; 原因是编译后的文件已经没有注释了// 这是单行注释&#xff1a;。通常…

【SECS/GEM 】SECS/GEM 日志管理相关的消息

明白 ✅ 在 SECS/GEM 架构里&#xff0c;设备日志&#xff08;Equipment Logging 主要涉及 事件日志&#xff08;Event Log&#xff09;、报警日志&#xff08;Alarm Log&#xff09;、配方操作日志&#xff08;Recipe Log&#xff09;、以及用户操作/命令日志。这些日志通过 S…

ragas 框架使用Chat-GLM模型报API 调用参数有误,请检查文档

ragas 框架使用Chat-GLM模型报API 调用参数有误&#xff0c;请检查文档解决方案 from ragas.llms import LangchainLLMWrapper # 点击LangchainLLMWrapper 进入这个类找到这个方法直接 return 0.1出现问题原因 ChatGLM 不支持设置temperature等于0&#xff0c;默认的值太小了

Kaggle - LLM Science Exam 大模型做科学选择题

Kaggle - LLM Science Exam Science Exam Simple Approach w/ Model Hub | Kaggle Platypus2-70B with Wikipedia RAG | Kaggle 5个选项只有一个选项正确&#xff0c;目标&#xff1a;回答一个选项序列&#xff08;只有前三个有效&#xff09; 输出正确选项 &#xff08;可…

贪吃蛇鱼小游戏抖音快手微信小程序看广告流量主开源

核心优势&#xff1a;为流量主运营者与新手量身打造 1. 为流量主运营者破解成本困局 本地化运行&#xff0c;零服务器成本&#xff1a;数据运行与存储全程在用户手机本地完成&#xff0c;无需部署服务器及后台系统&#xff0c;彻底摆脱服务器租赁、维护等硬性支出&#xff0c;…

PDF Reader 编辑阅读工具(Mac中文)

原文地址&#xff1a;PDF Reader 编辑阅读 for Mac v5.2.0 PDF Reader Pro Mac&#xff0c;是一款PDF编辑阅读&#xff0c;PDF Reader Pro让您直接在 Mac 上进行PDF文件阅读、笔记、编辑、转换、创建PDF、签署PDFs、填写PDF Forms表单、设置密码、合并拆分文件、水印等等&…

Django REST framework:SimpleRouter 使用指南

1. SimpleRouter 是什么&#xff1f; SimpleRouter 是 DRF&#xff08;Django REST framework&#xff09;提供的路由器&#xff0c;能根据 ViewSet 自动生成标准的 REST 路由&#xff0c;包括&#xff1a; GET /resources/ → 列表&#xff08;list&#xff09;POST /resource…

覆盖Transformer、GAN:掩码重建正在重塑时间序列领域!

随着大数据与深度学习的发展&#xff0c;时间序列分析的建模能力显著提升&#xff0c;而掩码重建作为一种自监督学习范式&#xff0c;已成为提升序列表征能力的重要技术。该方法通过随机掩码部分数据并重建原始序列&#xff0c;迫使模型挖掘时序依赖性与潜在模式&#xff0c;在…

用AI做TikTok影视解说,全流程全自动成片,不懂外语也能做全球矩阵!

多语种解说&#xff1a; 短剧出海狂吸美金 多语种解说抢先机 TikTok、YouTube等平台&#xff0c;尤其在非英语市场&#xff0c;内容供给仍远远不足&#xff0c;每一个小语种市场都是潜在蓝海。 有人用英语讲仙侠、西语讲爽剧、日语讲宫斗、阿语讲悬疑&#xff0c;一夜涨粉百…

解密大语言模型推理:输入处理背后的数学与工程实践

解密大语言模型推理&#xff1a;输入处理背后的数学与工程实践当你向ChatGPT提问时&#xff0c;短短几秒内就能获得流畅的回答&#xff0c;这背后隐藏着怎样的技术魔法&#xff1f;答案在于大语言模型高效推理过程中精妙的输入处理机制。在现代大语言模型推理中&#xff0c;输入…

02、连接服务器的几种方式

02、连接服务器的几种方式 1、Xshell 适用于Windows https://www.xshell.com/en/free-for-home-school/ 2、Termius 适用于MacOS 直接苹果商店下载即可 3、IDEA 连接 Tools - Deployment - Browse Remote Host 1、打开Browse Remote Host2、添加服务3、输入服务器连接信息并测试…

高并发系统设计方案(直播场景)

最近在准备面试&#xff0c;正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解&#xff0c;以及高频业务场景的应对策略系统梳理一遍&#xff0c;既能加深记忆&#xff0c;也能让知识体系更扎实&#xff0c;供大家参考&#xff0c;欢迎讨论。 1. 微服务拆分 …

网络编程基础:一文搞懂 Socket、HTTP、HTTPS、TCP/IP、SSL 的关系

在日常开发中&#xff0c;我们经常听到 Socket、HTTP、HTTPS、TCP/IP、SSL 这些术语&#xff0c;这些概念往往容易混淆&#xff0c;且让人感到困惑。本文将用最通俗易懂的方式来讲清这些网络概念及其相互关系。一、从寄信说起&#xff1a;网络通信的本质假如你要给远方的朋友寄…

查看LoRA 哪个适配器处于激活状态(67)

哪个适配器处于激活状态 当前哪个适配器处于激活状态?我们来查看active_adapter属性就知道了 peft_model.active_adapter输出 default试试另一个(适配器) 你更想试试另一个(适配器)吗?只需调用set_adapter()方法即可。 peft_model.set_adapter(yoda) peft_model.act…

​​Nginx高性能Web服务器实战:从协议原理到运维优化​​

目录 前言 一、Web基础概念 1.1 什么是Web&#xff1f; 1.2 B/S架构模型 1.3 Web请求与响应流程 1.4 静态资源 vs 动态资源 二、HTTP/HTTPS协议详解 2.1 HTTP与HTTPS区别 2.2 HTTPS握手流程 2.3 HTTP状态码大全 三、Nginx核心知识 3.1 Nginx简介 3.2 Nginx vs Apache 3.3 Nginx…

【先楫HPM5E00_EVK系列-板卡测评3】hpm5e00evk平台中断、定时器、PWM、USART等基础功能详解

此文介绍了利用先楫半导体&#xff08;hpm&#xff09;官方hpm5e00_evk开发板使用的主控芯片的一些原理性知识&#xff0c;无实验内容展示&#xff0c;主要汇总了先楫半导体hpm5e00主控芯片的中断、定时器、pwm、usart等功能&#xff0c;主要内容来源于B站“HPM_FAE”的视频和官…

golang 依赖管理

目录 演进过程 1. GOPATH 阶段&#xff08;Go 1.0 - 1.10&#xff0c;2012 - 2018&#xff09; 2. Vendor 机制阶段&#xff08;Go 1.5 实验性引入&#xff0c;1.6 正式支持&#xff0c;2015 - 2018&#xff09; 3. Go Modules 过渡期&#xff08;Go 1.11 - 1.16&#xff0…

概率论—随机事件与概率

文章目录考纲术语事件的关系与运算关系运算古典概型概念和性质放入问题——随机分配取出问题——简单随机抽样问题几何概型概率的性质与计算性质计算事件的独立性和独立的判定事件的独立性判定定理举反例的思想独立试验序列概型与n重伯努利概型错题考纲 术语 (随机)试验随机事…

达梦:存储过程实现多个用户之间表的授权

一、背景在某项目现场&#xff0c;开发商想实现4个用户之间能互相拥有表的查询、删除、插入、更新权限和存储过程的执行权限。此过程只要在新增表之后&#xff0c;其他用户的权限需要授权&#xff0c;如果是手动写&#xff0c;一张表的授权就要写至少3次sql语句&#xff0c;如果…