Zynq開發實踐(FPGA之輸入、輸出整合)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】

? ? ? ? fpga開發的時候習慣上先把功能拆分成若干個模塊。針對這些模塊,一個一、個實現好之后,再用wire連接即可。這一點有點像軟件編程的function。如果是規模不大的c項目,例如嵌入式mcu項目。我們也是先把項目拆分成若干個function,一個一個實現好function后,再用全局變量或者臨時變量把這些function聯系在一起,這樣項目就可以拼起來了。fpga也是一樣的。

1、自頂向下開發

? ? ? ? 自頂向下開發,主要是面向客戶開發。首先確認開戶需要什么功能,然后把這些功能切分成一個一個業務。業務部分分好后,就會進一步切分成不同的狀態機和外設。外設部分又會涉及到一些總線、接口和協議。總之,一個fpga產品根據規模大小,需要至上而下一步一步拆分和開發。一方面這樣可以降低風險,另外一方面時間和質量可控,也有利于降低風險。

2、修改led.v程序

? ? ? ? 之前我們寫過led.v,當時led閃爍的實現是通過計數器來進行的。因此既然上一次我們實現了按鍵功能,那么就可以通過按鍵實現led.v功能了。即,按一下,led取反一次。這樣,就會形成按鍵和led的交互功能。


module led(input clk,input rst,input ce,output led);reg led_o;always@(posedge clk or negedge rst)if(!rst)led_o <= 1'b0;else if(ce)led_o <= ~led_o;assign led = led_o;endmodule

? ? ? ? 代碼部分不難,就是這里出現了一個ce,而這個ce正是按鍵提供的。

3、led.v和key.v連接信號

? ? ? ? 事實上,把所有的verilog文件整合成一個.v也是可以的。只不過這樣的.v結構過于龐大,很容易出錯,所以一般就拆分成若干個模塊。彼此之間用wire聯系。這里的key.v和led.v就是用一個out信號連接。

key key(.rst(rst),.clk(clk),.in(in),.out(out));led led(.rst(rst),.clk(clk),.ce(out),.led(led_out));

? ? ? ? 注意,這里的rst和clk都是共享的,也就是說每一個clock的邊沿觸發,兩個模塊都是同時工作的。但是led的工作依賴于key的輸出,也就是說如果out沒有輸出,那么led雖然也工作,但是沒有狀態的改變。只有等到out輸出為1的時候,才會發生led的翻轉。

4、測試和驗證

? ? ? ? 這里沒有把led和key做一個整合,只是在tb.v做了連接。本質上其實是一樣的,有需要的同學可以重新寫一個verilog,里面調用led.v和key.v,類似于這樣,

module key_led_top(input clk,input rst,input in,output led_out);wire out;key key(.rst(rst),.clk(clk),.in(in),.out(out));led led(.rst(rst),.clk(clk),.ce(out),.led(led_out));endmodule

? ? ? ? 在此基礎上修改一下命令行,

C:\iverilog\bin\iverilog.exe -o tb tb.v key_led_top.v key.v led.v && C:\iverilog\bin\vvp.exe -n tb -lxt2 &&C:\iverilog\gtkwave\bin\gtkwave.exe hello.vcd

? ? ? ? 這昂就可以生成我們需要的波形文件。首先確認下整體功能對不對。如果不對,就繼續看下子模塊的信號,這就是一般的仿真測試步驟。通過圖形可以明顯看到,只有in輸入達到一定時間的時候,才會發生led信號翻轉。

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

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

相關文章

【Linux基礎】深入理解計算機啟動原理:MBR主引導記錄詳解

目錄 引言 1 硬盤分區初始化概述 1.1 為什么需要硬盤分區 1.2 硬盤分區格式的發展 1.3 分區初始化的基本流程 2 MBR詳解 2.1 MBR的定義與位置 2.2 MBR的結構詳解 2.3 分區表結構詳解 2.4 MBR的工作原理 2.5 MBR的引導程序 3 MBR的局限性 3.1 硬盤容量限制 3.2 分…

