FPGA-DE2115開發板實現流水燈

文章目錄

    • 一、安裝VScode,在其中下載安裝Verilog-HDL/SystemVerilog插件;
      • (1)安裝VScode
      • (2)安裝插件
      • (3)與Quartus關聯
    • 二、不分模塊實現流水燈
      • (1)新建工程
      • (2)添加流水燈實現代碼
      • (3)配置引腳
      • (4)燒錄
      • (5)實現效果
    • 三、分模塊實現流水燈
      • (1)新建工程
      • (2)添加流水燈實現代碼
      • (3)配置引腳
      • (4)燒錄
      • (5)實現效果

一、安裝VScode,在其中下載安裝Verilog-HDL/SystemVerilog插件;

(1)安裝VScode

網上的相關教程很多我就不過多贅述了。默認安裝好了。

(2)安裝插件

在VScode中安裝相關插件
在這里插入圖片描述

(3)與Quartus關聯

打開Quartus按照下圖步驟進行關聯,關聯成功后在新建文件后會自動打開VScode編輯器。

在這里插入圖片描述

二、不分模塊實現流水燈

(1)新建工程

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

(2)添加流水燈實現代碼

在這里插入圖片描述
在這里插入圖片描述
代碼:

module lsd #(parameter TIME_1S = 26'd49_999_999)( input               sys_clk,input               sys_rst_n,output  reg [5:0]   led     
);reg     [25:0]      cnt;      // 修正為26位寬wire                add_cnt;wire                end_cnt;reg     [2:0]       cnt1;wire                add_cnt1;wire                end_cnt1;// 1秒定時器邏輯always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n) begincnt <= 26'b0;end else if (add_cnt) begincnt <= (end_cnt) ? 26'b0 : cnt + 1'b1;endend// LED狀態計數器邏輯always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n) begincnt1 <= 3'b0;end else if (add_cnt1) begincnt1 <= (end_cnt1) ? 3'b0 : cnt1 + 1'b1;endend// LED顯示邏輯(直接循環左移更簡潔)always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n) beginled <= 6'b000001;end else if (end_cnt) begin // 每秒左移一次led <= {led[4:0], led[5]}; // 循環左移endend// 控制信號定義assign add_cnt  = 1'b1;assign end_cnt  = (cnt == TIME_1S);assign add_cnt1 = end_cnt;assign end_cnt1 = (cnt1 == 3'd5);endmodule

(3)配置引腳

在這里插入圖片描述

(4)燒錄

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

(5)實現效果

在這里插入圖片描述

三、分模塊實現流水燈

(1)新建工程

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

(2)添加流水燈實現代碼

在這里插入圖片描述
在這里插入圖片描述
新建代碼后跳轉到VScode時會默認起一個名字最好另存為對應文件名否則在后面運行會報錯。
新建保存完代碼后將代碼文件添加到工程中并將LedBlink.v設置為頂層模塊
點擊project然后點擊Add/Remove Files in Project選項后點擊上圖箭頭處將前面已經保存的文件添加進來然后點擊Apply點擊ok。
選中頂層文件右鍵選擇Set as Top…

LedBlink.v

module LedBlink(input clk,input sys_rst_n_raw,  // 原始復位信號(KEY0)input pause_key,      // 暫停按鍵(KEY1)output [5:0] led
);// 同步復位信號reg [1:0] sync_rst_n;wire sys_rst_n;always @(posedge clk) beginsync_rst_n <= {sync_rst_n[0], sys_rst_n_raw};endassign sys_rst_n = sync_rst_n[1];// 分頻模塊(生成1Hz使能)wire en_1Hz;fenpin u_fenpin(.clk(clk),.rst_n(sys_rst_n),.en(en_1Hz));// 按鍵控制模塊(消抖+脈沖)wire pause_pulse;key_ctrl u_key_ctrl(.clk(clk),.rst_n(sys_rst_n),.key_in(pause_key),.key_pulse(pause_pulse));// 暫停狀態標志reg pause_flag;always @(posedge clk or negedge sys_rst_n) beginif (!sys_rst_n) beginpause_flag <= 1'b0;end else if (pause_pulse) beginpause_flag <= ~pause_flag;endend// 顯示模塊display u_display(.clk(clk),.rst_n(sys_rst_n),.en(en_1Hz),.pause(pause_flag),.led(led));
endmodule

fenpin.v

module fenpin(input clk,          // 50MHz時鐘input rst_n,        // 復位信號(低有效)output reg en       // 1Hz使能信號
);reg [25:0] cnt;     // 26位計數器(0~49,999,999)always @(posedge clk or negedge rst_n) beginif (!rst_n) begincnt <= 0;en <= 0;end else beginif (cnt == 26'd49_999_999) begin // 50MHz → 1Hzcnt <= 0;en <= 1;end else begincnt <= cnt + 1;en <= 0;endendend
endmodule

display.v

