FC2カウンター FPGAの部屋 2015年01月08日
FC2ブログ

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

FPGAの部屋

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

CQエレクトロニクス・セミナの実習・ARMコア内蔵FPGAのハードウェア開発入門~Xilinx社Zynq編

CQエレクトロニクス・セミナの”実習・ARMコア内蔵FPGAのハードウェア開発入門~Xilinx社Zynq編”が開催されます。

小林さんとは近頃、職場でお会いするということもあり、ZynqやAXIバスの勉強会を一緒にやらせて頂いたこともあります。
私がVHDLで書いたAXI4 Slave BFMを小林さんがVerilog HDLに変換してくれて、おまけに公開する許可を与えてくれました。
小林さんが講義されるZynqやAXIバスは期待できると思います。AXIバスのカスタムIPの作り方もきっちり教えてくれることでしょう。
特にAXIバスやAXIバスのカスタムIPについて知りたい方は、小林さんのこのセミナを受講することをお勧めします。

CQエレクトロニクス・セミナでは、以前、ご指導頂いた早乙女さんも”実習・直伝!最新FPGAを使ったビデオ・システムの開発(画像フィルタ設計編)”というセミナを持たれているようです。Vivado HLSのエキスパートですし、こっちのセミナも受けて損はないと思います。

以上、本当に思っていることではありますが、ステマと思われても仕方がないブログでした。。。(ステマじゃないです。。。)
  1. 2015年01月08日 05:12 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

Vivado HLS 2014.4 の高位合成テスト2(foo1のHDLコード)

Vivado HLS 2014.4 の高位合成テスト1(Vivado HLSで高位合成)”の続き。

前回は、”Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2014.1) 2014 年 4 月 2 日”の6ページのコード例を foo1 としてVivado HLS で高位合成を行った。
今回は高位合成の結果出力されたHDLを見てみよう。

まずは、”Vivado Design Suite ユーザー ガイド 高位合成 UG902 (v2014.1) 2014 年 4 月 2 日”の6ページのコード例をもう一度引用する。

int foo(char x, char a, char b, char c) {
    char y;
    y = x*a+b+c;
    return y;
}


これをVivado HLS 2014.4 で高位合成した結果のVerilog HDL ファイル foo.v を下に示す。

// ==============================================================
// RTL generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
// Version: 2014.4
// Copyright (C) 2014 Xilinx Inc. All rights reserved.
// 
// ===========================================================