Linux 線程同步

線程同步 由于線程共享內存&#xff0c;訪問共享數據&#xff08;全局變量、堆內存&#xff09;必須進行同步&#xff0c;以防止競態條件&#xff08;Race Conditions&#xff09;導致數據不一致或程序崩潰。 子線程沒有獨立的地址空間&#xff0c;數據通常是共享的&#xff1b…

世界模型的典型框架與分類

1.概述 人類和動物智能的一個重要方面是我們對世界的內部模型。我們使用這個模型來預測我們的行為將如何影響我們的環境&#xff0c;預測未來的事件&#xff0c;并計劃復雜的行動序列以實現目標。當前大多數機器學習研究都集中在被動理解數據的模型上&#xff0c;例如圖像分類…

【Day 35】Linux-Mysql錯誤總結

&#xff08;一&#xff09;MySQL 基礎操作與服務故障類 連接層錯誤&#xff08;客戶端與服務器的連接建立失敗&#xff09; 解決 socket 路徑、文件存在性及服務可用性問題。 1、MySQL 客戶端連接失敗&#xff08;報錯 “Cant connect to local MySQL server throgh socket…

MYSQL速通(2/5)

六、多表查詢1、多表關系①、一對多&#xff08;多對一&#xff09;舉例&#xff1a;一個部門對多個員工實現&#xff1a;多的那邊建立外鍵&#xff0c;指向一的那邊的主鍵②、多對多舉例&#xff1a;一個學生可選多門課&#xff0c;一門課可被多個學生選實現&#xff1a;建立中…

CRM、ERP、HRP系統有啥區別?

要理解CRM、ERP、HRP系統&#xff0c;需先明確三者的核心定位&#xff08;聚焦客戶、企業全資源、特定領域資源&#xff09;&#xff0c;再從管理范圍、目標、用戶等維度區分。以下是詳細解析&#xff1a; 一、各系統核心定義與核心模塊 1. CRM系統&#xff1a;客戶關系管理系統…

【系統分析師】高分論文:論系統測試技術及應用

【摘要】 2022 年 7月&#xff0c;我作為項目負貴人&#xff0c;參加了某銀行的統計數據發布系統建設項目。該項目合同金額230 萬元&#xff0c;合同工期為半年。統計數據發布系統的主要目標是為該行建設一個企業級的數據統計、分析、發布平臺&#xff0c;實現定制化的數據應用…

第5篇 c++ 函數的多返回值實現-返回多個值

