色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在FPGA上實現HDL代碼完成MATLAB轉換

454398 ? 來源:MATLAB微信公眾號 ? 作者:MATLAB微信公眾號 ? 2020-11-08 10:36 ? 次閱讀

如果您正在使用 MATLAB 建模數字信號處理(DSP)或者視頻和圖像處理算法,并且最終將其用于 FPGAASIC,本文可能將為你帶來幫助。

從 MATLAB 生成 HDL 代碼
FPGA 在通用處理器(GPP)和專用集成電路(ASIC)之間提供了很好的折中方案。GPP 是完全可編程的,但在功率和性能方面效率較低;ASIC 可實現專用的功能,并展現出最佳的功率和性能特性,但需要極其昂貴的設計驗證和實現周期。FPGA 也用于 ASIC 工作流中的原型設計,以進行硬件驗證和早期軟件開發。

由于在運行高吞吐量、高性能的應用程序時,性能有了大幅度的提高,算法設計者越來越多地使用 FPGA 而不是傳統的處理器來原型化和驗證創新。然而,由于 MATLAB 簡單易用的編程模型和豐富的分析和可視化能力,許多算法都是在其中實現的。當針對 FPGA 或 ASIC 時,這些 MATLAB 算法必須手動轉換為 HDL。

對于許多精通軟件編程的算法開發人員來說,掌握 FPGA 設計工作流是一項挑戰。與軟件算法開發不同,硬件開發要求并行思想。存在的其他障礙包括:學習 VHDL 或 Verilog 語言,掌握 FPGA 供應商的 IDE,理解深奧的術語,如“多周期路徑”和“延遲平衡”等。

在這篇文章中,我將介紹一個從 MATLAB 轉換為 FPGA 的簡單路徑。我將展示如何從 MATLAB 算法自動生成 HDL 代碼,在 FPGA 上實現 HDL 代碼,并使用 MATLAB 來驗證您的 HDL 代碼。

MATLAB 到硬件工作流
將 MATLAB 設計轉換為硬件的過程包括以下步驟:
1. 在 MATLAB 中建模您的算法——使用 MATLAB 來模擬、調試、迭代測試并優化設計。
2. 生成 HDL 代碼——自動創建用于 FPGA 原型的 HDL 代碼。
3. 驗證 HDL 代碼——重用您的 MATLAB test bench 來驗證生成的 HDL 代碼。
4. 創建和驗證 FPGA 原型——在 FPGA 上實現和驗證您的設計。

將 MATLAB 轉換為硬件存在一些獨特的挑戰。MATLAB 代碼是過程性的,可以高度抽象;它可以使用浮點數據,并且沒有時間概念。復雜的循環可以從矩陣運算和工具箱函數推斷出來。

在硬件中實現 MATLAB 代碼包含以下操作:

將浮點 MATLAB 代碼轉換為具有優化位寬的定點 MATLAB 代碼,以實現高效的硬件生成。

識別程序結構并將其映射到并發的經過面積和速度優化的硬件操作上。

通過添加時鐘和時鐘率來調度硬件中的操作,引入時間的概念。

創建資源共享架構來實現昂貴的操作符,如乘數和 for 循環體。

將大型持久化數組映射到硬件中的塊RAM

HDL Coder? 可通過工作流自動化簡化上述任務。

MATLAB 算法示例
讓我們用MATLAB函數來實現直方圖均衡化并完成此工作流。該算法在 MATLAB 中實現,通過變換灰度像中的值來增強圖像對比度,使輸出圖像的直方圖近似平坦。
type mlhdlc_heq.m

% Histogram Equalization Algorithm
function [pixel_out] = mlhdlc_heq(x_in, y_in, pixel_in, width, height)

persistent histogram
persistent transferFunc
persistent histInd
persistent cumSum

if isempty(histogram)
histogram = zeros(1, 2^8);
transferFunc = zeros(1, 2^8);
histInd = 0;
cumSum = 0;
end

% Figure out indices based on where we are in the frame
if y_in histInd = pixel_in + 1;
elseif y_in == height && x_in == 0 % first column of height+1
histInd = 1;
elseif y_in >= height % vertical blanking period
histInd = min(histInd + 1, 2^8);
elseif y_in histInd = 1;
end

