主要内容

HDL

この例は,イメージをシャープ化するFPGAベースのモジュールを,视觉HDL工具箱™を使用して実装する方法を示します。

视觉HDL工具箱には,読みやすく合成可能な硬件描述语言(VHDL)コードやVerilogコードをHDL编码器™で生成できるように設計されたイメージ処理および動画処理のアルゴリズムが備わっています。生成されたHDLコードをFPGA(たとえば,Xilinx XC7Z045など)で実行すると,60フレーム/秒で1920 x 1080の高解像度イメージを処理できます。

この例は、视觉HDL工具箱を使用して,ブレを含むイメージをシャープ化するHDLコードの生成方法を示します。视觉HDL工具箱アルゴリズムは MATLAB® System objects™ や Simulink® ブロックとして使用できるため、MATLAB または Simulink から HDL コードを生成できます。この例では両方のワークフローを示します。

Fpgaタ,ゲット設計のワ,クフロ,:

1.設計目標を表す動作モデルを作成します。

2.FPGAに適しており,かつHDLコード生成でサポートされているアルゴリズム,インターフェイス,データ型を使用して設計を再現します。

3.2つの設計をシミュレートし,その結果を比較して,目標に沿ったHDL最適化設計であることを確認します。

4.手順2で作成した設計からHDLコ,ドを生成します。

MATLABの場合,手順2および3でMATLAB, Vision HDL工具箱,定点设计器™が必要です。金宝appSimulinkの場合,Simulink, Vision HDL工具箱,定点设计器が必要です。いずれの場合も,HDLコ,ドの生成にはHDL编码器が必要になります。

動作モデル

次の図の左側に入力▪▪メ▪ジimgBlurを示します。右側には,图像处理工具箱™関数imfilterを使用してシャプにしたメジがあります。

後で比較するときのベンチマ,クとしてシミュレ,ション時間が表示されます。

