【FPGA基礎學習】狀態機思想實現流水燈

目錄

    • 一、用狀態機實現LED流水燈
      • 1.狀態機思想簡介
        • 1. 1基本概念
        • 1.2.核心要素
        • 1.3分類與模型
      • 2.LED流水燈
    • 二、CPLD與FPGA
        • 1.技術區別
        • 2.應用場景
        • 3.設計選擇建議
    • 三、HDLbits組合邏輯題目

一、用狀態機實現LED流水燈

1.狀態機思想簡介

1. 1基本概念

? 狀態機(Finite State Machine, FSM)是一種用于描述系統行為及其狀態轉換的數學模型。它將系統抽象為有限個狀態,并通過事件觸發實現狀態間的遷移,同時可能伴隨特定的動作。其核心思想是“基于狀態的邏輯控制”,適用于具有明確階段性和條件依賴性的系統

1.2.核心要素

? 現態(Current State):系統當前所處的狀態。

? 事件(Event):觸發狀態遷移的條件(如用戶輸入、傳感器信號等)

? 動作(Action):狀態遷移時執行的操作(如開啟設備、發送數據等)

? 次態(Next State):事件觸發后系統將進入的新狀態

1.3分類與模型

? Moore型:輸出僅由當前狀態決定(如交通信號燈的紅綠燈切換)

? Mealy型:輸出由當前狀態和輸入共同決定(如網絡協議中的應答機制)

? 確定型(DFA):每個狀態對同一事件有唯一遷移路徑

? 非確定型(NFA):同一事件可能觸發多個遷移路徑,需額外邏輯處理

2.LED流水燈

核心代碼如下:

module led_flow(input clk,          // 50MHz時鐘input rst_n,        // 復位信號(低有效)output reg [7:0] led
);// 狀態定義(8個狀態)localparam [2:0] S0=0, S1=1, S2=2, S3=3, S4=4, S5=5, S6=6, S7=7;reg [2:0] state;reg [24:0] cnt;wire en = (cnt == 25'd24_999_999); // 分頻使能// 分頻計數器always @(posedge clk or negedge rst_n) beginif (!rst_n) cnt <= 0;else if (en) cnt <= 0;else cnt <= cnt + 1;end// 狀態機主邏輯always @(posedge clk or negedge rst_n) beginif (!rst_n) beginstate <= S0;led <= 8'b00000001; // 初始狀態S0點亮LED0endelse if (en) begincase(state)S0: begin led <= 8'b00000010; state <= S1; end  //S0→S1(第2個LED亮)S1: begin led <= 8'b00000100; state <= S2; end  //S1→S2(第3個LED亮)S2: begin led <= 8'b00001000; state <= S3; end  //S2→S3(第4個LED亮)S3: begin led <= 8'b00010000; state <= S4; end  //S3→S4(第5個LED亮)S4: begin led <= 8'b00100000; state <= S5; end  //S4→S5(第6個LED亮)S5: begin led <= 8'b01000000; state <= S6; end  //S5→S6(第7個LED亮)S6: begin led <= 8'b10000000; state <= S7; end  //S6→S7(第8個LED亮)S7: begin led <= 8'b00000001; state <= S0; end  //S7→S0(第1個LED亮,循環)default: state <= S0;                          // 默認回到初始狀態endcaseendend
endmodule

仿真文件編寫:

`timescale 1ns / 1ps
module led_flow_tb;// 輸入信號reg clk;          // 50MHz時鐘reg rst_n;        // 復位信號(低有效)// 輸出信號wire [7:0] led;   // LED輸出// 實例化被測模塊led_flow uut (.clk(clk),.rst_n(rst_n),.led(led));// 1. 生成50MHz時鐘initial beginclk = 0;forever #10 clk = ~clk; // 周期20ns(50MHz)end// 2. 控制復位信號initial beginrst_n = 0;    // 初始復位有效#100;         // 保持100ns復位rst_n = 1;    // 釋放復位#2000000000;  // 仿真運行2秒(覆蓋多個狀態循環)$finish;      // 結束仿真end// 3. 監視信號變化initial begin$monitor("Time=%tns | State=%d | LED=%b", $time, uut.state, led);end
endmodule

仿真:

因為我流水燈的周期太長了,沒有辦法顯示全,所以調整分頻

  wire en = (cnt == 25'd4_999_999); // 分頻使能

image-20250404151421478

image-20250404151441645

image-20250404151501721

image-20250404151525754

image-20250404151552046

image-20250404151608280

image-20250404151624518

image-20250404151647958

可以看到仿真結果符合預期

引腳綁定:

image-20250404113908512

實現效果:

led 流水燈狀態機思想

二、CPLD與FPGA

1.技術區別
特性CPLDFPGA
架構基于乘積項(Product Term)結構,邏輯塊較大基于查找表(LUT)結構,邏輯單元粒度小
資源規模較小(通常<10萬門)較大(可達數百萬門)
時序特性延時均勻,可預測性強延時依賴布局布線,需時序約束優化**7
編程方式非易失性(EEPROM/Flash),無需外部配置易失性(SRAM),需外部存儲器加載配置
功耗靜態功耗低,適合低功耗場景動態功耗高,適合高性能計算
重構靈活性配置固定,不支持動態重構支持實時動態重構
2.應用場景
  • CPLD

    • 控制密集型系統:如接口轉換(UART轉SPI)、簡單狀態機、工業控制邏輯
    • 低功耗場景:電池供電設備,需長期穩定運行
    • 快速原型驗證:中小規模邏輯的快速實現
  • FPGA

    • 數據密集型系統:圖像處理、高速通信(如PCIe)、數字信號處理(DSP)

    • 復雜算法加速:深度學習推理、加密解密算法

    • 可重構計算:航天電子設備需在軌更新功能

3.設計選擇建議
  • 若需簡單邏輯控制且對成本敏感,選CPLD

  • 若需高性能并行處理或動態重構,選FPGA

三、HDLbits組合邏輯題目

HDLBits(點擊進入練習) 是一個專注于 Verilog硬件描述語言(HDL)學習和實踐 的在線平臺,由多倫多大學開發,旨在通過小型電路設計習題幫助用戶:夯實Verilog基礎、理解數字電路設計思想(例如狀態機設計、時序約束優化等關鍵概念)、銜接實際項目(平臺題目與FPGA開發中的常見模塊,如FIFO、接口控制器,高度相關)

題目1:簡單電路B

image-20250403213936883

module top_module ( input x, input y, output z );assign z = ~(x ^ y);
endmodule

題目2:Two gates

image-20250403212658031

module top_module (input in1,input in2,input in3,output out);assign out=(~(in1^in2))^in3;
endmodule

題目3:7420chip

image-20250403213030426

module top_module ( input p1a, p1b, p1c, p1d,output p1y,input p2a, p2b, p2c, p2d,output p2y );assign p1y=~(p1a&p1b&p1c&p1d);assign p2y=~(p2a&p2b&p2c&p2d);
endmodule

題目4:真值表

image-20250403215220173

module top_module( input x3,input x2,input x1,  // three inputsoutput f   // one output
);wire and1 = (~x3 & x2 & ~x1);wire and2 = (~x3 & x2 & x1);wire and3 = (x3 & ~x2 & x1);wire and4 = (x3 & x2 & x1);assign f = and1 | and2 | and3 | and4;
endmodule

題目5:加法器

image-20250403220105291

 module top_module (input [3:0] x, input [3:0] y, output [4:0] sum);assign sum = x + y;
endmodule

參考鏈接:

百度詞條CPLD與FPGA

CPLD與FPGA的用途及其區別

百度百科狀態機

聊一聊狀態機

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76295.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76295.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS語言的游戲AI

CSS語言的游戲AI探討 隨著技術的飛速發展&#xff0c;游戲行業也在不斷地革命和演變。游戲中的人工智能&#xff08;AI&#xff09;作為一種重要的設計元素&#xff0c;其復雜性和智能程度對游戲的體驗、玩法和整體表現都有著深遠的影響。近年來&#xff0c;CSS&#xff08;Ca…

docker配置redis容器時配置文件docker-compose.yml示例

1.配置數據節點&#xff08;主從節點&#xff09; version: 3.7 services:master:image: redis:5.0.9container_name: redis-masterrestart: alwayscommand: redis-server --appendonly yesports:- 6379:6379slave1:image: redis:5.0.9container_name: redis-slave1restart: a…

【WPF】IOC控制反轉的應用:彈窗但不互相調用ViewModel

全稱&#xff1a;Inversion of Control&#xff0c;控制反轉 場景&#xff1a;A頁面需要調用B/C頁面等&#xff0c;防止直接在VM中新建別的頁面實例&#xff0c;使用IOC設計架構&#xff1b; 創建Service&#xff0c;在Service中實現頁面的實例創建和定義頁面輸入輸出參數。 在…

MySQL學習筆記十五

第十七章組合查詢 17.1組合查詢 MySQL允許執行多個查詢&#xff08;多條SELECT語句&#xff09;&#xff0c;并將結果作為單個查詢結果集返回。這些組合查詢通常稱為并&#xff08;union&#xff09;或復合查詢&#xff08;compound query&#xff09;。 以下幾種情況需要使…

【MySQL】安裝

下載 MySQL :: MySQL Downloads 安裝 mysql 驗證

ffpyplayer+Qt,制作一個視頻播放器

ffpyplayerQt&#xff0c;制作一個視頻播放器 項目地址FFmpegMediaPlayerVideoWidget 項目地址 https://gitee.com/chiyaun/QtFFMediaPlayer FFmpegMediaPlayer 按照 QMediaPlayer的方法重寫一個ffpyplayer # coding:utf-8 import logging from typing import Unionfrom PySide…

Spring Boot 國際化配置項詳解

Spring Boot 國際化配置項詳解 1. 核心配置項分類 將配置項分為以下類別&#xff0c;便于快速定位&#xff1a; 1.1 消息源配置&#xff08;MessageSource 相關&#xff09; 控制屬性文件的加載、編碼、緩存等行為。 配置項作用默認值示例說明spring.messages.basename指定屬…

拍攝的婚慶視頻有些DAT的視頻文件打不開怎么辦

3-12 現在的婚慶公司大多提供結婚的拍攝服務&#xff0c;或者有一些第三方公司做這方面業務&#xff0c;對于視頻拍攝來說&#xff0c;有時候會遇到這樣一種問題&#xff0c;就是拍攝下來的視頻文件&#xff0c;然后會有一兩個視頻文件是損壞的&#xff0c;播放不了&#xff0…

【力扣hot100題】(073)數組中的第K個最大元素

花了兩天時間搞明白答案的快速排序和堆排序。 兩種都寫了一遍&#xff0c;感覺堆排序更簡單很多。 兩種都記錄一下&#xff0c;包括具體方法和易錯點。 快速排序 class Solution { public:vector<int> nums;int quicksort(int left,int right,int k){if(leftright) r…

【親測】Linux 使用 Matplotlib 顯示中文

文章目錄 安裝中文字體在Matplotlib中使用該字體來顯示中文 在 Linux 系統中使用 Matplotlib 繪制圖表時&#xff0c;如果需要顯示中文&#xff0c;可能會遇到中文字符顯示為方塊或者亂碼的問題。這是因為Matplotlib 默認使用的字體不支持中文。本文手把手帶你解決這個問題。 …

Redis Java 客戶端 之 SpringDataRedis

SpringDataRedis SpringData是Spring中數據操作的模塊&#xff0c;包含對各種數據庫的集成&#xff0c;其中對Redis集成模塊就叫做SpringDataRedis&#xff0c; 官方地址&#xff1a;https://spring.io/projects/spring-data-redis 特性&#xff1a; 提供了對不同Redis客戶端…

數字化轉型:重構生存邏輯,不止系統升級

數字化轉型不過是升級系統&#xff0c;砸了錢、耗了力&#xff0c;卻沒達到預期&#xff0c;競爭力也沒提升。實際上&#xff0c;數字化轉型是對企業生存邏輯的徹~底重構&#xff0c;關乎商業模式、運營流程等方方面面。? 很多企業覺得數字化轉型是 IT 部門的事&#xff0c;只…

C語言隊列的實現

目錄 ?編輯 &#xff08;一&#xff09;隊列的定義,初始化及創建結點 &#xff08;二&#xff09;入隊和出隊&#xff0c;以及取隊頭隊尾的數據 (三)銷毀隊列 隊列是指只允許在一端進行插入數據操作&#xff0c;在另?端進行刪除數據操作的特殊線性表&#xff0c;隊列具有先…

mapbox進階,使用本地dem數據,加載hillshade山體陰影圖層

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言1.1 ??mapboxgl.Map 地圖對象1.2 ??mapboxgl.Map style屬性1.3 ??hillshade 山體陰影圖層 api1.3.1 ??…

量子糾錯碼實戰:從Shor碼到表面碼

引言&#xff1a;量子糾錯的必要性 量子比特的脆弱性導致其易受退相干和噪聲影響&#xff0c;單量子門錯誤率通常在10?~10?量級。量子糾錯碼&#xff08;QEC&#xff09;通過冗余編碼測量校正的機制&#xff0c;將邏輯量子比特的錯誤率降低到可容忍水平。本文從首個量子糾錯…

10. git switch

基本概述 git switch是 Git 2.23 版本之后新增的命令&#xff0c;專門用于切換分支&#xff0c;目的是替代 git checkout 中與分支操作相關的功能&#xff0c;使命令語義更清晰、更安全。 基本用法 1.切換到已有分支 git switch <branch-name>常用選項 1.從當前分支…

LeetCode 熱題 100 堆

215. 數組中的第K個最大元素 給定整數數組 nums 和整數 k&#xff0c;請返回數組中第 **k** 個最大的元素。 請注意&#xff0c;你需要找的是數組排序后的第 k 個最大的元素&#xff0c;而不是第 k 個不同的元素。 你必須設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 …

PIXOR:基于LiDAR的3D檢測模型解析

目錄 1、前言 2、PIXOR介紹 2.1. 什么是PIXOR&#xff1f; 2.2. PIXOR如何工作&#xff1f; 3、表現和應用 3.1、PIXOR的性能表現 3.2、PIXOR的應用場景 3.3、PIXOR的局限性與挑戰 4. PIXOR的未來展望 5. 結語 1、前言 自動駕駛技術正以前所未有的速度發展&#xff…

Vue中權限控制的方案

文章目錄 源碼&#xff1a;一、頁面級1.1、路由守衛1.2、動態路由 二、按鈕級別2.1、通過v-if來判斷2.2、通過組件包裹的方式來判斷2.3、通過自定義指令的方式 三、接口級別 源碼&#xff1a; https://gitee.com/liu-qiang-yyds/sysPermission 一、頁面級 1.1、路由守衛 前端…

【OSG學習筆記】Day 1: OSG初探——環境搭建與第一個3D窗口

什么是 OSG&#xff1f; 全稱&#xff1a;OpenSceneGraph&#xff08;開源場景圖&#xff09; 定位&#xff1a;一個基于 C/OpenGL 的高性能開源3D圖形開發工具包&#xff0c;專注于實時渲染和復雜場景管理。 核心思想&#xff1a;通過 場景圖&#xff08;Scene Graph&#xf…