%Read histogram
histValRead = histogram(histInd);

%Read transfer function
transValRead = transferFunc(histInd);

%If valid part of frame add one to pixel bin and keep transfer func val
if y_in histValWrite = histValRead + 1; %Add pixel to bin
transValWrite = transValRead; %Write back same value
cumSum = 0;
elseif y_in >= height %In blanking time index through all bins and reset to zero
histValWrite = 0;
transValWrite = cumSum + histValRead;
cumSum = transValWrite;
else
histValWrite = histValRead;
transValWrite = transValRead;
end

%Write histogram
histogram(histInd) = histValWrite;

%Write transfer function
transferFunc(histInd) = transValWrite;

pixel_out = transValRead;

MATLAB Test Bench 示例
下面是一個 test bench,用于驗證算法是否對示例圖像起作用。(注意,此 testbench 使用 Image Processing Toolbox 的內置函數來讀取原始圖像,并在均衡后繪制轉換的圖像。)
type mlhdlc_heq_tb.m

%% Test bench for Histogram Equalization Algorithm
clear mlhdlc_heq;
testFile = 'office.png';
RGB = imread(testFile);

% Get intensity part of color image
YCBCR = rgb2ycbcr(RGB);
imgOrig = YCBCR(:,:,1);

[height, width] = size(imgOrig);
imgOut = zeros(height,width);
hBlank = 20;
% make sure we have enough vertical blanking to filter the histogram
vBlank = ceil(2^14/(width+hBlank));

for frame = 1:2
disp(['working on frame: ', num2str(frame)]);
for y_in = 0:height+vBlank-1
%disp(['frame: ', num2str(frame), ' of 2, row: ', num2str(y_in)]);
for x_in = 0:width+hBlank-1
if x_in pixel_in = double(imgOrig(y_in+1, x_in+1));
else
pixel_in = 0;
end

[pixel_out] = mlhdlc_heq(x_in, y_in, pixel_in, width, height);

if x_in imgOut(y_in+1,x_in+1) = pixel_out;
end
end
end
end

% Make color image from equalized intensity image
% Rescale image
imgOut = double(imgOut);
imgOut(:) = imgOut/max(imgOut(:));
imgOut = uint8(imgOut*255);

YCBCR(:,:,1) = imgOut;
RGBOut = ycbcr2rgb(YCBCR);

figure(1)
subplot(2,2,1); imshow(RGB, []);
title('Original Image');
subplot(2,2,2); imshow(RGBOut, []);
title('Equalized Image');
subplot(2,2,3); hist(double(imgOrig(:)),2^14-1);
title('Histogram of original Image');
subplot(2,2,4); hist(double(imgOut(:)),2^14-1);
title('Histogram of equalized Image');

我們來仿真一下此算法,看看結果。

mlhdlc_heq_tb

HDL Workflow Advisor
HDL Workflow Advisor(請參見下面的快照)有助于自動執行步驟,并提供從MATLAB到硬件的引導。您可以在 Workflow Advisor 的左窗格中看到工作流的以下關鍵步驟:
1. 定點轉換
2. HDL 代碼生成
3. HDL 驗證
4. HDL 綜合與分析

我們來詳細看看工作流中的每個步驟。

定點轉換
信號處理應用程序通常使用 MATLAB 中的浮點運算來實現。但是,出于功耗、成本和性能的原因,在面向硬件時,需要將這些算法轉換為使用定點運算。定點轉換非常具有挑戰性并且非常耗時,通常需要占用整個設計和實施時間的 25% 到 50%。HDL Coder? 中用于浮點到定點自動轉換的工作流可以極大地簡化和加速轉換過程。

浮點到定點轉換工作流包括以下步驟:
1. 驗證浮點設計與代碼生成兼容。
2. 根據計算范圍,通過模擬 test bench 或通過靜態分析(將傳播設計范圍以計算所有變量的派生范圍)提出定點類型。
3. 通過應用建議的定點類型生成定點 MATLAB 代碼。
4. 驗證生成的定點代碼,并將生成的定點代碼的數值精度與原始浮點代碼進行比較。

請注意,此步驟是可選的。如果您的 MATLAB 設計已在定點實現,則可以跳過此步驟。

