FC2カウンター FPGAの部屋 調歩同期式シリアル通信の受信 IP (uart_rx)を Vitis HLS で作成する3
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

調歩同期式シリアル通信の受信 IP (uart_rx)を Vitis HLS で作成する3

調歩同期式シリアル通信の受信 IP (uart_rx)を Vitis HLS で作成する2”の続き。

調歩同期方式シリアル通信の受信 IP を Vitis HLS で作成することにしたということで、前回は、uart_rx プロジェクトで C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行って、uart_rx IP を作成した。今回は、Vivado 2020.2 の uart_rx プロジェクトを作成し、合成された uart_rx の Verilog HDL ファイルをコピーし、SystemVerilog のテストベンチファイルを作成して、Vivado 上でシミュレーションしてみよう。

まずは、”SystemVerilogで遊ぼう! - 03. テストベンチトップ”と”SystemVerilog 入門”を参照して SystemVerilog のテストベンチを書いてみよう。とても SystemVerilog テストベンチ書くの初めてなので、Verilog HDL っぽくなるのは許して欲しい。
uart_rx_tb.sv を貼っておく。

`timescale 100ps / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: marsee
// 
// Create Date: 02/16/2021
// Design Name: 
// Module Name: uart_rx_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module uart_rx_tb;
    parameter DELAY = 10; // delay = 1 ns
    
    logic ap_clk;
    logic ap_rst;
    logic ap_start;
    logic ap_done;
    logic ap_idle;
    logic ap_ready;
    logic rxst_V_dout;
    logic rxst_V_empty_n;
    logic rxst_V_read;
    logic [7:0] rx_data;
    logic rx_data_ap_vld;
    logic rx_data_ap_ack;
    logic [31:0] ap_return;
    
    uart_rx uart_rx_i(.*);
    
    task gen_ap_clk;
        forever begin
            #52 ap_clk <= ~ap_clk; // 10.4 ns = 96.15 MHz
        end
    endtask
    
    task start_bit_gen;
        begin
            @(posedge ap_clk);
            #DELAY
            rxst_V_dout <= 1'b0;
            rxst_V_empty_n <= 1'b1;
            repeat(12*16)@(posedge ap_clk);
        end
    endtask
    
    task rx_data_gen(input logic [7:0] rxd);
        begin
            for(int i=0; i<8; i++) begin
                #DELAY
                rxst_V_dout <= rxd[i];
                rxst_V_empty_n <= 1'b1;
                repeat(12*16)@(posedge ap_clk);
             end
         end
     endtask
     
    task stop_bit_gen;
        begin
            #DELAY
            rxst_V_dout <= 1'b1;
            rxst_V_empty_n <= 1'b1;
            repeat(12*16)@(posedge ap_clk);
        end
    endtask
    
    initial begin
        ap_clk <= 1'b0;
        ap_rst <= 1'b1;
        ap_start <= 1'b0;
        rxst_V_dout <= 1'b1;
        rx_data_ap_ack <= 1'b0;
        
        #300 fork
            gen_ap_clk;
        join_none
        
        #300 ap_rst <= 1'b0;
        #300 ap_start <= 1'b1;
        rxst_V_empty_n <= 1'b1;
        rx_data_ap_ack <= 1'b1;
        repeat(12*16)@(posedge ap_clk);
        
        #300 // First charactor
        start_bit_gen;
        rx_data_gen(0'h55);
        stop_bit_gen;
        repeat(12*16)@(posedge ap_clk);
        
        #300 // Second charactor
         start_bit_gen;
        rx_data_gen(0'haa);
        stop_bit_gen;
        repeat(12*16)@(posedge ap_clk);
        $stop;
    end
endmodule



さて、Vivado 2020.2 で uart_rx プロジェクトを作成した。
uart_rx_13_210221.png

前回、Vitis HLS 2020.2 で合成した Verilog HDL ファイル が 2 個ある。
uart_rx_14_210221.png

uart_rx.v と uart_rx_regslice_forward.v を Vivado の uart_rx プロジェクトのディレクトリにコピーした。
uart_rx_15_210221.png

uart_rx.v と uart_rx_regslice_forward.v を Vivado の uart_rx プロジェクトに Add Sources... を行った。
uart_rx_16_210221.png

uart_rx_tb.sv を新規作成し、SystemVerilog コードを書いて、右クリックし右クリックメニューから Set as Top を行った。
uart_rx_17_210221.png

Vivado IDE の左のウインドウの Flow Navigator から SIMULATION -> Run Simulation -> Run Behavioral Simulation を選択して、論理シミュレーションを行う。

Socpe ウインドウから ap_CS_fsm[8:0] を波形ウインドウにドラック&ドロップして追加した。
uart_rx_18_210221.png

Restart ボタンをクリックして、シミュレーションをリスタートする。
Run All ボタンをクリックして、シミュレーションを最後まで実行した。
uart_rx_19_210221.png

波形ウインドウを示す。
uart_rx_20_210221.png

問題無さそうだ。
  1. 2021年02月22日 03:46 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5155-f55180e4
この記事にトラックバックする(FC2ブログユーザー)