【FPGA】狀態機思想回顧流水燈

【FPGA】狀態機思想回顧流水燈

    • 一、LED流水燈實現
      • 1. 基本要求
      • 2. 狀態機思想
      • 3. 關鍵代碼
      • 4. 仿真測試
      • 5. 效果演示
    • 二、CPLD和FPGA
      • 1. 技術區別
      • 2. 應用場景
    • 三、HDLbits組合邏輯題目
    • 四、實驗總結

一、LED流水燈實現

1. 基本要求

  • 狀態機思想寫一個 LED流水燈的FPGA代碼
  • 寫出仿真測試代碼,用Modelsim進行仿真分析
  • DE2-115板上驗證

2. 狀態機思想

用狀態機思想的話,流水燈通常可以用幾個狀態來表示不同的LED亮的位置。

比如,每個狀態對應一個LED亮,然后通過狀態轉移來實現流動的效果。由于我們流水燈是8個燈亮,所以對應8個狀態。

所以,狀態機的狀態定義可能如下:

狀態S0: LED[0]亮
狀態S1: LED[1]亮

狀態S7: LED[7]亮

流水燈就是一個狀態持續一段時間再進入下一個狀態。

3. 關鍵代碼

// File: led_flow.v
module led_flow(input clk,          // 50MHz時鐘 (DE2-115 PIN_Y2)input rst_n,        // 復位信號 (低電平有效)output reg [7:0] led// LED輸出 (DE2-115 LEDG7-LEDG0)
);// 狀態定義
localparam S0 = 3'b000; // 初始狀態:LED0亮
localparam S1 = 3'b001;
localparam S2 = 3'b010;
localparam S3 = 3'b011;
localparam S4 = 3'b100;
localparam S5 = 3'b101;
localparam S6 = 3'b110;
localparam S7 = 3'b111;// 內部信號
reg [2:0] state;        // 當前狀態
reg [24:0] cnt;         // 分頻計數器
wire en;                // 狀態切換使能(0.5Hz)// 0.5Hz分頻(0.5秒切換)
assign en = (cnt == 25'd24_999_999); // 50MHz/(25M+1) ≈ 0.5Hz// 分頻計數器
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'b0000_0001; // 初始狀態endelse if(en) begincase(state)S0: begin led <= 8'b0000_0010; state <= S1; endS1: begin led <= 8'b0000_0100; state <= S2; endS2: begin led <= 8'b0000_1000; state <= S3; endS3: begin led <= 8'b0001_0000; state <= S4; endS4: begin led <= 8'b0010_0000; state <= S5; endS5: begin led <= 8'b0100_0000; state <= S6; endS6: begin led <= 8'b1000_0000; state <= S7; endS7: begin led <= 8'b0000_0001; state <= S0; enddefault: state <= S0;endcaseend
endendmodule

4. 仿真測試

寫完代碼后,參考連接博客進行仿真。
Quartus使用步驟及聯合Modelsim仿真教程-
知安的小白
操作步驟這篇博客講的很清楚了,一同操作后的效果截圖如下
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

仿真代碼(tb_led_flow.v)

// File: tb_led_flow.v
`timescale 1ns/1ps
module tb_led_flow();reg clk;
reg rst_n;
wire [7:0] led;// 實例化被測模塊
led_flow uut(.clk(clk),.rst_n(rst_n),.led(led)
);// 生成50MHz時鐘
initial beginclk = 0;forever #10 clk = ~clk; // 20ns周期=50MHz
end// 測試激勵
initial begin// 初始化rst_n = 0;#100;rst_n = 1;// 觀察10個狀態周期#100000000; // 仿真10ms(實際應仿真更長時間)$stop;
endendmodule

下面是仿真波形:
在這里插入圖片描述

5. 效果演示

[FPGA]狀態機思想回顧流水燈演示效果

二、CPLD和FPGA

1. 技術區別

特性特性FPGA
結構乘積項邏輯查找表(LUT)結構
邏輯容量通常<10萬門可達數百萬邏輯單元
布線結構固定互聯可編程互聯
時序特性確定延遲布線依賴延遲
存儲資源有限包含專用Block RAM
配置方式非易失,上電即用通常需要外部配置芯片
功耗低靜態功耗高動態功耗
適用場景膠合邏輯、狀態機復雜算法、并行處理

2. 應用場景

  • CPLD典型應用:
    接口協議轉換(UART、SPI)
    簡單狀態機控制
    地址譯碼電路
    上電時序管理

  • FPGA典型應用:
    數字信號處理(FIR濾波器)
    高速接口(PCIe、DDR)
    圖像處理流水線
    協議加速(TCP/IP Offload)

三、HDLbits組合邏輯題目

HDLbits問題集(Verilog)精選題目及解答

題目1:Exams/m2014 q4g
在這里插入圖片描述

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

題目2:Gates
Module Declaration
module top_module(
input a, b,
output out_and,
output out_or,
output out_xor,
output out_nand,
output out_nor,
output out_xnor,
output out_anotb
);
大概意思就是寫個邏輯語句實現名稱。

module top_module( input a, b,output out_and,output out_or,output out_xor,output out_nand,output out_nor,output out_xnor,output out_anotb
);assign out_and=a&b;assign out_or=a|b;assign out_xor=a^b;assign out_nand=~(a&b);assign out_nor=~(a|b);assign out_xnor=~(a^b);assign out_anotb=a&(~b);
endmodule

題目3:Arithmetic Circuits–Adder(加法器設計)
在這里插入圖片描述

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

題目4:7420
74LS20芯片內部邏輯電路如下,由兩個nand(與非門)組成。需要寫個語句實現7420功能。
在這里插入圖片描述

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

題目5:Truthtable1
在這里插入圖片描述
按真值表實現電路。
如果數電學的不好不知道怎么辦的話,可以用logisim,點擊Project->Analyze Circuit->Table:
在這里插入圖片描述
再點擊Build Circuit就生成電路圖了。
在這里插入圖片描述

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

四、實驗總結

本次實驗掌握了狀態機編程思想,事實上,狀態機思想也更簡易更容易想到。

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

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

相關文章

Python網絡爬蟲:從入門到實踐

目錄 什么是網絡爬蟲&#xff1f; 網絡爬蟲的工作原理 常用Python爬蟲庫 編寫爬蟲的步驟 實戰示例 注意事項與道德規范 未來趨勢 1. 什么是網絡爬蟲&#xff1f; 網絡爬蟲&#xff08;Web Crawler&#xff09;是一種自動化程序&#xff0c;通過模擬人類瀏覽行為&#x…

3D意識(3D Awareness)淺析

一、簡介 3D意識&#xff08;3D Awareness&#xff09;主要是指視覺基礎模型&#xff08;visual foundation models&#xff09;對于3D結構的意識或感知能力&#xff0c;即這些模型在處理2D圖像時是否能夠理解和表示出圖像中物體或場景的3D結構&#xff0c;其具體體現在編碼場景…

紅包-算法

function resPackage(money,num){// 總金額 目前剩余總金額let sum money, currentsum moneylet res [];// 最大值for(let i 0;i<num-1;i){let n parseFloat((Math.random()*currentsum).toFixed(2)) //0-10的隨機數if(n<0.1) n 0.1;if(n>sum…

最小二乘求解器lstsq,處理帶權重和L2正則的線性回歸

目錄 代碼注釋版&#xff1a; 關鍵功能說明&#xff1a; torch.linalg.cholesky 的原理 代碼示例 Cholesky 分解的應用 與 torch.cholesky 的區別 總結 代碼注釋版&#xff1a; from typing import Optionalimport torchdef lstsq(matrix: torch.Tensor, rhs: torch.Te…

AI輔助下基于ArcGIS Pro的SWAT模型全流程高效建模實踐與深度進階應用

目前&#xff0c;流域水資源和水生態問題逐漸成為制約社會經濟和環境可持續發展的重要因素。SWAT模型是一種基于物理機制的分布式流域水文與生態模擬模型&#xff0c;能夠對流域的水循環過程、污染物遷移等過程進行精細模擬和量化分析。SWAT模型目前廣泛應用于流域水文過程研究…

DHT11數字溫濕度傳感器驅動開發全解析(下) | 零基礎入門STM32第八十八步

主題內容教學目的/擴展視頻DHT11芯片電路連接&#xff0c;手冊分析。驅動程序&#xff0c;讀出數據。能讀出溫濕度值即可。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、硬件接口與通信原理1.1 硬件連接拓撲1.2 單總線通信時序 二、驅動代碼深度解析&#xff…

24、網絡編程基礎概念

網絡編程基礎概念 網絡結構模式MAC地址IP地址子網掩碼端口網絡模型協議網絡通信的過程&#xff08;封裝與解封裝&#xff09; 網絡結構模式 C/S結構&#xff0c;由客戶機和服務器兩部分組成&#xff0c;如QQ、英雄聯盟 B/S結構&#xff0c;通過瀏覽器與服務器進程交互&#xf…

【超詳細】講解Ubuntu上如何配置分區方案

Ubuntu 的分區方案 一、通用分區方案&#xff08;200G為例&#xff09; EFI系統分區&#xff08;僅UEFI啟動模式需要&#xff0c;&#xff09; 大小&#xff1a;512MB–1GB類型&#xff1a;主分區&#xff08;FAT32格式&#xff09;掛載點&#xff1a;/boot/efi說明&#xff1…

函數的局部變量和全局變量的區分,Kimi的回答

這段代碼的目的是通過計算 2**i 和 5**i 的首位數字&#xff0c;并將這兩個首位數字的乘積添加到一個集合中&#xff0c;最終返回這些乘積的總和。下面是具體的解釋和問題的分析。 sum_t的角色&#xff1a; sum_t 是一個累加器&#xff0c;用來存儲所有獨特的&#xff08;不重復…

RNN模型及NLP應用(5/9)——多層RNN、雙向RNN、預訓練

聲明&#xff1a; 本文基于嗶站博主【Shusenwang】的視頻課程【RNN模型及NLP應用】&#xff0c;結合自身的理解所作&#xff0c;旨在幫助大家了解學習NLP自然語言處理基礎知識。配合著視頻課程學習效果更佳。 材料來源&#xff1a;【Shusenwang】的視頻課程【RNN模型及NLP應用…

【3.軟件工程】3.4 原型及相關模型

軟件開發模型進化論&#xff1a;從原型驅動到混合模型的完整指南 &#x1f504; 一、模型進化關系全景圖 #mermaid-svg-GcOFjt54gUs4oPeu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GcOFjt54gUs4oPeu .error-i…

硬件與軟件的邊界-從單片機到linux的問答詳解

硬件與軟件的邊界——從單片機到 Linux 設備驅動的問答詳解 在嵌入式開發和操作系統領域&#xff0c;經常會有人問&#xff1a; “如果一個設備里沒有任何代碼&#xff0c;硬件是不是依然會工作&#xff1f;例如&#xff0c;數據收發、寄存器數據存儲、甚至中斷觸發&#xff…

瑪卡巴卡的k8s知識點問答題(七)

25. 說明 Job 與 CronJob 的功能 Job 功能&#xff1a; 用于運行一次性任務&#xff08;批處理任務&#xff09;&#xff0c;確保一個或多個 Pod 成功完成任務后退出。 適用于數據處理、備份、測試等場景&#xff0c;任務完成后 Pod 不會自動重啟。 特點&#xff1a; 任務…

【NLP 51、一些LLM模型結構上的變化】

目錄 一、multi-head 共享 二、attention結構 1.傳統的Tranformer結構 2.GPTJ —— 平行放置的Transformer結構 三、歸一化層位置的選擇 1.Post LN&#xff1a; 2.Pre-LN【目前主流】&#xff1a; 3.Sandwich-LN&#xff1a; 四、歸一化函數選擇 1.傳統的歸一化函數 LayerNorm …

VS+Qt配置QtXlsx庫實現execl文件導入導出(全教程)

一、配置QtXlsx 1.1 下載解壓QtXlsxWriter&#xff08;在github下載即可&#xff09; 網址&#xff1a;https://github.com/dbzhang800/QtXlsxWriter 1.2 使用qt運行 點擊qtxlsx.pro運行QtXlsxWriter 選擇DesktopQt51211MSVC201564bit編譯器&#xff08;選擇自己本地電腦qt…

Golang的文件處理優化策略

Golang的文件處理優化策略 一、Golang的文件處理優化策略概述 是一門效率高、易于編程的編程語言&#xff0c;它的文件處理能力也非常強大。 在實際開發中&#xff0c;需要注意一些優化策略&#xff0c;以提高文件處理的效率和性能。 本文將介紹Golang中的文件處理優化策略&…

自學-C語言-基礎-數組、函數、指針、結構體和共同體、文件

這里寫自定義目錄標題 代碼環境&#xff1a;&#xff1f;問題思考&#xff1a;一、數組二、函數三、指針四、結構體和共同體五、文件問題答案&#xff1a; 代碼環境&#xff1a; Dev C &#xff1f;問題思考&#xff1a; 把上門的字母與下面相同的字母相連&#xff0c;線不能…

VMware+Ubuntu+VScode+ROS一站式教學+常見問題解決

目錄 一.VMware的安裝 二.Ubuntu下載 1.前言 2.Ubuntu版本選擇 三.VMware中Ubuntu的安裝 四.Ubuntu系統基本設置 1.中文更改 2.中文輸入法更改 3. 輔助工具 vmware tools 五.VScode的安裝ros基本插件 1.安裝 2.ros輔助插件下載 六.ROS安裝 1.安裝ros 2.配置ROS…

PostgreSQL pg_repack 重新組織表并釋放表空間

pg_repack pg_repack是 PostgreSQL 的一個擴展&#xff0c;它允許您從表和索引中刪除膨脹&#xff0c;并可選擇恢復聚集索引的物理順序。與CLUSTER和VACUUM FULL不同&#xff0c;它可以在線工作&#xff0c;在處理過程中無需對已處理的表保持獨占鎖定。pg_repack 啟動效率高&a…

5G_WiFi_CE_射頻輸出功率、發射功率控制(TPC)和功率密度測試

目錄 一、規范要求 1、法規目錄&#xff1a; &#xff08;1&#xff09;RF Output Power (2)Transmit Power Control (TPC) &#xff08;3&#xff09;Power Density 2、限值&#xff1a; 二、EIRP測試方法 &#xff08;1&#xff09;測試條件 &#xff08;2&#xff…