HDL 代碼生成
HDL 代碼生成步驟通過定點 MATLAB 代碼生成 HDL 代碼。您可以生成實現 MATLAB 設計的 VHDL 或 Verilog 代碼。除了生成可綜合的HDL代碼外,HDL Coder? 還可生成各種報告,包括可幫助您在 MATLAB 代碼和生成的 HDL 代碼之間導航的可跟蹤報告,以及在算法級別顯示實現設計所需硬件資源(加法器、乘法器和 RAM)的資源利用率報告。

在代碼生成期間,您可以指定各種優化選項來探索設計空間,而無需修改算法。在下面的“設計空間探索和優化選項”部分中,您可以看到如何修改代碼生成選項以及如何針對速度或面積來優化設計。

HDL 驗證
獨立 HDL test bench 的生成:
HDL Coder? 可通過您的 MATLAB 腳本生成 VHDL 和 Verilog test bench,以快速驗證生成的 HDL 代碼。您可以使用將激勵應用于 HDL 代碼的多個選項來自定義 HDL test bench。您還可以生成腳本文件,以自動執行在 HDL 模擬器中編譯和模擬代碼的過程。這些步驟有助于確保 MATLAB 仿真的結果與 HDL 仿真的結果相匹配。

HDL Coder? 還與 HDL Verifier 一起使用,以自動生成兩種類型的協同仿真 test bench:

基于 HDL 協同仿真的驗證可與 MentorGraphics? ModelSim? 和 QuestaSim? 配合使用,其中 MATLAB 和 HDL 仿真可前后相接。

FPGA 在環仿真允許您與 FPGA 電路板嚴格同步地運行 MATLAB 仿真。您可以使用 MATLAB 將實際的數據輸入到 FPGA 的設計中,并確保該算法在硬件中實現時能夠達到預期的性能。

HDL 綜合
除了與語言相關的挑戰外,FPGA 編程還需要使用復雜的 EDA 工具。從 HDL 設計中生成比特流并對 FPGA 進行編程可能是一項艱巨的任務。HDL Coder? 通過為 Xilinx? 和 Altera? 創建用生成的HDL代碼配置的項目文件,可在此處提供自動化。您可以使用工作流步驟在MATLAB 環境中綜合 HDL 代碼,查看綜合結果,并迭代 MATLAB 設計以改善綜合結果。

設計空間探索和優化選項
HDL Coder? 提供以下優化,以幫助您探索如何在設計空間的面積和速度之間進行權衡。您可以使用這些選項來探索各種架構并進行各種權衡,而不必手動重寫算法。

速度優化

流水線:為了提高設計的時鐘頻率,HDL Coder 使您可以在設計中的各個位置插入流水線寄存器。例如,您可以在設計的輸入和輸出處以及在算法中給定 MATLAB 變量的輸出處插入寄存器。

分布式流水線:HDL Coder 還提供了基于重定時的優化,可通過設計中的組合路徑將延遲降到最小,以此自動移動插入的流水線寄存器,從而最大化時鐘頻率。

面積優化

RAM 映射:HDL Coder? 將矩陣映射到硬件中的導線或寄存器。如果將持久性矩陣變量映射到寄存器,則它們會占用大量的FPGA面積。HDL Coder?會自動將持久性矩陣映射到塊RAM,以提高面積效率。將MATLAB矩陣映射到塊RAM的挑戰在于,硬件中的塊RAM通常具有一組有限的讀寫端口。HDL Coder? 通過自動劃分和調度矩陣讀寫來滿足塊 RAM 的端口限制,同時仍然遵循設計中的其他控制依賴性和數據依賴性來解決此問題。

資源共享:此優化可以識別并共享 MATLAB 代碼中具有等效功能的乘法器操作。您可以控制設計中的乘數器共享量。

循環流:MATLAB 的 for 循環可在 VHDL 中創建一個 FOR_GENERATE 循環。循環主體在硬件中的復制次數與循環迭代次數相同。這會導致面積使用的低效。循環流優化會創建循環體的單個硬件實例,該實例在循環迭代之間進行時間多路復用。

常數乘法器優化:此設計級別的優化使用正則有符號數(CSD)技術將常數乘法器轉換為移位和加法運算。