`timescale 1 ns / 1 ps 

(* CORE_GENERATION_INFO="foo,hls_ip_2014_4,{HLS_INPUT_TYPE=c,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xc7z010clg400-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=6.380000,HLS_SYN_LAT=0,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=1,HLS_SYN_FF=0,HLS_SYN_LUT=8}" *)

module foo (
        ap_start,
        ap_done,
        ap_idle,
        ap_ready,
        x,
        a,
        b,
        c,
        ap_return
);

parameter    ap_const_logic_1 = 1'b1;
parameter    ap_true = 1'b1;
parameter    ap_const_logic_0 = 1'b0;

input   ap_start;
output   ap_done;
output   ap_idle;
output   ap_ready;
input  [7:0] x;
input  [7:0] a;
input  [7:0] b;
input  [7:0] c;
output  [31:0] ap_return;

wire  signed [7:0] tmp_fu_43_p0;
wire  signed [7:0] tmp_fu_43_p1;
(* use_dsp48 = "no" *) wire   [7:0] tmp1_fu_49_p2;
wire  signed [7:0] tmp_fu_43_p2;
wire  signed [7:0] y_fu_55_p2;



assign ap_done = ap_start;
assign ap_idle = ap_const_logic_1;
assign ap_ready = ap_start;
assign ap_return = $signed(y_fu_55_p2);
assign tmp1_fu_49_p2 = (b + c);
assign tmp_fu_43_p0 = a;
assign tmp_fu_43_p1 = x;
assign tmp_fu_43_p2 = ($signed(tmp_fu_43_p0) * $signed(tmp_fu_43_p1));
assign y_fu_55_p2 = ($signed(tmp1_fu_49_p2) + $signed(tmp_fu_43_p2));


endmodule //foo


上のVerilog HDL コードを見てもわかるとおりに、ap_done と ap_ready には、ap_start が入っているし、ap_return にも組み合わせ回路で演算結果を返しているだけだ。レイテンシは 0 で、インターバルは 1 の回路になっている。

VHDL コードの foo.vhd も下に示す。

-- ==============================================================
-- RTL generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
-- Version: 2014.4
-- Copyright (C) 2014 Xilinx Inc. All rights reserved.
-- 
-- ===========================================================

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

entity foo is
port (
    ap_start : IN STD_LOGIC;
    ap_done : OUT STD_LOGIC;
    ap_idle : OUT STD_LOGIC;
    ap_ready : OUT STD_LOGIC;
    x : IN STD_LOGIC_VECTOR (7 downto 0);
    a : IN STD_LOGIC_VECTOR (7 downto 0);
    b : IN STD_LOGIC_VECTOR (7 downto 0);
    c : IN STD_LOGIC_VECTOR (7 downto 0);
    ap_return : OUT STD_LOGIC_VECTOR (31 downto 0) );
end;


architecture behav of foo is 
    attribute CORE_GENERATION_INFO : STRING;
    attribute CORE_GENERATION_INFO of behav : architecture is
    "foo,hls_ip_2014_4,{HLS_INPUT_TYPE=c,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xc7z010clg400-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=6.380000,HLS_SYN_LAT=0,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=1,HLS_SYN_FF=0,HLS_SYN_LUT=8}";
    constant ap_const_logic_1 : STD_LOGIC := '1';
    constant ap_true : BOOLEAN := true;
    constant ap_const_logic_0 : STD_LOGIC := '0';

    signal tmp_fu_43_p0 : STD_LOGIC_VECTOR (7 downto 0);
    signal tmp_fu_43_p1 : STD_LOGIC_VECTOR (7 downto 0);
    signal tmp1_fu_49_p2 : STD_LOGIC_VECTOR (7 downto 0);
    attribute use_dsp48 : string;
    attribute use_dsp48 of tmp1_fu_49_p2 : signal is "no";
    signal tmp_fu_43_p2 : STD_LOGIC_VECTOR (7 downto 0);
    signal y_fu_55_p2 : STD_LOGIC_VECTOR (7 downto 0);


begin



    ap_done <= ap_start;
    ap_idle <= ap_const_logic_1;
    ap_ready <= ap_start;
        ap_return <= std_logic_vector(resize(signed(y_fu_55_p2),32));

    tmp1_fu_49_p2 <= std_logic_vector(unsigned(b) + unsigned(c));
    tmp_fu_43_p0 <= a;
    tmp_fu_43_p1 <= x;
    tmp_fu_43_p2 <= std_logic_vector(resize(unsigned(std_logic_vector(signed(tmp_fu_43_p0) * signed(tmp_fu_43_p1))), 8));
    y_fu_55_p2 <= std_logic_vector(unsigned(tmp1_fu_49_p2) + unsigned(tmp_fu_43_p2));
end behav;


VHDLもVerilog HDL コードと同じだ。
  1. 2015年01月08日 05:08 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

ひでみさんのZynq本2冊とMicroSDカードが届いた

昨日、ひでみさんに注文しておいたZynq本2冊とMicroSDカードが届いた。
hidemi_zynq_sd_150108.jpg

本は、ZYNQ Design Vivado Editon と ZYNQ Design Yocto Editon で、ページ数は両方共 88 ページだった。思ったよりも薄かったが、チラ見したところ内容は充実していると思う。
MicroSDカードには /home/root に Vivado IPI の IP や Yocto のビルド環境などが入っていた。Micro SDカードを ZYBO に入れると Yocto をブートできるのだが、Micro SDカードのClass が 4 だったので、バックアップを兼ねて、8GB Class 10 の Micro SDにコピーしてから ZYBO に入れてブートした。
下にブート時のメッセージの一部を示す。Yocto がブートした。
hidemi_zynq_sd_2_150108.png

ZYBO の HDMI を接続すると login プロンプトが出ていた。キーボードとマウスを接続すれば使えると思う。
hidemi_zynq_sd_3_150108.jpg

起動メッセージから SSH がインストールされているのが分かったので、シリアルターミナルで ifconfig コマンドを実行して、割り振られているIPアドレスを見て、Tera TermでIPアドレスで SSH ログインしたらログインできた。
hidemi_zynq_sd_4_150108.jpg
  1. 2015年01月08日 04:33 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0