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
英文地址,請注明出處:http://en.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;如果…