狀態機思想編程練習

狀態機實現LED流水燈

????????本次實驗,我們將利用狀態機的思想來進行Verilog編程實現一個LED流水燈,并通過Modelsim來進行模擬仿真,再到DE2-115開發板上進行驗證。 ? 首先進行主要代碼的編寫。

?module led (input ? ? ? ?sys_clk,input ? ? ? ?sys_rst_n,output reg [7:0] led);?// 狀態定義(8個狀態)parameter S0 = 3'd0,S1 = 3'd1,S2 = 3'd2,S3 = 3'd3,S4 = 3'd4,S5 = 3'd5,S6 = 3'd6,S7 = 3'd7;?parameter MAX_COUNT = 25_000_000; // 0.5秒@50MHz?reg [2:0] current_state;    // 當前狀態寄存器reg [2:0] next_state;       // 下一狀態寄存器reg [25:0] counter;         // 26位定時計數器?// 狀態寄存器always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n)current_state <= S0;                // 異步復位else ? ? ? ?current_state <= next_state;    // 正常狀態轉移end?// 計數器邏輯always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n)counter <= 0;       // 復位清零else if (current_state != next_state)counter <= 0;       // 狀態切換時清零elsecounter <= counter + 1;end?// 狀態轉移邏輯always @(*) begincase (current_state)S0: next_state = (counter == MAX_COUNT-1) ? S1 : S0;S1: next_state = (counter == MAX_COUNT-1) ? S2 : S1;S2: next_state = (counter == MAX_COUNT-1) ? S3 : S2;S3: next_state = (counter == MAX_COUNT-1) ? S4 : S3;S4: next_state = (counter == MAX_COUNT-1) ? S5 : S4;S5: next_state = (counter == MAX_COUNT-1) ? S6 : S5;S6: next_state = (counter == MAX_COUNT-1) ? S7 : S6;S7: next_state = (counter == MAX_COUNT-1) ? S0 : S7;default: next_state = S0;endcaseend?// 輸出邏輯(循環右移模式)always @(*) begincase (current_state)S0: led = 8'b00000001;S1: led = 8'b00000010;S2: led = 8'b00000100;S3: led = 8'b00001000;S4: led = 8'b00010000;S5: led = 8'b00100000;S6: led = 8'b01000000;S7: led = 8'b10000000;default: led = 8'b00000001;endcaseend?endmodule

????????然后為了能在Modelsim中進行模擬仿真,我們還需要編寫一個測試模塊代碼。