最佳實踐方法
現在,我們來看幾個在面向 FPGA 來編寫 MATLAB 代碼時的最佳實踐方法。

編寫 MATLAB 設計時:

使用支持 HDL 代碼生成的 MATLAB 代碼生成子集。

使頂層接口盡可能簡單。頂層功能的大小、類型和復雜性決定了在硬件中實現的芯片接口。

不要將大量并行數據傳遞到設計中。并行數據需要芯片上的大量 IO 引腳,并且可能無法綜合。在典型的圖像處理設計中,您應該將像素輸入串行化,并在算法內部緩沖它們。

編寫 MATLAB test bench 時:

從 test bench 函數調用設計。

徹底執行設計。這對于浮點到定點轉換尤為重要,其中 HDL Coder? 會根據 test bench 分配給變量的值來確定算法中變量的范圍。您可以重復使用此測試工作臺來生成 HDL test bench,以測試所生成的硬件。

在代碼生成之前用 test bench 對設計進行仿真,以確保沒有仿真錯誤,并確保所有必需的文件都在路徑中。

結論
HDL Coder? 提供了在 FPGA 中實現算法的無縫工作流。在本文中,我向您展示了如何采用 MATLAB 圖像處理算法、將其轉換為定點、生成 HDL 代碼、使用 test bench 驗證生成的 HDL 代碼,以及最終綜合設計并在硬件中實現它。

通過本文對 HDL Coder? 以及 MATLAB 轉 HDL 代碼生成和驗證框架的簡要介紹,我們希望能助您了解如何開始快速實施 MATLAB 設計和目標 FPGA。

編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21729

    瀏覽量

    603012
  • matlab
    +關注

    關注

    185

    文章

    2974

    瀏覽量

    230385
  • asic
    +關注

    關注

    34

    文章

    1199

    瀏覽量

    120438
  • 數字信號處理

    關注

    15

    文章

    560

    瀏覽量

    45844
  • HDL
    HDL
    +關注

    關注

    8

    文章

    327

    瀏覽量

    47378
