閑庭信步使用圖像驗證平臺加速FPGA的開發:第十六課——圖像五行緩存的FPGA實現

?(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊top_tb.bat文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程文件請關注知識星球:成工fpga,https://t.zsxq.com/DMeqH關注即送200GB學習資料,鏈接已置頂!)

前面我們實現了圖像三行數據的緩存,文件是data_cache.sv,有了這個文件,處理起來3x3的各種算子都不在話下。那現在問題來了,對于5x5的算子,使用data_cache.sv就不可以了。其實這都不是事,既然有了開發data_cache.sv的經驗,那就稍微修改一下,新建一個data_cache5.sv的文件,能支持5x5即可。

下面詳細說明一下數據緩存的方法,由于要緩存5行圖像的數據,那就要有5個ram,分別是ram0-ram4。行計數器從0-4反復的計數,方便數據的存取;需要的5x5的區域像素存在chnl0-chnl4中,chnl0-chn4都是5字節長度的,chnl0存放第0行的5個像素數據,chnl1存放第1行的5個像素數據,chnl2存放第2行的5個像素數據,chnl3存放第3行的5個像素數據,chnl4存放第4行的5個像素數據。

設計要點就是當前行的數據一定是5x5的最后一行,所以直接給到chnl4即可。每一行都是1個ram在寫,4個ram在讀,由于5個ram是循環讀寫的,可以根據行計數器確定這5個ram中數據的排列順序,比如行計數為0時,ram1存放的是第0行數據,ram2存放的是第1行數據,ram3存放的是第2行數據,ram4存放的是第3行數據,ram0存放的是第4行數據。

還有一個問題就是5x5的行緩存,圖像外圍要補兩圈的0才能讓所有5x5因子的計算一致。前兩行補零是通過先緩2行圖像數據再讀數來實現的,這時候還有兩個ram沒有寫進數據,就可以讀出來兩行的0;最后兩行的補零是通過增加兩行的數據有效信號來實現的,新增加的兩行寫0,就可以實現最后兩行都是0而前兩列和后兩列的補零是通過將數據讀有效信號打兩拍作為輸出有效信號來實現的,每行的像素數據是通過左移位進入chnl0-chnl4的,由于行信號延時了兩拍,輸出信號有效時,已經有3個數據緩存到chnl0-chnl4,chnl0-chnl4的高16位還是0,這樣就可以實現前兩列的0,而后兩列直接通過延時的兩拍有效信號來實現。

解釋起來可能不太清晰,我們直接在代碼中講解。在\src\cache文件夾下新建data_cache5.sv文件,考慮到通用,文件采用參數化設計的思路。而且5x5因子輸出25個圖像數據變量有些多,直接使用數組輸出。

相關的變量的位寬也使用參數來定義。

通過組合邏輯實現ram讀寫相關信號和輸出信號,場同步和行同步信號不僅延時四個時鐘周期,還要多延時兩行

實現列數和行數的計數,其中156-166行主要實現增加兩個數據行有效active信號

數據行有效信號的延時打拍,用于數據的讀取和列補零;新增加的兩行數據直接給0,實現新增的最后兩行數據是0。

如下實現了行計數從0-4的功能,start信號用來控制先緩存兩行數據在讀數據,主要用來實現前兩行的補零。

以第一行數據的緩存為例,根據行號sel_cnt來確定需要讀取哪個ram的數據,最后260行的active_d0=0,而 active_d1和active_d2還拉高時補最后兩列的0。

最后一行數據的讀寫和前四行不太一樣,直接讀當前的圖像數據即可。

最后例化五個ram即可。

同樣,成工也把三行緩存的data_cache.sv模塊修改成了data_cache3.sv,也是加入了對于的參數。

在top文件中,例化了rgb2ycbcr模塊和data_cache5模塊。

在tb_image_sim文件中的第二個initial塊中,進行相關的圖像讀取和存儲的操作。

雙擊sim文件夾下的top_tb.bat文件,完成系統的自動化仿真。

可以加入相關的波形查看。如下是先緩存兩行數據再開始讀數操作。

我們看一下讀取的第一個數組數據,前兩行和前兩列都加上了0。

再看看最后的增加了兩個active信號,此時數據是0。

而輸出的最后一個數組數據,最后兩行和兩列都是0。

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

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

相關文章

頭文件與源文件及區別

使用場景上的區別頭文件:變量的聲明,函數的聲明,宏的定義,類的定義等。 源文件:變量的定義。函數的定義實現,類成員函數的定義實現等。這樣方便于我們去管理、規劃,更重要的是避免了重定義的問題…

圖機器學習(4)——圖機器學習與嵌入算法

圖機器學習(4)——圖機器學習與嵌入算法0. 前言1. 圖機器學習1.1 機器學習基本原理1.2 圖機器學習的獨特優勢2. 廣義圖嵌入問題3. 圖嵌入算法分類小結0. 前言 機器學習是人工智能的一個重要分支,它致力于讓系統能夠從數據中自主學習并持續優…

網絡基礎10--ACL與包過濾

一、ACL 定義與核心功能ACL(訪問控制列表)是通過規則匹配實現數據包過濾或分類的核心技術,廣泛應用于包過濾、NAT、QoS、路由策略等場景。其核心由規則條目組成,每條規則包含匹配條件(如源 / 目 IP、端口、協議&#x…

Web安全 - 基于 SM2/SM4 的前后端國產加解密方案詳解

文章目錄概述一、背景與法規要求二、算法選型三、核心流程四、前端實現要點(偽代碼)五、后端實現要點(偽代碼)六、公鑰存儲策略七、全流程示例圖八、總結與最佳實踐推薦概述 隨著信息安全法規日益嚴格,如《網絡安全法》《數據安全法》和等保…

ACL動態路由實驗全攻略:配置與安全實戰

實驗拓撲圖 實驗需求 步驟1.按照圖示配置IP地址2.按照圖示區域劃分配置對應的動態路由協議3.在R7上配置dhcp服務器,能夠讓pc可以獲取IP地址4.將所有環回宣告進ospf中,將環回17宣告進rip中,將rip路由引rospf中,ospf路由引.rip中5.要…

電動汽車制動系統及其工作原理

制動系統是實現車輛減速、停車功能的重要系統。電動汽車的制動系統按照制動實現方式分為機械制動和電機再生制動,機械制動根據制動力實現方式不同又可分為液壓機械制動系統、氣壓機械制動系統和電子機械制動系統。目前,電動汽車的制動系統實現一般為協調…

CentOS 7 Linux 離線安裝 docker-compose

CentOS 7 Linux 離線安裝 docker-compose 1. docker-compose 簡介 1.1. docker-compose 是什么? docker-compose 是 Docker 官方提供的工具,用于定義和運行多容器 Docker 應用程序。通過一個 YAML 文件(通常為 docker-compose.yml&#xf…

排序算法實戰(上)

一、引言在力扣刷題的旅程中,排序類題目是繞不開的重要板塊。今天就來分享兩道經典排序題——912. 排序數組和75. 顏色分類的解題思路與代碼實現,帶你深入理解排序算法在實際題目中的應用 。二、題目剖析與解題思路(一)912. 排序數…

python學智能算法(二十)|SVM基礎概念-感知機算法及代碼

引言 前序學習進程中,已經學習了超平面的基礎知識,學習鏈接為:超平面 在此基礎上,要想正確繪制超平面,還需要了解感知機的相關概念。 感知機 感知機是對生物神經網絡的模擬,當輸入信號達到感知機的閾值時…

操作HTML網頁

一、HTML網頁的介紹 HTML,即超文本標記語言(HyperText Markup Language),它不是一種編程語言,而是一種標記語言,用于描述網頁的結構。HTML 通過一系列標簽來定義網頁中的各種元素,如文本、圖片…

Django--03視圖和模板

Django–03視圖和模板 Part 3: Views and templates 本教程承接第二部分,我們將繼續開發投票應用,重點介紹 Django 的表單處理和通用視圖。 文章目錄Django--03視圖和模板前言概述一、編寫更多視圖二、編寫實際執行操作的視圖三、快捷方式:r…

《每日AI-人工智能-編程日報》--2025年7月15日

介紹:AI :英偉達恢復向中國銷售 H20 并推出新 GPU:7 月 15 日,英偉達官宣將恢復向中國銷售 H20,并推出全新的 NVIDIA RTX PRO GPU,其中 B30 性能約為 H20 的 75%,定價在 6500 至 8000 美元之間&…

C++STL-list

一.基礎概念相當于數據結構里面的雙向鏈表二.基礎操作1.list對象創建1. 默認構造函數list<int> l1;2. 初始化列表list<int> l2_1 { 9,8,7,6,5 };list<int> l2_2({ 9, 8, 7, 1, 5 });3. 迭代器list <int> l3(l2_1.begin(), l2_1.end());4. 全0初始化li…

【PTA數據結構 | C語言版】字符串插入操作

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將給定字符串 t 插入到另一個給定字符串 s 的第 pos 個字符的位置。 輸入格式&#xff1a; 輸入先后給出主串 s 和待插入的字符串 t&#xff0c;每個非空字符串占一行&#…

Postman + Newman + Jenkins 接口自動化測試

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 </

CAS單點登錄架構詳解

目錄 概述核心概念 TGC (Ticket Granting Cookie)TGT (Ticket Granting Ticket)ST (Service Ticket) 架構設計 整體架構存儲架構安全機制 工作流程 完整登錄時序流程步驟詳解 技術實現 會話管理數據同步問題最佳實踐 參考資料 概述 CAS (Central Authentication Service) 是…

C++中正則表達式詳解和實戰示例

C 中的正則表達式&#xff08;Regular Expression&#xff09;主要通過標準庫 <regex> 提供&#xff0c;能夠用于字符串匹配、查找、替換、驗證格式等。它在 C11 中首次引入&#xff0c;并在 C14 和 C17 中逐步完善。一、頭文件和命名空間 #include <regex> #inclu…

深入解析Avro、Protobuf與JSON:序列化技術的選擇與應用

在現代分布式系統和數據交換場景中&#xff0c;序列化技術是數據存儲、傳輸和通信的核心。本文深入探討三種主流序列化技術&#xff1a;Avro、Protobuf 和 JSON&#xff0c;從背景、特點、示例代碼&#xff08;Python&#xff09;、優勢及最佳實踐等多個維度進行對比分析&#…

Vue 中 effectScope() 的全面解析與實戰應用

一、effectScope 概述1.1 什么是 effectScopeeffectScope() 是 Vue 3.2 引入的核心 API&#xff0c;用于創建副作用作用域容器。它能夠將多個響應式副作用&#xff08;如 watch、watchEffect 和 computed&#xff09;組織在一起&#xff0c;實現統一的生命周期管理。1.2 核心價…

嵌入式面試八股文(十六)·一文搞懂嵌入式常用名詞IC、ASIC、CPU、MPU、MCU、SoC、SoPC、GPU、DSP

目錄 1. IC&#xff08;Integrated Circuit&#xff0c;集成電路&#xff09; 2. ASIC&#xff08;Application-Specific Integrated Circuit&#xff0c;專用集成電路&#xff09; 3. CPU&#xff08;Central Processing Unit&#xff0c;中央處理器&#xff09; 4. M…