module display(input clk,input rst_n,        // 復位信號(低有效)input en,           // 1Hz使能input pause,        // 暫停狀態(1=暫停)output reg [5:0] led
);always @(posedge clk or negedge rst_n) beginif (!rst_n) beginled <= 6'b000001;  // 復位時LED0亮end else if (en && !pause) beginled <= {led[4:0], led[5]};  // 循環左移endend
endmodule

key_ctrl.v

module key_ctrl(input clk,          // 50MHz時鐘input rst_n,        // 復位信號(低有效)input key_in,       // 原始按鍵輸入(KEY1)output key_pulse    // 消抖后的按鍵脈沖(按下一次產生一個脈沖)
);reg [19:0] debounce_cnt;    // 消抖計數器(20ms)reg key_sync;               // 同步后的按鍵狀態reg key_sync_prev;          // 前一刻按鍵狀態(用于邊沿檢測)// 消抖邏輯always @(posedge clk or negedge rst_n) beginif (!rst_n) begindebounce_cnt <= 0;key_sync <= 1'b1;      // 復位時按鍵狀態為高end else beginif (key_in != key_sync) begindebounce_cnt <= debounce_cnt + 1;if (debounce_cnt == 20'd1_000_000) begin // 20ms消抖key_sync <= key_in;debounce_cnt <= 0;endend else begindebounce_cnt <= 0;endendend// 邊沿檢測(下降沿:1→0)always @(posedge clk or negedge rst_n) beginif (!rst_n) beginkey_sync_prev <= 1'b1;end else beginkey_sync_prev <= key_sync;endend// 生成按鍵脈沖(按下時產生一個時鐘周期高電平)assign key_pulse = (~key_sync) & key_sync_prev;
endmodule

(3)配置引腳

在這里插入圖片描述

(4)燒錄

在這里插入圖片描述
在這里插入圖片描述

(5)實現效果

在這里插入圖片描述
四、總結
本次實驗學會了更多關于Quartus的使用操作也學習到了更多關于FPGA的內容。

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

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

相關文章

JS逆向案例-HIKVISION-視頻監控的前端密碼加密分析

免責聲明 本文僅為技術研究與滲透測試思路分享,旨在幫助安全從業人員更好地理解相關技術原理和防御措施。任何個人或組織不得利用本文內容從事非法活動或攻擊他人系統。 如果任何人因違反法律法規或不當使用本文內容而導致任何法律后果,本文作者概不負責。 請務必遵守法律…

Android 動態代理詳解

Android 動態代理方法的原理與關鍵分析 動態代理是一種在運行時動態生成代理對象并攔截方法調用的技術。它廣泛應用于 Android 開發中&#xff0c;例如 AOP&#xff08;面向切面編程&#xff09;、插件化開發、網絡請求框架&#xff08;如 Retrofit&#xff09;等場景。 以下…

碰一碰發視頻saas系統技術源頭一站式開發文檔

碰一碰發視頻系統技術源頭一站式開發文檔 一、引言 在數字化信息傳播高速發展的當下&#xff0c;如何讓視頻分享更便捷、高效&#xff0c;成為商家和開發者們關注的焦點。“碰一碰發視頻”系統以其獨特的交互方式和強大的功能優勢&#xff0c;為視頻分享領域帶來了革命性變革。…

VSCode + CMake

參考文獻&#xff1a; 如何用 GCC, CMake 和 Make 編譯C/C代碼Windows 上的 Linux 子系統&#xff1a;WSLWSL&#xff1a;桌面 UI 遠程連接 RDP 配置 VScode 文章目錄 CMake 配置VSCode 配置launch.jsontask.jsonc_cpp_properties.json CMake 配置 編寫如下的 CmakeLists.t…

yolov5學習及手勢識別實戰

目錄 一、YOLOv5核心原理 1. 單階段檢測范式 2. 關鍵技術特性 二、YOLOv5網絡架構組成 1. Backbone&#xff1a;CSPDarknet53 2. Neck&#xff1a;PANet&#xff08;Path Aggregation Network&#xff09; 3. Head&#xff1a;檢測頭 三、YOLOv5網絡架構細節 1. 整體架…

【視頻】H.264的碼率和圖像質量

1、簡述 分辨率、幀率、I幀設置不變的情況下,碼率過低時,IP攝像機如果沒有足夠的帶寬來傳輸高質量的圖像,便會抹掉一些細節,導致出現馬賽克,尤其是動態性強的畫面(比如:運動的云臺、非固定的攝像頭)。 2、計算碼率 1)碼率的基礎理論公式為: 碼率 (bps) = 分辨率像…

VMware-workstation-17.6.3安裝教程

1.下載VMware-workstation-17.6.3軟件包 2.安裝并輸入許可碼 3.開始使用

[Linux][經驗總結]Ubuntu6.11.0 docker更換鏡像源(實操可用的正確方法)

一、前言 關于Ubuntu更換docker鏡像源&#xff0c;網上有很多的教程&#xff0c;但在實操中發現&#xff0c;更換的源無法生效——原因是我的docker是在系統安裝時&#xff0c;選擇附加安裝的package的方式安裝的。 現將處理過程記錄如下。 二、獲取鏡像源 在網上隨便找個幾…

