KV260でLEDチカを行います。

Vivado でプロジェクト作成

Vivado MLによるKria KV260のFPGAのプログラム作成(その1)」に従ってプロジェクトを作成します。プロジェクト名は「LEDTest」とします。

Block Designer を利用してクロックを作成

KV260 は PL(Programmable Logic)に繋がる外部端子にクロックはありません。しかしクロックに同期して動くロジックを記述するRTLプログラミングではまずクロックが必要です。このため、PS(Processor System)からクロックを貰う必要があります。「KV260でSystemVerilogでLEDチカしてみる」を参考に作業を行います。

  1. 「Create Block Design 」を選択して、Design name「LEDTetPro」を作成します。
  2. 開いたダイアログの+ ボタンを押して、「Zynq UltraScale MPSoC」 を選びます。
  3. 「Run Block Automation」を選択します。
  4. 「 Apply Board Preset 」にチェックが入っていることを確認します。
  5. クロック「pl_clk0 」を右クリックして 「Make External」を選択します。
  6. Block Design の外に信号「pl-clk0_0」が引き出されます。「maxihpm0_aclk」 と 「maxihpm1_aclk 」にクロックが供給されていないのでエラーが出るため、クロックを接続します。

SystemVerilog でプログラムの記述

  1. Sources タブに切り替え、「Design Source」を右クリックして 「Add Source…」 を選択し、ソースコードを新規作成します
  2. 表示されたダイアログの「Add or create design source」にチェックを付けて 「Next 」を押します。
  3. 今回は新規に作成するので 「Create File」を押し、新規作成するソースコードの種類「SystemVerilog」とファイル名「top.sv 」を指定します。
  4. 表示されたダイアログの「Finsh 」を押します。
  5. 表示されたソースコードの初期状態のポート宣言するダイアログでは、「OK 」を押します。
  6. 新規のソースコードテンプレートが表示されるので、次のソースコード「top.sv」を書き込みます。
    • 27-28行目で、引き出した信号「pl-clk0_0」を「clk」として定義します。

    top.sv

    `timescale 1ns / 1ps
    //////////////////////////////////////////////////////////////////////////////////
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2025/02/22 17:34:24
    // Design Name: 
    // Module Name: top
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //////////////////////////////////////////////////////////////////////////////////
    
    
    module top(
            output  var logic   [0:0]   led     // LED用に出力を 1bit 定義
        );
            // ブロックデザインからクロックを引き出す
        logic   clk;
        LEDTestPro i_design1(.pl_clk0_0(clk));
    
        // クロックで動作する26bitのカウンタを作成
        logic   [25:0]  counter = 0;
        always_ff @(posedge clk) begin
            counter <= counter + 1;
        end
    
        // カウンタの25bit目をLEDに出力
        assign led = counter[25];
    endmodule