FPGA圖像處理(五)------ 圖片水平鏡像

利用bram形成雙緩沖,如下圖配置所示:

wr_flag 表明?buffer0寫 還是 buffer1寫? ? ? ? ? ? ?rd_flag?表明 buffer0讀 還是 buffer1讀

通過寫入邏輯控制(結合wr_finish)? 寫哪個buffer ;寫地址? 進而控制ip的寫使能

通過狀態緩存來跳轉buffer的寫和讀

通過讀取邏輯(結合rd_finish)? ? ? ? ?讀哪個buffer ;讀地址

最后通過時序控制,調整輸出數據及數據有效對齊

`timescale 1ns / 1ps
//
// Description: 水平鏡像
//
module image_horizion_flip(input wire clk,input wire reset,input wire [10:0] img_width,input wire valid_i,input wire [23:0] data_i,output reg valid_o,output reg [23:0] data_o
);///有關寫邏輯部分的變量申明
reg         wr_flag ;
reg [10:0]  addra   ;
//一行像素寫入buffer結束標志
wire        wr_finish;
assign      wr_finish = (valid_i && (addra == img_width - 1))? 1'b1 : 1'b0;
//buffer0/1的寫使能
wire        buffer0_wr, buffer1_wr; 
assign      buffer0_wr = valid_i&(~wr_flag);
assign      buffer1_wr = valid_i&wr_flag;///有關讀邏輯部分的變量申明
reg         buffer0_status, buffer1_status;
//讀數據使能         讀取數據 緩存完一行,啟動讀數據。
wire        rd_en;
assign      rd_en = buffer0_status|buffer1_status;reg         rd_flag;
reg  [10:0] addrb;
//一行像素讀出buffer結束標志
wire        rd_finish;
assign      rd_finish = rd_en&&(addrb == img_width - 1) ? 1'b1 : 1'b0;wire [23:0] buffer0_dout, buffer1_dout;
reg         rd_en_d;
reg         rd_flag_d;
///寫入邏輯//
//寫入地址,wr_flag等于0時,寫入buffer0,等于1時,寫入buffer1
always@(posedge clk or posedge reset) beginif(reset) beginwr_flag <= 0;addra   <= 0;end else beginwr_flag <= wr_finish ? ~wr_flag : wr_flag;addra   <= wr_finish ? 0 : (valid_i ? (addra + 1'b1) : addra);end
end/緩存狀態保存///
//先判斷buffer是否寫滿,寫滿開始讀;繼而判斷是否讀空,讀空則開始寫
always@(posedge clk or posedge reset) beginif(reset) beginbuffer0_status <= 0;buffer1_status <= 0;end else beginbuffer0_status <= ((~wr_flag) && wr_finish) ? 1'b1 :(((~rd_flag) && rd_finish) ? 1'b0 : buffer0_status);buffer1_status <= (wr_flag && wr_finish) ? 1'b1:((rd_flag && rd_finish) ? 1'b0 : buffer1_status);end
end /讀取邏輯///
//讀地址一般邏輯
always@(posedge clk or posedge reset) beginif(reset) beginaddrb   <= 0;rd_flag <= 0;end else beginaddrb   <= rd_en ? ((addrb == img_width - 1) ? 'b0 : addrb + 1'b1) : addrb;rd_flag <= rd_finish ? ~rd_flag : rd_flag;end
end 
//鏡像讀數據地址 水平鏡像,從右往左
wire [10:0] addrb_flip;
assign      addrb_flip = img_width - 1 - addrb;bram_line_buffer u0 (.clka (clk         ),   // input wire clka.wea  (buffer0_wr  ),   // input wire [0 : 0] wea.addra(addra       ),   // input wire [10 : 0] addra.dina (data_i      ),   // input wire [23 : 0] dina.clkb (clk         ),   // input wire clkb.addrb(addrb_flip  ),   // input wire [10 : 0] addrb.doutb(buffer0_dout)    // output wire [23 : 0] doutb
);bram_line_buffer u1 (.clka (clk         ),   // input wire clka.wea  (buffer1_wr  ),   // input wire [0 : 0] wea.addra(addra       ),   // input wire [10 : 0] addra.dina (data_i      ),   // input wire [23 : 0] dina.clkb (clk         ),   // input wire clkb.addrb(addrb_flip  ),   // input wire [10 : 0] addrb.doutb(buffer1_dout)    // output wire [23 : 0] doutb
);//輸出數據打一拍延時
always@(posedge clk or posedge reset) beginif(reset) beginrd_en_d <= 0;rd_flag_d <= 0;end else beginrd_en_d <= rd_en;rd_flag_d <= rd_flag;endend 
//輸出
always@(posedge clk or posedge reset) beginif(reset) beginvalid_o <= 0;data_o <= 0;end else beginvalid_o <= rd_en_d;data_o <= rd_flag_d ? buffer1_dout : buffer0_dout;end
end    endmodule

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

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

相關文章

微服務八股(自用)

微服務 SpringCloud 注冊中心&#xff1a;Eureka 負載均衡&#xff1a;Ribbon 遠程調用&#xff1a;Feign 服務熔斷&#xff1a;Hystrix 網關&#xff1a;Gateway/Zuul Alibaba 配置中心&#xff1a;Nacos 負載均衡&#xff1a;Ribbon 服務調用&#xff1a;Feign 服務…

ESP32_IDF_OTA_HTTP升級固件

ESP32_IDF_OTA_HTTP升級固件 前言&#xff1a;一個項目的主控使用的是ESP32&#xff0c;因為封裝外殼的原因&#xff0c;所以需要采用OTA的方式進行升級&#xff0c;因為之前有對WIFI的OTA有所了解&#xff0c;所以在此基礎上&#xff0c;使用官方提供的native_ota_example例程…

MySQL表結構化:數據類型與表生命周期詳解

引言 各位數據庫學習者大家好&#xff01;今天我們將深入探討MySQL中最核心的對象——表&#xff08;Table&#xff09;的各類操作 &#x1f3af;。表是存儲數據的基石&#xff0c;就像Excel中的工作表一樣&#xff0c;但功能要強大得多&#xff01;無論是電商網站的用戶信息&…

React中的狀態管理Dva總結

在 React 開發中&#xff0c;隨著應用的復雜度增加&#xff0c;如何高效地管理應用狀態成為了一個非常重要的問題。為了解決這一問題&#xff0c;很多開發者選擇了 Redux&#xff0c;然而 Redux 的學習曲線較陡&#xff0c;且需要配置較多的樣板代碼。為此&#xff0c;Ant Desi…

數據結構中的高級排序算法

希爾排序 你可以將希爾排序理解成——先通過幾次分組的、較小的組間插入排序將原數組變得有序&#xff0c;最后再進行一次序列基本有序的完整插入排序。 #include <stdio.h>#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0]))void print_arr(int arr[], int len) {for…

計算機視覺最不卷的方向:三維重建學習路線梳理

提到計算機視覺&#xff08;CV&#xff09;&#xff0c;大多數人腦海中會立馬浮現出一個字&#xff1a;“卷”。卷到什么程度呢&#xff1f;2022年秋招CV工程師崗位數下降了16%&#xff0c;但求職人數增加了23%&#xff0c;求職人數與招聘崗位的比例達到了恐怖的15:1&#xff0…

【Docker】Docker環境下快速部署Ollama與Open-WebUI:詳細指南

Docker環境下快速部署Ollama與Open-WebUI&#xff1a;詳細指南 在本篇文章中&#xff0c;我們將深入探討如何在Docker中高效部署 Ollama 和 Open-WebUI&#xff0c;并解決在實際使用中常見的問題&#xff0c;確保你的模型服務穩定高效地運行。 一、Ollama 和 Open-WebUI 快速部…

Vue3學習(組合式API——Watch偵聽器詳解)

目錄 一、Watch偵聽器。 &#xff08;1&#xff09;偵聽單個數據。 &#xff08;2&#xff09;偵聽多個數據。&#xff08;數組寫法&#xff1f;&#xff01;&#xff09; &#xff08;3&#xff09;immediate參數。(立即執行回調) &#xff08;3&#xff09;deep參數。(深層監…

SARIMA-LSTM融合模型對太陽黑子數量預測分析|附智能體數據代碼

全文智能體鏈接&#xff1a;https://tecdat.cn/?p41969 分析師&#xff1a;Peng Fan 本研究以太陽黑子活動數據為研究對象&#xff0c;旨在幫助客戶探索其未來走勢并提供預測分析。首先&#xff0c;通過對數據的清洗和處理&#xff0c;包括離群值的識別與處理以及時間序列的建…

簡單易懂的JavaScript中的this指針

文章目錄 默認綁定 / 隱式綁定如何調整this1.用變量固定this2.箭頭函數2.bind3.call/apply&#xff08;一次性&#xff09; 默認綁定 / 隱式綁定 要找this指針指向誰&#xff0c;我們首先要做的是&#xff1a;找到一個明確的對象&#xff0c;這個對象調用了含有this指針的函數…

Spring MVC數據綁定和響應 你了解多少?

數據綁定的概念 在程序運行時&#xff0c;Spring MVC接收到客戶端的請求后&#xff0c;會根據客戶端請求的參數和請求頭等數據信息&#xff0c;將參數以特定的方式轉換并綁定到處理器的形參中。Spring MVC中將請求消息數據與處理器的形參建立連接的過程就是Spring MVC的數據綁…

BMS工具箱用來執行貝葉斯模型平均(BMA)計算模塊

貝葉斯模型平均&#xff08;Bayesian Model Averaging&#xff0c;BMA&#xff09;是一種用于處理模型不確定性的統計方法&#xff0c;通過結合多個模型的預測結果來提高預測的準確性和魯棒性。在 MATLAB 中&#xff0c;可以使用專門的工具箱&#xff08;如 BMS 工具箱&#xf…

Java內存馬的檢測與發現

【網絡安全】Java內存馬的檢測與發現 一、Java內存馬的現象二、檢測思路三、重點關注類四、檢測方法1. 檢查方法&#xff08;FindShell&#xff09;2. 檢查方法&#xff08;sa-jdi&#xff09;3. 檢查方法&#xff08;arthas-boot&#xff09;4. 檢查方法&#xff08;cop.jar&a…

ISP有感自發

一、黑電平 由于傳感器&#xff0c;即便在無光的情況下&#xff0c;依然會產生微小的暗電流&#xff0c;這些暗電流可能是噪點會影響后期的調試。因此&#xff0c;我們便將這些電流處理為0&#xff0c;成為純黑的顏色。可以在源頭消除這些誤差。 如何矯正黑電平&#xff1a; …

數字信號處理-大實驗1.1

MATLAB仿真實驗目錄 驗證實驗&#xff1a;常見離散信號產生和實現驗證實驗&#xff1a;離散系統的時域分析應用實驗&#xff1a;語音信號的基音周期&#xff08;頻率&#xff09;測定 目錄 一、常見離散信號產生和實現 1.1 實驗目的 1.2 實驗要求與內容 1.3 實驗…

【SSL證書系列】https雙向認證中客戶端認證的原理

HTTPS雙向認證&#xff08;也稱為雙向SSL/TLS認證&#xff09;是一種增強安全性的機制&#xff0c;其中客戶端和服務器都需要驗證彼此的數字證書&#xff0c;以確保雙方身份的真實性。以下是其核心原理和步驟的詳細解析&#xff1a; 一、雙向認證的核心目標 雙向身份驗證&#…

Linux系統編程——fork函數的使用方法

在 Linux 系統編程 中&#xff0c;fork() 函數是創建新進程的關鍵系統調用。fork() 在當前進程&#xff08;父進程&#xff09;中創建一個幾乎完全相同的子進程。子進程和父進程從調用 fork() 的位置繼續執行&#xff0c;但它們是兩個獨立的進程&#xff0c;每個進程都有自己的…

LLMs之ChatGPT:《Connecting GitHub to ChatGPT deep research》翻譯與解讀

LLMs之ChatGPT&#xff1a;《Connecting GitHub to ChatGPT deep research》翻譯與解讀 導讀&#xff1a;這篇OpenAI幫助文檔全面介紹了將GitHub連接到ChatGPT進行深度代碼研究的方法、優勢和注意事項。通過連接GitHub&#xff0c;用戶可以充分利用ChatGPT強大的代碼理解和生成…

flutter 視頻通話flutter_webrtc

flutter 比較熱門的庫 flutter_webrtc | Flutter package agora_rtc_engine | Flutter package 我使用的是flutter_webrtc 下面是官方推薦的demo庫 GitHub - flutter-webrtc/flutter-webrtc-demo: Demo for flutter-webrtc 其中 https://demo.cloudwebrtc.com:8086/ 已經停…

同設備訪問php的多個接口會有先后等待問題

同設備訪問php的多個接口會有先后等待問題 這個現象的核心原因通常與 PHP 的 Session 鎖機制 有關&#xff0c;即使兩個接口表面上無關聯&#xff0c;也可能因共享 Session 導致請求排隊。以下是詳細分析&#xff1a; 關鍵背景&#xff1a;PHP 的 Session 鎖機制 PHP 的 Sessi…