Element Plus開發實戰指南:快速上手Vue 3企業級組件庫

Element Plus全棧開發指南&#xff1a;從入門到企業級實戰 一、環境搭建與工程配置1.1 項目初始化&#xff08;Windows/Mac通用&#xff09;1.2 配置文件關鍵代碼 二、主題定制與樣式管理2.1 SCSS變量覆蓋方案2.2 暗黑模式切換 三、核心組件深度實踐3.1 智能表格開發&#xff0…

Elasticsearch基礎教程:從入門到上手

&#x1f3af; 一、Elasticsearch簡介 Elasticsearch&#xff08;簡稱ES&#xff09;是一個分布式、RESTful風格的搜索引擎&#xff0c;支持全文檢索、結構化查詢、分析和近實時搜索。常用于日志分析、商品搜索、數據分析等場景。 1. 什么是 Elasticsearch&#xff1f; Elas…

VIVO手機如何實現證件照換底色?證件照換底色技巧分享

在日常生活中&#xff0c;我們常常需要使用不同底色的證件照&#xff0c;無論是辦理證件、提交資料還是其他用途&#xff0c;一張符合要求的證件照都顯得尤為重要。 而VIVO手機憑借其強大的拍照功能和便捷的圖片編輯工具&#xff0c;為我們提供了一種簡單高效的證件照換底色解…

A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS——大型語言模型的訓練后優化綜述——第一部分

arXiv 2025 摘要 大型語言模型&#xff08;LLMs&#xff09;的出現從根本上改變了自然語言處理&#xff0c;使其在從對話系統到科學研究的各個領域中變得不可或缺。然而&#xff0c;它們的預訓練架構在特定情境下經常顯示出局限性&#xff0c;包括有限的推理能力、倫理不確定…

深入理解Python閉包與遞歸:原理、應用與實踐

目錄 閉包 什么是閉包&#xff1a; 閉包的基本結構&#xff1a; 實現閉包的條件&#xff1a; 1.嵌套函數 2.內函數引用外部函數的變量 3.外部函數返回內部函數 4.外部函數已經執行完畢 遞歸函數 什么是遞歸函數&#xff1a; 遞歸函數條件 1.必須有個明確的結束條…

【自學筆記】智能合約基礎知識點總覽-持續更新

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 智能合約基礎知識點總覽目錄1. 智能合約簡介2. 以太坊與Solidity示例代碼&#xff1a;Hello World智能合約 3. Solidity基礎語法示例代碼&#xff1a;簡單的計數器合…

ABAP PDF預覽

畫個屏幕 PDF JPG TXT都可以參考預覽&#xff0c;把二進制流傳遞給標準函數就行 *&---------------------------------------------------------------------* *& Report YDEMO2 *&---------------------------------------------------------------------* *&am…

【視頻】文本挖掘專題:Python、R用LSTM情感語義分析實例合集|上市銀行年報、微博評論、紅樓夢、汽車口碑數據采集詞云可視化

原文鏈接&#xff1a;https://tecdat.cn/?p41149 分析師&#xff1a;Zhenzhen Liu&#xff0c;Shuai Fung 作為數據科學家&#xff0c;我們始終關注如何從非結構化數據中提取高價值信息。本專題合集聚焦企業年報的文本分析技術&#xff0c;通過Python與R語言實戰案例&#xff…

高效團隊開發的工具與方法 引言

引言 在現代軟件開發領域&#xff0c;團隊協作的效率和質量直接決定了項目的成敗。隨著項目規模的擴大和技術復雜度的增加&#xff0c;如何實現高效團隊開發成為每個開發團隊必須面對的挑戰。高效團隊開發不僅僅是個人技術能力的簡單疊加&#xff0c;更需要借助合適的工具和方…

python中mysql操作整理

安裝 Windows &#xff1a; pip install pymysql -i https://pypi.douban.com/simple mac &#xff1a;python3 -m pip install pymysql -i https://pypi.douban.com/simple mysql示例 import pymysql connect pymysql.Connect(host82.156.74.26,port3306,userroot,passwor…

Python----計算機視覺處理(Opencv:圖像顏色替換)

一、開運算 開運算就是對圖像先進行腐蝕操作&#xff0c; 然后進行膨脹操作。開運算可以去除二值化圖中的小的噪點&#xff0c;并分離相連的物體。 其主要目的就是消除那些小白點 在開運算組件中&#xff0c;有一個叫做kernel的參數&#xff0c;指的是核的大小&#xff0c;通常…

基于SpringBoot的“ERP-物資管理”的設計與實現(源碼+數據庫+文檔+PPT)

基于SpringBoot的“ERP-物資管理”的設計與實現&#xff08;源碼數據庫文檔PPT) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 系統總體結構圖 E-R實體關系圖 管理員登錄界面 管…