imgBlur = imread(“riceblurred.png”);sharpCoeff = [0 0 0;0 1 0;0 0 0]-fspecial(的拉普拉斯算子, 0.2);f = @() imfilter(imgBlur,sharpCoeff,“对称”);流('所用时间为%。6 f秒。\ n”时间(f));imgSharp = imfilter(imgBlur,sharpCoeff,“对称”);图imshowpair (imgBlur imgSharp,“蒙太奇”)标题(“模糊图像和锐化图像”
运行时间为0.000606秒。

HDL最適化設計の注意事項

HDLコドを生成できるようにするには,3の重要な変更が必要になります。

  • HDLフレンドリなアルゴリズムの使用:图像处理工具箱の関数はHDLコード生成をサポートしていません。高密度脂蛋白の効率的な実装のために設計されたイメージ処理および動画処理のアルゴリズムが愿景HDL工具箱で提供されています。功能(视觉HDL工具箱)(视觉HDL工具箱)を使用して,これらのアルゴリズムからHDLコ,ドを生成できます。この例では両方のワ,クフロ,を示します。FPGAベースのモジュールを設計するには,图像处理工具箱の関数を,それに対応する愿景HDL工具箱のHDLフレンドリな同等の機能に置き換えます。この例では,動作モデルのimfilterを,matlabのvisionhdl。ImageFilter系统对象またはSimulinkの金宝app图像滤波ブロックに置き換えています。

  • ストリ,ミングピクセル,ンタ,フェ,スの使用:图像处理工具箱の関数は高度に抽象化されたモデルを作成します。これらの関数は▪▪メ▪▪ジフレ▪ムを1個ず▪▪フルフレ▪ムで処理します。一方,FPGAやASICの実装では,イメージピクセルを1つずつ処理するピクセルストリーム処理が行われます。视觉HDL工具箱のブロックと System object ではストリーミング ピクセル インターフェイスを使用します。フル フレームのイメージやビデオをピクセル ストリームに変換するには、MATLAB のvisionhdl。FrameToPixels系统对象またはSimulinkの金宝app帧到像素ブロックを使用します。ストリーミングピクセルインターフェイスには,フレーム内での各ピクセルの位置を示す制御信号が含まれています。ピクセルの近傍を処理するアルゴリズムでは内部メモリを使用して最小数のラ@ @ンを格納します。视觉HDL工具箱はストリーミング ピクセル インターフェイスと自動メモリ実装を備えており、FPGA や ASIC をターゲットにするときの一般的な設計問題に対応します。Vision HDL Toolbox の System object で使用されるストリーミング ピクセル プロトコルの詳細については、流媒体像素接口(视觉HDL工具箱)を参照してください。

  • 固定小数点デ,タ表現の使用:图像处理工具箱の関数は浮動小数点領域または整数領域で動画処理アルゴリズムを実行します。视觉HDL工具箱の System object およびブロックで FPGA や ASIC をターゲットにする HDL コードを生成するためには、固定小数点データにする必要があります。設計を固定小数点に変換すると、量子化誤差が発生する可能性があります。そのため、HDL フレンドリなモデルで生成される出力は、動作モデルから得られる出力と若干異なる場合もあります。ほとんどの場合、許容誤差内の小さい量子化誤差は問題となりません。要件に応じて固定小数点設定を調整することができます。

この例では,静的メジをソスとして使用します。また,このモデルは連続したビデオ入力を処理することもできます。

MatlabからのHDLコ,ドの生成

MATLABからHDLを生成するには,コードをテストベンチと設計の2つのファイルに分割する必要があります。設計ファaapl . exeルはアルゴリズムをaapl . exe fpgaまたはasicに実装する場合に使用します。テストベンチファ▪▪ルは入力デ▪タを設計ファ▪▪ルに与え,設計の出力を受け取ります。

手順1:表示設計ファ

関数ImageSharpeningHDLDesign.mはピクセルストリームと,5つの制御信号から構成される制御構造体を受け入れ,変更後のピクセルストリームと制御構造体を返します。

この例では,visionhdl。ImageFilter系统对象が設計に含まれています。これは関数imfilterに対応する,hdlフレンドリな同等の機能です。imfilterと同じ係数およびパディング方法を使用して設定します。

函数[pixOut,ctrlOut] = ImageSharpeningHDLDesign(pixIn,ctrlIn)使用像素流实现算法%来自Vision HDL工具箱的系统对象版权所有The MathWorks, Inc.% # codegen持续的sharpeningFilter;如果isempty(sharpeningFilter) sharpCoeff = [0 0 0;0 1 0;0 0 0]-fspecial(的拉普拉斯算子, 0.2);sharpeningFilter = visionhdl。ImageFilter (...“系数”sharpCoeff,...“PaddingMethod”“对称”...“CoefficientsDataType”“自定义”...“CustomCoefficientsDataType”12) numerictype(16日);结束[pixOut,ctrlOut] = sharpeningFilter(pixIn,ctrlIn);

手順2:表示テストベンチファ

テストベンチImageSharpeningHDLTestBenchでブレを含む▪▪メ▪▪ジを読み取ります。frm2pixオブジェクトでフルメジフレムをピクセルストリムと制御構造体に変換します。テストベンチにより,ピクセルを1ImageSharpeningHDLDesignが呼び出されます。ピクセルストリ,ム全体が処理されたら,pix2frmで出力ピクセルストリムをフルフレムメジに変換します。テストベンチは出力▪▪メ▪▪ジを参照出力imgSharpと比較します。

...[pixInVec,ctrlInVec] = frm2pix(imgBlur);p = 1:numPixPerFrm [pixOutVec(p),ctrlOutVec(p)] = ImageSharpeningHDLDesign(pixInVec(p),ctrlInVec(p));结束imgOut = pix2frm(pixOutVec,ctrlOutVec);
%比较结果imgDiff = imabsdiff(imgSharp,imgOut);流('对应像素之间的最大差值为%d.\n'马克斯(imgDiff (:)));流('总共有%d个像素是不同的。\n'nnz (imgDiff));...

手順3:設計のシミュレションおよび結果の確認

高密度脂蛋白コードの生成前にテストベンチを使用して設計をシミュレートし,実行時エラーが発生しないことを確認します。

ImageSharpeningHDLTestBench
对应像素之间的最大差值为1。总共有41248个像素是不同的。模拟耗时664.096485秒完成。

テストベンチは比較結果とシミュレ,ションに要した時間を表示します。量子化誤差および丸め誤差により,合計256 * 256 = 65536ピクセルのうちimgOutの38554ピクセルがimgSharpと異なっています。一方,強度の最大の差は1です。0から255のスケル上では,視認できないほどの差です。

MATLABと動作モデルのシミュレーション時間を比較するとわかるように,ピクセルストリーミングプロトコルが多大なオーバーヘッドをもたらしています。MATLAB编码器™を使用すると,MATLABでのピクセルストリーミングシミュレーションを高速化できます。使用MATLAB编码器加速像素流设计(视觉HDL工具箱)を参照してください。

手順4:HDLコ,ドの生成

FPGAターゲットモデルで満足な結果が得られたら,高密度脂蛋白编码器を使用して設計からHDLコードを生成することができます。生成されたHDLコードは,高密度脂蛋白シミュレーターで実行したり,FPGAに読み込んで物理システムで実行することができます。

設計ファイルとテストベンチファイルが同一の書き込み可能なディレクトリにあることを確認してください。HDLコ,ドを生成するには,次のコマンドを使用します。

HDLCFG = code .config(“高密度”);hdlcfg。TestBenchName =“ImageSharpeningHDLTestBench”;hdlcfg。开发“Verilog”;hdlcfg。GenerateHDLTestBench = false;codegen配置hdlcfgImageSharpeningHDLDesign

高密度脂蛋白プロジェクトの作成とMATLABの設定に関する詳細については,高密度脂蛋白编码器ドキュメンテーションの“开始使用MATLAB HDL工作流”チュートリアルを参照してください。

金宝appSimulinkからのHDLコ,ドの生成

手順1:HDL最適化モデルの作成

ImageSharpeningHDLModelモデルを以下に示します。

modelname =“ImageSharpeningHDLModel”;open_system (modelname);set_param (modelname“开放”“上”);

ブレを含む▪▪メ▪▪ジをこのモデルで読み取ります。帧到像素ブロックでフル フレーム イメージをピクセル ストリームに変換し、Pixels To Frame ブロックでピクセル ストリームを元のフル フレーム イメージに変換します。Image Sharpening HDL System に含まれている Image Filter ブロックは、動作モデル内の関数imfilterに対応するHDLフレンドリな视觉HDL工具箱のブロックです。

set_param (modelname“开放”“关闭”);set_param ([modelname'/Image Sharpening HDL System'),“开放”“上”);

以下のマスクで示すように,图像滤波器ブロックは動作モデルと同じシャープ化係数およびパディング方法を使用して設定します。

手順2:設計のシミュレ,ションおよび結果の確認

抽搐sim (modelname);toc
运行时间为16.774461秒。

金宝appSimulinkではCコ,ド生成を利用してシミュレ,ションを高速化します。そのため,動作モデルには劣るもののmatlabシミュレ,ションよりはるかに高速です。

シミュレ,ションでは,imgOutという名前の新しい変数がワ,クスペ,スに作成されます。次のコマンドを使用してimgOutを,動作モデルから生成されたimSharpと比較します。

imgDiff = imabsdiff(imgSharp,imgOut);流('对应像素之间的最大差值为%d.\n'马克斯(imgDiff (:)));流('总共有%d个像素是不同的。\n'nnz (imgDiff));
对应像素之间的最大差值为1。总共有41248个像素是不同的。

量子化誤差および丸め誤差により,合計256*256=65536ピクセルのうimgOutの41248ピクセルがimgSharpと異なっています。一方,強度の最大の差は1です。0から255のスケル上では,視認できないほどの差です。(この理論は,“matlabからのHDLコドの生成”の手順3にも示されています。)

手順3:HDLコ,ドの生成

FPGAターゲットモデルで満足な結果が得られたら,高密度脂蛋白编码器を使用して設計からHDLコードを生成することができます。生成されたHDLコードは,高密度脂蛋白シミュレーターで実行したり,FPGAに読み込んで物理システムで実行することができます。

次のコマンドを使用して图像锐化高密度脂蛋白系统からHDLコードを生成します。

makehdl (imagesharpeninghdl模型/图像锐化HDL系统
set_param ([modelname'/Image Sharpening HDL System'),“开放”“关闭”);close_system (modelname 0);关闭所有