收藏 人收藏

    評論

    相關推薦

    基于FPGA實現數碼管顯示

    本文介紹數碼管顯示譯碼基本工作原理及Verilog HDL驅動代碼編寫,進一步熟練掌握FPGA入門基礎知識。
    的頭像 發表于 10-24 14:44 ?851次閱讀
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>實現</b>數碼管顯示

    FPGA Verilog HDL代碼如何debug?

    ,共同進步。 歡迎加入FPGA技術微信交流群14群! 交流問題(一) Q:Verilog代碼如何debug?最近學習fpga,寫了不少verilog,開始思考如何debug的問題!c語言是順序執行,而
    發表于 09-24 19:16

    FPGA芯片架構和資源有深入的理解,精通Verilog HDL、VHDL

    崗位職責 1.負責FPGA的架構設計、代碼編寫、仿真等; 2.協同軟、硬件工程師完成系統聯調和測試; 3.負責項目中FPGA設計的相關文檔編寫及維護; 任職要求 1.碩士及以上學歷,電
    發表于 09-15 15:23

    何在DRA821U使用Linux實現快速引導

    電子發燒友網站提供《如何在DRA821U使用Linux實現快速引導.pdf》資料免費下載
    發表于 09-03 10:11 ?0次下載
    如<b class='flag-5'>何在</b>DRA821U<b class='flag-5'>上</b>使用Linux<b class='flag-5'>實現</b>快速引導

    何在FPGA實現按鍵消抖

    按鍵操作。因此,實現有效的按鍵消抖機制對于提高系統的穩定性和可靠性至關重要。以下是在FPGA實現按鍵消抖的詳細步驟和策略,包括原理、方法、代碼示例及優化建議。
    的頭像 發表于 08-19 18:15 ?1768次閱讀

    何在FPGA實現隨機數發生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7中實現4位偽隨機數發生器(PRNGs)。
    的頭像 發表于 08-06 11:20 ?662次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>FPGA</b>中<b class='flag-5'>實現</b>隨機數發生器

    使用PYNQ訓練和實現BNN

    使用 PYNQ 可以輕松在 FPGA 實現加速 AI/ML,而無需編寫一行 HDL!讓我們看看如何做到這一點。
    的頭像 發表于 08-05 17:15 ?522次閱讀
    使用PYNQ訓練和<b class='flag-5'>實現</b>BNN

    何在FPGA實現狀態機

    FPGA(現場可編程門陣列)中實現狀態機是一種常見的做法,用于控制復雜的數字系統行為。狀態機能夠根據當前的輸入和系統狀態,決定下一步的動作和新的狀態。這里,我們將詳細探討如何在FPGA
    的頭像 發表于 07-18 15:57 ?568次閱讀

    何在FPGA實現神經網絡

    可編程門陣列(FPGA)作為一種靈活、高效的硬件實現方式,為神經網絡的加速提供了新的思路。本文將從FPGA實現神經網絡的基本原理、關鍵技術、實現
    的頭像 發表于 07-10 17:01 ?1905次閱讀

    FPGA verilog HDL實現中值濾波

    今天給大俠簡單帶來FPGA verilog HDL實現中值濾波,話不多說,上貨。一、實現步驟: 1、查看了中值濾波實現相關的網站和pa
    發表于 06-18 18:50

    FPGA設計中 Verilog HDL實現基本的圖像濾波處理仿真

    今天給大俠帶來FPGA設計中用Verilog HDL實現基本的圖像濾波處理仿真,話不多說,上貨。 1、用matlab代碼,準備好把圖片
    發表于 05-20 16:44

    FPGA基礎知識學習

    語言(HDL)如VHDL或Verilog來描述。這些描述定義了電路的功能和信號流,然后通過各種電子設計自動化(EDA)工具進行輔助設計、綜合化、布局和布線等處理,最終將設計轉化為可以在FPGA
    發表于 04-29 23:26

    何在Matlab實現不同窗低通濾波器的設計?

    Matlab中使用漢明窗設計低通濾波器可以通過fir1函數實現。漢明窗通常用于設計濾波器,可以提供更突出的頻率特性。
    的頭像 發表于 02-27 14:11 ?6602次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>Matlab</b>中<b class='flag-5'>實現</b>不同窗低通濾波器的設計?

    FPGA實現原理

    布局加載到實際的FPGA。這個過程通常通過向FPGA發送一個特定的二進制文件來完成。一旦FPGA被正確地編程,它就可以開始執行所設計的功能
    發表于 01-26 10:03

    怎么用FPGA做算法 如何在FPGA實現最大公約數算法

    FPGA算法的優點在于它們可以提供高度的定制化和靈活性,使得算法可以根據實際需求進行優化和調整。此外,FPGA還可以實現硬件加速,提供比傳統處理器更高的計算性能和吞吐量。因此,FPGA
    的頭像 發表于 01-15 16:03 ?2227次閱讀
    主站蜘蛛池模板: 国产一区二区内射最近更新| 草莓AV福利网站导航| 中文字幕无码A片久久| 亚洲欧洲一级| 这里只有精品在线视频| 13一18TV处流血TV| gogo免费在线观看| 春暖花开 性 欧洲| 国产视频精品在线偷拍| 花蝴蝶hd免费| 免费国产福利| 亚洲色偷偷偷网站色偷一区人人藻| 无码一区国产欧美在线资源| 免费在线观看的毛片| 青青伊人影院| 午夜福利影院私人爽爽| 亚洲一区国产| 国产精品人成在线播放新网站| 国产精品成人A蜜柚在线观看 | 国产精品野外AV久久久| 国产偷抇久久精品A片蜜臀A| 国产AV天堂一区二区三区| 国产AV一区二区三区日韩| 黄色软件色多多| 男人J进入女人P免费狂躁| 泰国淫乐园实录| 伊人热人久久中文字幕| 超碰免费视频部落格| 国产亚洲欧美在线中文BT天堂网| 久久伊人免费| 色狠狠婷婷97| 中文字幕精品AV内射夜夜夜| 草莓视频免费在线观看| 久久99AV无色码人妻蜜柚| 亲胸揉胸膜下刺激视频网站APP| 亚洲AV香蕉一区区二区三区蜜桃| 2018年免费三级av观看| 国产精品99| 免费国产久久啪久久爱| 新版孕妇bbwbbwbbw| a级成人免费毛片完整版|