空のプロジェクトを作成するには、前のブログ投稿VIVADO + ZYNQ7000を参照してください
。はじめに1.作成から運用までの最初のPLプログラム
ZYNQシリーズの製品では、Vivadoの開発環境ではPSシステムをIPコアと呼んでいます。次に、シンプルな機能のPSシステムを用意し、このシステムでシリアルポート印刷プログラムを実行してhelloworldを出力します。ストリング。
主な3つの側面があります。1つはARMコアIPコアを定義して単純なインターフェイスを構成すること、もう1つはIPコアをカプセル化して最上位のヘッダーファイルを設定すること、3つ目はVivado統合SDKで単純なシリアルポートプログラムを設計することです。
1つは、IPを定義する
新しいプロジェクトウィンドウの左端で、次の図に示すように、ポップアップウィンドウで1をクリックし、位置2にIPの名前を入力してから、[OK]をクリックします。
ポップアップする新しいウィンドウで、位置1のアイコンをクリックし、位置2に入力します。 zy検索では、ZYNQプロセッサシステムブロックをダブルクリックして表示できます。
ちょっと待ってください、zynqモジュールアイコンが私たちの前に表示されます!
それをダブルクリックします。目的は、いくつかのインターフェイス機能とパラメータをカスタマイズすることです。次のワークロードは少し大きくなります。これは、CPUの機能インターフェイスを構成するのと同じです。まず、クロック構成から始めて、下の図の赤い線をクリックします。
設定する前に、まず、クロックの機能ブロック図が含まれているザイリンクスの公式ドキュメントUG585を参照できます。CPU内に3つのPLLがあり、外部クリスタルクロックを3つの異なるクロックソースに分割していることがわかります。同時に、ARMコアクロックは、6:3:2:1と4:2:の2つの周波数乗算構成を持つことができます。 2:1。
基本的には当面はデフォルト設定を使用します。赤い線のボックスに注意してください。現在はシンプルなPSシステムのみを使用しており、クロック出力は不要です。チェックを外してください。
次に、PL-PS構成を選択し、AXIバスインターフェイスを削除します。この記事は一時的には使用されません。
次に、CPUから直接派生したMIO機能を設定します。この設定は、主に開発ボードのハードウェア回路図に従って設定します。
引き続きDDRの構成を行い、ボードで使用されているメモリモデルを選択し、PCB配線遅延補正を構成します。
各機能の設定が完了したら、自動配線をクリックします。
次に、検証機能を選択して、設計に問題がないか確認します。
2.パッケージIP
次の図の手順1、2、3を順番にクリックします。
ポップアップウィンドウで、[自動]を選択します。
デザインシステムのアイコンが変更され、名前が「design syswrapper」に変更されたことがわかります。下の図の赤い線を右クリックし、ポップアップウィンドウで[出力製品の生成]を選択します...
新しいウィンドウが後でポップアップし、パラメータがデフォルトになります。生む。
ここでエラーが表示されます。これは、ネットワーク信号レベルが正しく設定されていないことです。
戻って1.8Vに変更します。変更後、[出力製品の生成]を再度選択することを忘れないでください...
次のステップは、生成されたハードウェア構成をSDK開発環境に出力することです。
File–Export–Exprot Hardware ...
作業パスがデフォルトです。
次に、SDK開発環境を開きます。
3、SDK開発
2、シリアルポートSDKアプリケーション
次の操作はSDK環境で実行されます。
新しいプロジェクト/新しいCファイル。
まず、システムに付属の検証プログラムを呼び出して、ハードウェアシステムが実行できるかどうかを確認できます。
回路基板の電源を入れ、JTAGに接続して、デバイスが見つかるかどうかをテストします。
SDKにはシリアルポートレシーバープログラムが付属しています。もちろん、独立したシリアルポートソフトウェアを使用することもできます。私は独立したシリアルポートソフトウェアを使用しています。
次の操作を実行して、プログラムを実行します。
正常な場合、シリアルポートはいくつかのインターフェイスチェックプログラムを確認し、PASSEDを出力できます。
次に、独自のシリアルポートテストプロジェクトを作成します。
#include "xparameters.h"
#include "xuartps.h"
XUartPs Uart_Ps;
int main(void)
{
u8 HelloWorld[] = "Hello World";
int SentCount = 0;
XUartPs_Config *Config;
Config = XUartPs_LookupConfig(XPAR_XUARTPS_0_DEVICE_ID);
XUartPs_CfgInitialize(&Uart_Ps, Config, Config->BaseAddress);
XUartPs_SetBaudRate(&Uart_Ps, 115200);
while (SentCount < (sizeof(HelloWorld) - 1)) {
/* Transmit the data */
SentCount += XUartPs_Send(&Uart_Ps,
&HelloWorld[SentCount], 1);
}
return SentCount;
}
実行後、シリアル端末の最終行にハローワールドが印刷されているのがわかります。