?`timescale 1ns/1ps?module tb_led();?reg sys_clk;reg sys_rst_n;wire [7:0] led;?// 實例化被測試模塊(縮小計數器值便于仿真)led_fsm_8bit #(.MAX_COUNT(3)) uut (.sys_clk(sys_clk),.sys_rst_n(sys_rst_n),.led(led));?// 生成50MHz時鐘initial beginsys_clk = 0;forever #10 sys_clk = ~sys_clk;  // 20ns周期=50MHzend?// 測試流程控制initial begin// 初始化sys_rst_n = 0;#20; ? ? ? ? ? ? ? ? ?  // 等待一個時鐘上升沿sys_rst_n = 1;// 運行2000ns(觀察完整狀態周期)#2000;$finish;end?// 監控輸出initial begin$monitor("Time = %tns | State = %d | LED = %08b",$time, uut.current_state, led);end?endmodule

????????編寫完測試代碼并成功編譯后,就可以準備進行模擬仿真了,首先對仿真文件進行綁定,選擇Setting-->EDA Tool Settings-->Simulation。

????????然后就可以進行模擬仿真了。

????????仿真完成后,進行DE2-115開發板的實物驗證。首先對管腳進行配置。

????????把程序燒錄到開發板,就可以看到效果。

CPLD和FPGA

對比維度CPLDFPGA
核心架構基于乘積項(Product-Term)和宏單元(Macrocell),結構簡單,邏輯資源有限基于查找表(LUT)和寄存器,邏輯單元(LE)靈活組合,資源豐富
存儲技術采用EEPROM或Flash工藝,非易失性,無需外部配置芯片基于SRAM工藝,掉電丟失配置數據,需外部存儲器
資源規模邏輯單元較少(幾十至幾百宏單元),適合小規模邏輯設計邏輯單元可達數百萬級,支持大規模復雜設計
時序特性連續式布線,延遲均勻且可預測分段式布線,延遲不可預測
功耗靜態功耗較高,適合低復雜度場景動態功耗優化更好,適合高性能計算
編程靈活性編程次數有限(約1萬次),邏輯固化后不可重構支持無限次動態重構,靈活適配不同算法
啟動時間上電即用,無需配置時間需從外部加載配置數據,存在啟動延遲

????????CPLD的典型應用場景:簡單邏輯控制比如狀態機、地址譯碼、總線控制等組合邏輯密集型任務;某些接口的轉換,比如電平轉換(TTL與LVDS)、I/O擴展、協議適配(SPI轉UART);膠合邏輯,這在復雜系統中作為“粘合劑”,可以連接不同功能模塊(DSP與存儲器間的控制邏輯);低功耗需求場景比如工業控制、儀器儀表中的簡單邏輯處理。 ?
????????FPGA的典型應用場景:復雜時序邏輯比如如高速數據處理(通信協議處理、雷達信號處理)、實時控制(自動駕駛傳感器融合);并行計算加速:數字信號處理(DSP)、AI推理、圖像處理(ISP算法加速);動態重構系統,常用于需要硬件功能隨需求變化的場景(軟件定義無線電);高性能計算如數據中心加速、加密解密、科學仿真等對算力要求高的領域。 ?
????????從設計復雜度上看,CPLD適用于門數小于1萬的設計,FPGA更適合大規模設計(>10萬門)。從時序要求上看,CPLD延遲可預測,適合實時性強的控制邏輯;FPGA雖延遲不可預測,但通過時序約束優化可實現高頻運行(如500MHz以上)。從功耗與成本上看,CPLD成本低但功耗較高,FPGA能效比更優但需要額外配置芯片。從技術融合趨勢上看,現代CPLD(如Altera MAX系列)逐漸采用FPGA的LUT架構,界限模糊,但核心差異仍存在。

hdlbitsFPGA組合邏輯練習

D觸發器

D鎖存器

Two gates

計數器1-12

簡單電路A

總結

????????本次實驗通過狀態機設計方法,成功實現了LED流水燈的Verilog編程,并在Modelsim中進行了仿真驗證,最終在DE2-115開發板上進行了實物驗證。此外,通過對CPLD和FPGA的對比分析,進一步加深了對這兩種器件的理解,為今后的設計提供了參考。

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

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

相關文章

數據結構|排序算法(一)快速排序

一、排序概念 排序是數據結構中的一個重要概念&#xff0c;它是指將一組數據元素按照特定的順序進行排列的過程&#xff0c;默認是從小到大排序。 常見的八大排序算法&#xff1a; 插入排序、希爾排序、冒泡排序、快速排序、選擇排序、堆排序、歸并排序、基數排序 二、快速…

如何確保MQ消息隊列不丟失:Java實現與流程分析

前言 在分布式系統中&#xff0c;消息隊列&#xff08;Message Queue, MQ&#xff09;是核心組件之一&#xff0c;用于解耦系統、異步處理和削峰填谷。然而&#xff0c;消息的可靠性傳遞是使用MQ時需要重點考慮的問題。如果消息在傳輸過程中丟失&#xff0c;可能會導致數據不一…

關于termux運行pc交叉編譯的aarch64 elf的問題

在Linux系統上交叉編譯Nim程序到Android Termux環境需要特殊處理&#xff0c;以下是詳細的解決方案&#xff1a; 問題根源分析 ??ABI不兼容?? Android使用bionic libc而非標準glibc&#xff0c;直接編譯的Linux ARM二進制無法直接運行 ??動態鏈接錯誤?? 默認編譯會鏈…

為PXIe控制器配置NI Linux實時操作系統安裝軟件

一、升級BIOS 使用NI Linux Real-Time操作系統的PXI硬件支持頁面來確定NI Linux Real-Time是否支持您的PXIe控制器&#xff0c;以及是否需要更新控制器BIOS。 按照BIOS下載頁面上的“安裝說明”部分安裝BIOS更新。 注意&#xff1a;NI在NI 2020軟件版本中刪除對cRIO的Phar Lap和…

《汽車噪聲控制》課程作業

作業內容 在MATLAB繪制給出單個正弦波或余弦波的時域圖和頻域圖 繪制實測數據的時域圖和頻域圖 圖1 單個正弦波的時頻圖 圖1 單個正弦波的時頻圖 % 正弦波參數設置 f0 1000; % 信號頻率 1kHz Fs 16384; % 采樣頻率 16kHz T 0.05; % 信號持續時間 0.05秒 A 0.8; % 信號幅度…

Baklib內容中臺AI技術協同應用

內容中臺與AI協同創新 在數字化轉型進程中&#xff0c;內容中臺通過人工智能技術的深度整合&#xff0c;正重塑企業信息管理范式。以Baklib內容中臺為例&#xff0c;其通過智能語義分析引擎解析用戶意圖&#xff0c;結合知識圖譜構建技術動態關聯碎片化信息&#xff0c;實現從…

壓測工具開發實戰篇(二)——構建側邊欄以及設置圖標字體

你好&#xff0c;我是安然無虞。 文章目錄 構建側邊欄QtAwesome使用調整側邊欄寬度了解: sizePolicy屬性偽狀態 在閱讀本文之前, 有需要的老鐵可以先回顧一下上篇文章: 壓測工具開發(一)——使用Qt Designer構建簡單界面 構建側邊欄 我們要實現類似于下面這樣的側邊欄功能: …

Axure RP9.0教程: 查詢條件隱藏與顯示(綜合了動態面板狀態切換及展開收縮效果實現)

文章目錄 引言I 原型顯示/隱藏搜索框思路步驟詳細操作II 若依 ruoyi 顯示/隱藏搜索框 & 顯示隱藏列自定義設置顯示隱藏列顯示/隱藏搜索框引言 數據篩選有大量的查詢條件時,可以選擇查詢隱藏效果。 I 原型顯示/隱藏搜索框 綜合了動態面板狀態切換及展開收縮效果實現 思…

解鎖工業通信:Profibus DP到ModbusTCP網關指南!

解鎖工業通信&#xff1a;Profibus DP到ModbusTCP網關指南&#xff01; 在工業自動化領域&#xff0c;隨著技術的不斷進步和應用場景的日益復雜&#xff0c;不同設備和系統之間的通訊協議兼容性問題成為了工程師們面臨的一大挑戰。尤其是在Profibus DP和Modbus/TCP這兩種廣泛應…

3維格式轉換(二)

基于python的三維模型演化可視化 本項目的主要內容為總結了3種不同的可視化方案( trimesh + matplotlib 庫、 pyvista 庫、 vedo 庫),并通過案例對可視化效果進行展示,最終通過模型動態演化案例給出最佳效果的可視化方案 本期結構圖為 本期博客結構圖 0 環境搭建 項目開…

docker導出image再導入到其它docker中

導出image docker save -o gxc_tenant.tar vue_tenant:1.0 eitc_tenant:1.0 redis:latest docker.io/mysql:8.0 minio/minio導入image docker load -i gxc_tenant.tar

Spring-IOC部分

Spring-IOC部分 1.SpringBean的配置詳解&#xff08;Bean標簽&#xff09; &#xff08;1&#xff09;scope 默認情況下&#xff0c;單純的Spring環境Bean的作用范圍有兩個&#xff1a;Singleton和Prototype singleton&#xff1a;單例&#xff0c;默認值&#xff0c;Spring…

人工智能爬蟲導致維基共享資源帶寬需求激增 50%

2025 年 4 月 1 日&#xff0c;維基媒體基金會在博文中表示&#xff0c;自 2024 年 1 月以來&#xff0c;維基共享資源下載多媒體的帶寬消耗激增 50%&#xff0c;這一變化趨勢主要由用于 AI 訓練數據集的網絡爬蟲導致。以下是具體分析1&#xff1a; 爬蟲流量特征與數據存儲模式…

2007-2019年各省地方財政交通運輸支出數據

2007-2019年各省地方財政交通運輸支出數據 1、時間&#xff1a;2007-2019年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標&#xff1a;行政區劃代碼、地區、年份、地方財政交通運輸支出 4、范圍&#xff1a;31省 5、指標說明&#xff1a;地方財政交通運輸支出是指地方…

【爬蟲開發】爬蟲開發從0到1全知識教程第14篇:scrapy爬蟲框架,介紹【附代碼文檔】

本教程的知識點為&#xff1a;爬蟲概要 爬蟲基礎 爬蟲概述 知識點&#xff1a; 1. 爬蟲的概念 requests模塊 requests模塊 知識點&#xff1a; 1. requests模塊介紹 1.1 requests模塊的作用&#xff1a; 數據提取概要 數據提取概述 知識點 1. 響應內容的分類 知識點&#xff1a…

【CMake】《CMake構建實戰:項目開發卷》筆記-Chapter8-生成器表達式

第8章 生成器表達式 生成器表達式&#xff08;generator expression&#xff09;是由CMake生成器進行解析的表達式&#xff0c;因此&#xff0c;這些表達式只有在CMake的生成階段才被解析為具體的值。 CMake在生成階段&#xff0c;能夠根據具體選用的構建系統生成器生成特定…

Docker安裝、配置Mysql5.7

1.創建必要的目錄 # 創建目錄 mkdir -p ~/docker/software/mysql/{conf,log,data} 2.如果沒有docker-compose.yml文件的話&#xff0c;先創建docker-compose.yml 配置文件一般長這個樣子 version: 3services:mysql:image: mysql:5.7.36container_name: mysqlports:- "…

【C++學習筆記】十三、速通筆記

完整的C編程教程 目錄 開發環境配置C知識體系現代C特性設計模式數據結構CMake項目構建調試技巧進階主題學習資源 1. 開發環境配置 1.1 安裝編譯器 sudo apt-get install g build-essential1.2 安裝構建工具 sudo apt-get install cmake1.3 VS Code配置 安裝C擴展配置調試…

網絡運維學習筆記(DeepSeek優化版)027 OSPF外部路由計算

文章目錄 OSPF外部路由計算1. 實驗拓撲與基礎配置2. 關鍵配置命令2.1 引入靜態路由2.2 查看路由表 3. LSA生成與傳播分析3.1 ASBR角色通告&#xff08;1類LSA&#xff09;3.2 外部路由通告&#xff08;5類LSA&#xff09;3.3 外部路由引入過程 4. 5類LSA關鍵字段解析5. 外部路由…

【Python使用】嘿馬推薦系統全知識和項目開發教程第2篇:1.4 案例--基于協同過濾的電影推薦,1.5 推薦系統評估【附代碼

教程總體簡介&#xff1a;1.1 推薦系統簡介 學習目標 1 推薦系統概念及產生背景 2 推薦系統的工作原理及作用 3 推薦系統和Web項目的區別 1.3 推薦算法 1 推薦模型構建流程 2 最經典的推薦算法&#xff1a;協同過濾推薦算法&#xff08;Collaborative Filtering&#xff09; 3 …