c 函數的多返回值實現std::tuple<Mat, int, double, std::string> AuatoPafackSydstem::GetMatchingValue(Mat mat_img, std::string img_template_path) {Mat a;return {a,1,0.001,""}; }std::tuple<Mat, int, double, std::string> GetMatchingValue(M…

C++基礎(⑤刪除鏈表中的重復節點(鏈表 + 遍歷))

題目描述 給定一個排序好的鏈表&#xff08;升序&#xff09;&#xff0c;刪除所有重復的元素&#xff0c;使每個元素只出現一次。 示例&#xff1a; 輸入&#xff1a;1 → 1 → 2 → 3 → 3 輸出&#xff1a;1 → 2 → 3 解題思路 核心觀察&#xff1a;鏈表已排序&#xff0c;…

摩搭api 實現

AI圖片生成器前端實現詳解本文詳細解析一個功能完整的AI圖片生成器前端實現&#xff0c;包含主題切換、參數配置、圖片生成與預覽等核心功能。項目概述 這是一個基于ModelScope平臺的AI圖片生成器前端實現&#xff0c;用戶可以通過輸入提示詞、選擇模型和調整參數來生成高質量圖…

c++--線程休眠/sleep

線程休眠<unistd.h>--sleep()<thread>--std::this_thread::sleep_for()ros--rclcpp::sleep_for()以上的三個sleep也就是休眠會占用CPU嗎簡單直接的回答是&#xff1a;不會。一個正確使用、正在休眠的線程不會占用CPU資源。核心原理當你調用像 std::this_thread::sl…

人工智能基礎概念

The brain happens to be a meat machine. —— Marvin Lee Minsky 目錄 人類智能 人工智能 三個階段 三大學派 四個要素 關系辨析 維度分類 發展簡史 技術方向 應用領域 產業圖譜 發展趨勢 人類智能 人工智能的目的是通過探索智慧的實質&#xff0c;擴展人類智能…

企業數字資產管理怎么轉型更高效?一文打通策略與實踐

核心要點 問題&#xff1a; 傳統的內容管理方式效率低、協作難、版本混亂&#xff0c;企業轉型 DAM 系統面臨選型難和落地難兩大挑戰。 答案&#xff1a; 采用階段性轉型策略&#xff0c;結合智能化工具和標準化流程&#xff0c;能幫助企業構建可擴展、易協作、強治理的內容資…

python pyqt5開發DoIP上位機【源碼】

目錄 文章合集 文章合集 python pyqt5開發DoIP上位機【介紹】 python pyqt5開發DoIP上位機【代碼里發送常用uds命令是怎么實現的?】 python pyqt5開發DoIP上位機【代碼里是怎么獲取診斷回復的?】 python pyqt5開發DoIP上位機【診斷回復的函數都是怎么調用的?】 python …

IIC (I2C)通信

一、IIC的特點I2C&#xff08;Inter IC Bus&#xff09;又成為&#xff08;愛方C I2C&#xff09;是由Philips公司開發的一種通用數據總線兩根通信線&#xff1a;SCL&#xff08;Serial Clock&#xff09;、SDA&#xff08;Serial Data&#xff09;同步&#xff0c;半雙工帶數據…

【圖像處理 - 基礎知識】ISP(Image Signal Processor)處理

文章目錄1. 圖像傳感背景2. 圖像數據格式2.1. 【RAW】Bayer濾色陣列&#xff08;Bayer Filter Array&#xff09;2.2. 【RGB】2.3. 【YUV】3. ISP&#xff08;Image Signal Processor&#xff09;3.1. ISP定義3.2. 分類概括1 RAW 域&#xff08;Raw Domain&#xff09;2 RGB 域…

PostgreSQL 數據庫災備要點與舉例說明**

PostgreSQL 數據庫災備要點與舉例說明 數據庫災備(Disaster Recovery, DR)是確保業務連續性的核心環節,其目標是在主生產環境遭遇計劃外中斷(如硬件故障、自然災害、人為錯誤、數據損壞)時,能快速恢復數據和服務。PostgreSQL 因其強大和開源特性,提供了多種高效的災備方…

【GaussDB】在邏輯復制中剔除指定用戶的事務

【GaussDB】在邏輯復制中剔除指定用戶的事務 1. 需求背景 在邏輯復制中&#xff0c;期望對源端指定用戶的所有操作不復制到目標端。然而WAL日志中沒有用戶信息可用于過濾&#xff0c;因此考慮結合審計日志來實現這一需求。 2. 解決方案 2.1 配置審計日志 首先需要開啟事務…

C/C++---預定義常量

在C/C開發中&#xff0c;預定義常量是編譯器與標準庫提供的“隱形工具集”&#xff0c;無需開發者顯式定義&#xff0c;卻在跨平臺兼容、調試定位、數值計算安全等場景中發揮核心作用。這些常量涵蓋編譯環境標識、語言標準判斷、代碼定位信息、數值邊界限制等多個維度&#xff…

嵌入式學習筆記--LINUX系統編程--DAY03進程控制

1.進程概述進程和程序的區別程序&#xff1a;程序是存儲在存儲介質上的一個可執行文件---靜態的進程&#xff1a;進程是程序的執行實例。可以說進程就是正在執行的程序。程序是一些指令的集合&#xff0c;而進程是程序的執行過程&#xff0c;這個過程的狀態是變化的&#xff0c…