FPGA狀態機思想實現流水燈及HDLBits學習

目錄

    • 第一章 在DE2-115上用狀態機思想實現LED流水燈
      • 1.1 狀態機設計思路
      • 1.2 Verilog代碼實現
      • 1.3. 仿真測試代碼
      • 1.4 編譯代碼與仿真
    • 第二章 CPLD和FPGA芯片的主要技術區別是什么?它們各適用于什么場合?
      • 2.1 主要技術區別
      • 2.2 適用場合
    • 第三章 HDLBits學習
      • 3.1四位右移寄存器
      • 3.2 半加器
      • 3.3 全加器
      • 3.4 線材
      • 3.5 與門
    • 參考資料

第一章 在DE2-115上用狀態機思想實現LED流水燈

1.1 狀態機設計思路

  1. 狀態定義:定義多個狀態,每個狀態對應一個LED亮起。
  2. 狀態轉移:按順序從一個狀態轉移到下一個狀態。
  3. 計數器:用于控制每個狀態的持續時間。

1.2 Verilog代碼實現

  1. 環境配置
    在這里插入圖片描述
  2. 代碼
module led_fsm(input wire clk,          // 時鐘信號input wire reset,        // 復位信號output reg [7:0] leds    // 8個LED輸出
);// 定義狀態
parameter STATE0 = 3'b000;
parameter STATE1 = 3'b001;
parameter STATE2 = 3'b010;
parameter STATE3 = 3'b011;
parameter STATE4 = 3'b100;
parameter STATE5 = 3'b101;
parameter STATE6 = 3'b110;
parameter STATE7 = 3'b111;reg [2:0] current_state, next_state;// 計數器,用于控制每個狀態的持續時間
reg [25:0] cnt;always @(posedge clk or posedge reset) beginif (reset) begincurrent_state <= STATE0;cnt <= 0;end else beginif (cnt == 25'd10000000) begin  // 每個狀態持續約1秒(假設時鐘為50MHz)cnt <= 0;current_state <= next_state;end else begincnt <= cnt + 1;endend
endalways @(*) begincase (current_state)STATE0: beginleds = 8'b00000001;next_state = STATE1;endSTATE1: beginleds = 8'b00000010;next_state = STATE2;endSTATE2: beginleds = 8'b00000100;next_state = STATE3;endSTATE3: beginleds = 8'b00001000;next_state = STATE4;endSTATE4: beginleds = 8'b00010000;next_state = STATE5;endSTATE5: beginleds = 8'b00100000;next_state = STATE6;endSTATE6: beginleds = 8'b01000000;next_state = STATE7;endSTATE7: beginleds = 8'b10000000;next_state = STATE0;enddefault: beginleds = 8'b00000001;next_state = STATE1;endendcase
endendmodule

1.3. 仿真測試代碼

module tb_led_fsm;// 時鐘和復位信號
reg clk;
reg reset;
wire [7:0] leds;// 實例化被測試模塊
led_fsm uut (.clk(clk),.reset(reset),.leds(leds)
);// 時鐘生成
initial beginclk = 0;forever #10 clk = ~clk;
end// 測試過程
initial beginreset = 1;#20 reset = 0;#10000 $stop;
endendmodule

1.4 編譯代碼與仿真

  1. 編譯led_fsm.v
    在這里插入圖片描述

  2. 點擊Processing–>Start–>Start test bench template writer,并在flie中添加生成的led_fsm.vt文件
    vt

  3. 修改led_fsm.vt文件內容
    把仿真代碼copy到該文件內,并在第一行聲明時間掃描間隔
    ts

  4. 配置仿真環境
    點擊Tools–>Options–>EDA ToolsOptions選項,配置ModelSim環境,如果Modelsim版本為INTEL FPGA Edition,那么文件地址應為安裝文件內........\modelsim_ase\win32aloem,如圖所示。
    在這里插入圖片描述

  5. 配置仿真文件,點擊Assignments–>Settings
    配置

  6. 選擇上面的Compile test bench點擊后面Test Bench進入選擇,點擊New新建
    new

  7. 按照順序先編輯名字,然后瀏覽剛才的.vt文件,最后點擊Add添加達到如下圖效果,再點擊OK
    在這里插入圖片描述

  8. 點擊Tools–>Run Simulation Tool–>RTL Simulation開始進行仿真
    sim

仿真結果
仿真

第二章 CPLD和FPGA芯片的主要技術區別是什么?它們各適用于什么場合?

2.1 主要技術區別

  1. 結構
    CPLD:基于查找表(LUT)和可編程連線的簡單結構,邏輯資源較少。
    FPGA:基于查找表(LUT)和可編程連線的復雜結構,邏輯資源豐富,支持大規模設計。
  2. 編程方式
    CPLD:通常使用一次性可編程(OTP)技術,編程后不可擦除。
    FPGA:使用SRAM配置,可多次擦寫和重新編程。
  3. 速度和性能
    CPLD:延遲較低,適合高速簡單邏輯。
    FPGA:延遲較高,但支持復雜的邏輯設計。
  4. 成本和功耗
    CPLD:成本較低,功耗較低。
    FPGA:成本較高,功耗較高。

2.2 適用場合

CPLD

  1. 適合簡單的邏輯設計和組合邏輯。
  2. 適合需要低延遲和低功耗的場合。
  3. 適合需要一次性編程的場合。

FPGA

  1. 適合復雜的邏輯設計和大規模數字系統。
  2. 適合需要頻繁更新和調試的場合。
  3. 適合需要高性能計算的場合。

第三章 HDLBits學習

通過訪問HDLBits以及HDLBits中文導學網站,完成組合邏輯(combinational logic)中的各題目

3.1四位右移寄存器

  1. 題目
    在這里插入圖片描述

  2. 代碼實現

module top_module(input clk,input areset,  // async active-high reset to zeroinput load,input ena,input [3:0] data,output reg [3:0] q); 
// 異步復位,同步加載和移位
always @(posedge clk or posedge areset) beginif (areset) beginq <= 4'b0000; // 異步復位為0end else beginif (load) beginq <= data; // 同步加載end else if (ena) beginq <= {1'b0, q[3:1]}; // 右移一位,最高位清零end// 如果load和ena都無效,保持當前狀態end
endendmodule
  1. 提交結果
    在這里插入圖片描述

3.2 半加器

  1. 題目
    在這里插入圖片描述
  2. 代碼實現
module top_module(input a, b,output cout, sum
);assign sum = a ^ b;assign cout = a & b;
endmodule
  1. 提交結果
    在這里插入圖片描述

3.3 全加器

  1. 題目
    在這里插入圖片描述
  2. 代碼實現
module top_module(input a, b, cin,output cout, sum
);assign sum = a ^ b ^ cin;assign cout = (a & b) | (a & cin) | (b & cin);
endmodule
  1. 提交結果
    在這里插入圖片描述

3.4 線材

  1. 題目
    在這里插入圖片描述
  2. 代碼
module top_module(input in,output out
);assign out = in;
endmodule
  1. 提交結果
    在這里插入圖片描述

3.5 與門

  1. 題目
    在這里插入圖片描述
  2. 代碼實現
module top_module(input a,input b,output out
);assign out = a & b;
endmodule
  1. 提交結果
    在這里插入圖片描述

參考資料

Quartus使用步驟及聯合Modelsim仿真教程
FPGA基礎入門【2】ModelSim官方免費版安裝
quartus和modelsim聯合仿真詳細教程

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

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

相關文章

與總社團聯合會合作啦

2025.4.2日&#xff0c;我社團向總社團聯合會與暮光社團發起合作研究“潯川代碼編輯器v2.0”。至3日&#xff0c;我社團收到回復&#xff1a; 總社團聯合會&#xff1a; 總社團聯合會已收到潯川社團官方聯合會的申請&#xff0c;經考慮&#xff0c;我們同意與潯川社團官方聯合…

Shiro學習(三):shiro整合springboot

一、Shiro整合到Springboot步驟 1、準備SpringBoot 環境&#xff0c;這一步省略 2、引入Shiro 依賴 因為是Web 項目&#xff0c;所以需要引入web 相關依賴 shiro-spring-boot-web-starter&#xff0c;如下所示&#xff1a; 3、準備Realm 因為實例化 ShiroFilterFactoryBean 時…

【圖形API】片段著色器自動計算LOD

片段著色器中的自動 LOD 計算詳解 在圖形渲染中&#xff0c;Level of Detail (LOD) 用于優化紋理采樣的性能和視覺質量。片段著色器&#xff08;Fragment Shader&#xff09;能夠自動計算 LOD&#xff0c;而頂點著色器&#xff08;Vertex Shader&#xff09;則不行。以下是詳細…

24、 Python Socket編程:從協議解析到多線程實戰

Python Socket編程&#xff1a;從協議解析到多線程實戰 一、文章概述 本文深入講解Python網絡編程核心技術&#xff0c;涵蓋TCP/UDP協議底層原理、Socket API全流程解析、高并發服務端開發實踐&#xff0c;以及網絡通信中的典型問題解決方案。通過3個遞進式代碼案例和協議設計…

LabVIEW 中數字轉字符串常用匯總

在 LabVIEW 編程環境里&#xff0c;數字與字符串之間的轉換是一項極為基礎且重要的操作&#xff0c;廣泛應用于數據處理、顯示、存儲以及設備通信等多個方面。熟練掌握數字轉字符串的方法和技巧&#xff0c;對編寫高效、穩定的程序起著關鍵作用。接下來&#xff0c;我們將全面深…

軌跡速度聚類 實戰

根據軌跡把速度聚類為3個類別,速度快的那部分不用平滑,速度慢的部分需要平滑。 速度聚類3個類別: kmeans++ import numpy as np import cv2 from sklearn.cluster import KMeans from matplotlib.colors import hsv_to_rgb from scipy.ndimage import gaussian_filter1d# …

vulkanscenegraph顯示傾斜模型(5.6)-vsg::RenderGraph的創建

前言 上一章深入分析了vsg::CommandGraph的創建過程及其通過子場景遍歷實現Vulkan命令錄制的機制。本章將在該基礎上&#xff0c;進一步探討Vulkan命令錄制中的核心封裝——vsg::RenderGraph。作為渲染流程的關鍵組件&#xff0c;RenderGraph封裝了vkCmdBeginRenderPass和vkCmd…

第二十八章:Python可視化圖表擴展-和弦圖、旭日圖、六邊形箱圖、桑基圖和主題流圖

一、引言 在數據可視化領域&#xff0c;除了常見的折線圖、柱狀圖和散點圖&#xff0c;還有一些高級圖表類型可以幫助我們更直觀地展示復雜數據關系。本文將介紹五種擴展圖表&#xff1a;和弦圖、旭日圖、六邊形箱圖、桑基圖和主題流圖。這些圖表在展示數據關系、層次結構和流量…

大模型-爬蟲prompt

爬蟲怎么寫prompt 以下基于deepseek r1 總結&#xff1a; 以下是為大模型設計的結構化Prompt模板&#xff0c;用于生成專業級網絡爬蟲Python腳本。此Prompt包含技術約束、反檢測策略和數據處理要求&#xff0c;可根據具體需求調整參數&#xff1a; 爬蟲腳本生成Prompt模板1 …

Vue中將pdf文件轉為圖片

平時開發中,我們經常遇到的場景應該是調用后端接口返回給前端pdf格式的文件流,然后我們可以通過URL.createObjectURL的方式轉為object url臨時路徑然后可以通過window.open的方式來打開一個新的瀏覽器頁簽來進行預覽,效果如下圖: 但有時候這樣滿足不了的需求,它不想這樣預…

物聯網安全技術:守護智能世界的防線

最近研學過程中發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊鏈接跳轉到網站人工智能及編程語言學習教程。讀者們可以通過里面的文章詳細了解一下人工智能及其編程等教程和學習方法。下面開始對正文內容的…

kubernetes安裝部署k8s

kubernetes https://github.com/kubernetes/kubernetes.git go mod tidy go mod vendor go build -o .\bin -v ./… //手動創建bin文件夾 使用 minikube&#xff1a;https://gitee.com/mirrors/minikube.git 使用minikube啟動本地化的集群服務 minikube start 啟動集群&…

JT/T 1078 協議基本介紹與解析

文章目錄 一、JT/T 1078 協議基本介紹二、JT/T 1078 與 JT808 的關系三、JT1078 協議核心功能四、JT1078 數據結構概覽4.1、消息結構&#xff1a;4.2、消息類型&#xff08;部分&#xff09;&#xff1a; 五、Java 中如何解析 JT1078 協議數據&#xff1f;5.1、JT1078 消息 ID …

手機為電腦提供移動互聯網絡的3種方式

寫作目的 在當今數字化時代,電腦已成為人們日常工作和生活中不可或缺的工具,而網絡連接更是其核心功能之一。無論是處理工作任務、進行在線學習、還是享受娛樂資源,穩定的網絡環境都是保障這些活動順利開展的關鍵。然而,在實際使用過程中,電腦網絡驅動故障時有發生,這可…

Linux的 /etc/sysctl.conf 筆記250404

Linux的 /etc/sysctl.conf 筆記250404 /etc/sysctl.conf 是 Linux 系統中用于 永久修改內核運行時參數 的核心配置文件。它通過 sysctl 工具實現參數的持久化存儲&#xff0c;確保系統重啟后配置依然生效。以下是其詳細說明&#xff1a; &#x1f4c2; 備份/etc/sysctl.conf t…

deepseek v3-0324 Markdown 編輯器 HTML

Markdown 編輯器 HTML 以下是一個美觀的 Markdown 編輯器 HTML 頁面&#xff0c;支持多種主題切換和實時預覽功能&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&q…

Linux make 檢查依賴文件更新的原理

1. 文件的時間戳 make 主要依靠文件的時間戳來判斷依賴文件是否有更新。每個文件在文件系統中都有一個時間戳&#xff0c;記錄了文件的三種重要時間&#xff1a; ??訪問時間&#xff08;Accesstime&#xff09;??&#xff1a;文件最后一次被訪問的時間。??修改時間&…

HDEBits中組合邏輯類的部分題目練習

文章目錄 1. More logic gates2. Truth tables3. 256-to-1 4-bit multiplexer4. 3-bit binary adder5. Signed addition overflow6. 4-digit BCD adder7. Minimum SOP and POS8. Karnaugh map9. K-map implemented with a multiplexer總結 1. More logic gates 題目&#xff1…

Apache httpclient okhttp(2)

學習鏈接 Apache httpclient & okhttp&#xff08;1&#xff09; Apache httpclient & okhttp&#xff08;2&#xff09; okhttp github okhttp官方使用文檔 okhttp官方示例代碼 OkHttp使用介紹 OkHttp使用進階 譯自OkHttp Github官方教程 SpringBoot 整合okHttp…

【git項目管理】長話短說

目錄 主要分為三種使用情況 安裝git后第一次使用創建新倉庫并管理克隆倉庫并管理 初次使用git 首先確定電腦的用戶名是純英文&#xff0c;沒有中文和奇怪的符號&#xff0c;如果不滿足這個條件&#xff0c;參考這個 鏈接 修改用戶名 git config --global user.name "…