FC2カウンター FPGAの部屋 2024年05月
fc2ブログ

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

FPGAの部屋

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

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させよう5

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させよう4”の続き。

Xyloni Development Kit 用の Sapphire SoC のプロジェクトを作成して、SPI と GPIO を PMOD に接続する予定の Pmod OLEDrgb に接続しようということで、前回は、Interface Designer を起動して、GPIO ピンの入れ替えと GPIO_1 のバスを追加して、ピンを割り当てた。今回は、PLL の設定変更を行った。

PLL の設定を行う。

Block Editor の Manual Configuration タブをクリックした。
Reset Pin Name を systemClk_rstn に変更した。
Locked Pin Name を systemClk_locked に変更した。
Multipller (M) を 24 に設定した。
Pre Divider (N) を 1 に設定した。
Xyloni_OLEDrgb_39_240522.png

下にスクロールした。
PLL Frequency の Psot Divider (O) を 1 に設定した。
Output Divider を 32 に設定した。
Output Frequncy (MHz) が 24.9975 になった。
Xyloni_OLEDrgb_40_240523.png

左のウインドウの Design : T8T81 -> GPIO (30) -> io_asyncReset:GPIOR_02 をクリックした。
Pin Name を io_asyncResetn に変更した。
Xyloni_OLEDrgb_41_240523.png

Design メニューから Check Design を選択して、デザインをチェックした。

Check Design が終了した。
Xyloni_OLEDrgb_42_240523.png

Efinity の File メニューから Edit Project... を選択した。
Project Editor ダイアログが表示された。
Design タブをクリックした。
Top Module/Entity に top_soc と入力した。
Xyloni_OLEDrgb_43_240523.png
  1. 2024年05月23日 04:41 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させよう4

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させよう3”の続き。

Xyloni Development Kit 用の Sapphire SoC のプロジェクトを作成して、SPI と GPIO を PMOD に接続する予定の Pmod OLEDrgb に接続しようということで、前回は、top_soc.v の SPI_1、SPI_2、GPIO_1ポートの追加を行った。もう一度、論理合成、Place & Route、ビットファイルの生成を行った。GitHub の Efinix-Inc/xyloni の soc_opalSoc.peri.xml を Xyloni_OLEDrgb プロジェクトの Xyloni_OLEDrgb.peri.xml 名前を変えてコピーした。今回は、Interface Designer を起動して、GPIO ピンの入れ替えと GPIO_1 のバスを追加して、ピンを割り当てた。

Efinity の Tools メニューから Open Interface Designer を選択して Interface Designer を起動した。
Xyloni_OLEDrgb_29_240522.png

Efinity Interface Designer が起動した。
Design メニューから Show/Hide GPIO Resouce Assigner を選択し、GPIO Resource Assiger を表示する。

GPIO : Instance View タブが表示された。
system_gpio_0_io[0] の Package Pin をダウブルクリックし、出てきた下向き三角をクリックすると、設定値がプルダウンメニューで表示された。プルダウンメニューから C9 を選択する。
Xyloni_OLEDrgb_30_240522.png

このピンはすでに gpio_0_io[15] に接続済みなので、Assigning GPIO Instance ダイアログが表示された。
OK ボタンをクリックした。

system_gpio_0_io(0) の >Package Pin は C9 に割り当てられた。

次に、system_gpio_0_io[15] だが、Package Pin は system_gpio_0_io[0] に割り当てられてしまったので、ブランクになっている。
前の system_gpio_0_io[0] と同様ステップを踏んで、Package Pin を B3 に割り当てた。
Xyloni_OLEDrgb_31_240522.png

話が前後するが、system_gpio_1 を IO ピンにマップする。

Design Explorer の Design : T8F81 -> GPIO を右クリックし、右クリックメニューから Create Bus を選択した。
Xyloni_OLEDrgb_32_240522.png

Add New Bus ダイアログが開いた。
Name に system_gpio_1_io と入力した。
MSB を 3 、Mode を inout に設定した。
Next > ボタンをクリックした。
Xyloni_OLEDrgb_33_240522.png

input 画面
Pin Name に system_gpio_1_io_read と入力した。
Next > ボタンをクリックした。
Xyloni_OLEDrgb_34_240522.png

Output 画面
Pin Name に system_gpio_1_io_write と入力した。
Next > ボタンをクリックした。
Xyloni_OLEDrgb_35_240522.png

Output Enable 画面
Pin Name Perfix に system_gpio_1_io_writeEnable と入力した。
Next > ボタンをクリックした。
Xyloni_OLEDrgb_36_240522.png

Summary が表示された。
Finish ボタンをクリックした。
Xyloni_OLEDrgb_37_240522.png

system_gpio_1_io が追加された。
Xyloni_OLEDrgb_38_240522.png

Efinity Interface Designer の Design メニューから Show/Hide GPIO Resouce Assigner を選択し、GPIO Resource Assiger を表示した。

”Xyloni Development Kit User Guide XYLONI-DK-UG-v1.4 November 2022”の 11 ページの ”Headers J3 (PMOD)”の”Table 5: J3 Pin Assignments”に従ってピンアサインを行った。
今回、ピンアサインしたのは、D/C, RES, VCCEN, PMDEN の GPIO ピンだ。
Xyloni_OLEDrgb_39_240522.png

  1. 2024年05月22日 21:48 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させよう3

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させよう2”の続き。

Xyloni Development Kit 用の Sapphire SoC のプロジェクトを作成して、SPI と GPIO を PMOD に接続する予定の Pmod OLEDrgb に接続しようということで、前回は、Verilog HDL ファイルや制約ファイルをインポートして、論理合成、Place & Route、ビットファイルの生成を行った。今回は、top_soc.v の SPI_1、SPI_2、GPIO_1ポートの追加を行った。もう一度、論理合成、Place & Route、ビットファイルの生成を行った。GitHub の Efinix-Inc/xyloni の soc_opalSoc.peri.xml を Xyloni_OLEDrgb プロジェクトの Xyloni_OLEDrgb.peri.xml 名前を変えてコピーした。

xyloni_sapphire プロジェクトの top_soc.v を開いた。
ポート宣言のところの system_spi_0_... の記述をコピーし、ペーストして、system_spi_1_... に記述をすべて変更した。
system_spi_0_... の記述をコピーし、ペーストして、system_spi_2_... に記述をすべて変更した。
system_gpio_0_... の記述をコピーし、ペーストして、system_gpio_1_... に記述をすべて変更した。ビット幅を [3:0] に変更した。
Sapphire SoC の生成のところで、SPI_1 を追加したため、Example Design よりもポートが増えているからだ。
Xyloni_OLEDrgb_23_240521.png

同じく、top_soc.v の memoryCheckerPass の行を削除する。
Xyloni_OLEDrgb_24_240521.png

memoryCheckerPass の行を削除した。

次に top_soc.v の SapphireSoC IP のインスタンス部分で、SPI_0 の記述をコピー & ペーストして、SPI_1 の記述に変更した。
SPI_0 の記述をコピー & ペーストして、SPI_2 の記述に変更した。
GPIO_0 の記述をコピー & ペーストして、GPIO_1 の記述に変更した。
Xyloni_OLEDrgb_25_240521.png

セーブ・ボタンをクリックして、セーブを行った。
Efinity を終了した。

Synthesize ボタンをクリックして論理合成、Place & Route、ビットファイルの生成を行った。
Xyloni_OLEDrgb_28_240521.png

”XyloniボードへのSapphire SoC実装とファームウエア開発プロジェクトの構築”の”Sapphire SoC の 実装”をやってみる3”で xyloni-master.zip がダウンロードされ、解凍されて xyloni-master フォルダの名前を xyloni に変更されている。

xyloni\design\soc_Opal_t8\soc_Opal_hw_t8\Xyloni_kit\soc_opalSoc.peri.xml を Xyloni_OLEDrgb プロジェクトにコピーした。
Xyloni_OLEDrgb_26_240521.png

soc_opalSoc.peri.xml の名前を Xyloni_OLEDrgb.peri.xml に変更した。
Xyloni_OLEDrgb_27_240521.png
  1. 2024年05月21日 05:34 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0

フリーの高位合成ツール Bambu 2024.03 を使ってみよう1

Bambu 2024.03 をビルドしようとしたが失敗した”で Bambu 2024.03 のビルドに失敗したが、https://release.bambuhls.eu/ を見ると、ビルドされた Bambu 2024.03 があったので、これをダウンロードして、Bambu 2024.03 を試してみることにした。

https://release.bambuhls.eu/ から bambu-2024.03.AppImage をダウンロードした。
bambu202403_6_240519.png

フリーの高位合成ツール Bambu を使ってみよう3”を参照して、Ubuntu 22.04 のパソコンにインストールしていこう。

PandA-bambu-2023.1/bin ディレクトリに bambu-2024.03.AppImage を入れた。
bambu202403_7_240519.png

bambu を削除した。
bambu を作り直す。
ファイル・マネージャーで bambu-2024.03.AppImage に実行権限を与えた。
具体的には、bambu-2024.03.AppImage を右クリックし、右クリックメニューからプロパティを選択した。
アクセス権タブをクリックし、”実行”の”プログラムとして実行”のチェックボックスをチェックした。

bambu-2024.03.AppImage のシンボリック・リンクを作成した。
ln -s bambu-2024.03.AppImage bambu

もうすでに、”フリーの高位合成ツール Bambu を使ってみよう3”でパスも設定されているので、これでどこのディレクトリからでも bambu で Bambu 2024.03 が起動する。

bambu
bambu202403_8_240519.png

起動メッセージを示す。

(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/PandA-bambu-2023.1/bin$ bambu

********************************************************************************
                    ____                  _
                   | __ )  __ _ _ __ ___ | |_   _   _
                   |  _ \ / _` | '_ ` _ \| '_ \| | | |
                   | |_) | (_| | | | | | | |_) | |_| |
                   |____/ \__,_|_| |_| |_|_.__/ \__,_|

********************************************************************************
                         High-Level Synthesis Tool

                         Politecnico di Milano - DEIB
                          System Architectures Group
********************************************************************************
                Copyright (C) 2004-2024 Politecnico di Milano
 Version: PandA 2024.03 - Revision aca8437607356c02a9501c89da414dfe8f4e5fc8-main

Usage:
       bambu [Options] <source_file> [<constraints_file>] [<technology_file>]

Options:

  General options:

    --help, -h
        Display this usage information.

    --version, -V
        Display the version of the program.

    --seed=<number>
        Set the seed of the random number generator (default=0).


  Output options:

    --verbosity, -v <level>
        Set the output verbosity level
        Possible values for <level>:
            0 - NONE
            1 - MINIMUM
            2 - VERBOSE
            3 - PEDANTIC
            4 - VERY PEDANTIC
        (default = 1)

    --no-clean
        Do not remove temporary files.

    --benchmark-name=<name>
        Set the name of the current benchmark for data collection.
        Mainly useful for data collection from extensive regression tests.

    --configuration-name=<name>
        Set the name of the current tool configuration for data collection.
        Mainly useful for data collection from extensive regression tests.

    --benchmark-fake-parameters
        Set the parameters string for data collection. The parameters in the
        string are not actually used, but they are used for data collection in
        extensive regression tests.

    --output-temporary-directory=<path>
        Set the directory where temporary files are saved.
        Default is 'panda-temp'

    --print-dot
        Dump to file several different graphs used in the IR of the tool.
        The graphs are saved in .dot files, in graphviz format

    --pretty-print=<file>.c
        C-based pretty print of the internal IRx

    --writer,-w<language>
        Output RTL language:
            V - Verilog (default)
            H - VHDL

    --no-mixed-design
        Avoid mixed output RTL language designs.

    --generate-tb=<file>
        Generate testbench using the given files.
        <file> must be a valid testbench XML file or a C/C++ file specifying
        a main function calling the top-level interface. (May be repeated)

    --generate-tb=elf:<exe>
        Generate testbench environment using <exe> as system simulation.
        <exe> must be an executable that dynamically loads the synthesized
        top-function symbol.

    --tb-extra-gcc-options=<string>
        Specify custom extra options to the compiler for testbench compilation only.

    --tb-arg=<arg>
        Passes <arg> to the testbench main function as an argument.
        The option may be repeated to pass multiple arguments in order.

    --tb-param-size=<param_name>:<byte_size>
        A comma-separated list of pairs representing a pointer parameter name and
        the size for the related memory space. Specifying this option will disable
        automated top-level function verification.

    --tb-memory-mapping=<arg>
        Testbench memory mapping mode:
            DEVICE - Emulate host/device memory mapping (default)
            SHARED - Emulate shared memory space between host and device
                     (BEAWARE: no memory integrity checks in shared mode)

    --top-fname=<fun_name>
        Define the top function to be synthesized. (default=main)

    --top-rtldesign-name=<top_name>
        Define the top module name for the RTL backend.

    --inline-fname=<fun_name>[,<fun_name>]*
        Define functions to be always inlined.
        Automatic inlining is always performed using internal metrics.
        Maximum cost to allow function inlining is defined through
        --panda-parameter=inline-max-cost=<value>. (default=60)

    --file-input-data=<file_list>
        A comma-separated list of input files used by the C specification.

    --C-no-parse=<file>
        Specify a comma-separated list of C files used only during the
        co-simulation phase.


  GCC/CLANG front-end compiler options:

    --compiler=<compiler_version>
        Specify which compiler is used.
        Possible values for <compiler_version> are:
            I386_GCC7
            I386_CLANG12

    -O<level>
        Enable a specific optimization level. Possible values are the usual
        optimization flags accepted by compilers, plus some others:
        -O0,-O1,-O2,-O3,-Os,-O4,-O5.

    -f<option>
        Enable or disable a GCC/CLANG optimization option. All the -f or -fno options
        are supported. In particular, -ftree-vectorize option triggers the
        high-level synthesis of vectorized operations.

    -I<path>
        Specify a path where headers are searched for.

    -W<warning>
        Specify a warning option passed to GCC/CLANG. All the -W options available in
        GCC/CLANG are supported.

    -E
        Enable preprocessing mode of GCC/CLANG.

    --std=<standard>
        Assume that the input sources are for <standard>. All
        the --std options available in GCC/CLANG are supported.
        The default value is gnu90/gnu11 for C and gnu++98/gnu++14 for C++ 
        depending on the selected frontend compiler support.

    -D<name>
        Predefine name as a macro, with definition 1.

    -D<name=definition>
        Tokenize <definition> and process as if it appeared as a #define directive.

    -U<name>
        Remove existing definition for macro <name>.

    --param <name>=<value>
        Set the amount <value> for the GCC/CLANG parameter <name> that could be used for
        some optimizations.

    -l<library>
        Search the library named <library> when linking.

    -L<dir>
        Add directory <dir> to the list of directories to be searched for -l.

    --use-raw
        Specify that input file is already a raw file and not a source file.

    -m<machine-option>
        Specify machine dependend options (currently not used).

    --Include-sysdir
        Return the system include directory used by the wrapped GCC/CLANG compiler.

    --gcc-config
        Return the GCC/CLANG configuration.

    --extra-gcc-options
        Specify custom extra options to the compiler.


  Target:

    --target-file=file, -b<file>
        Specify an XML description of the target device.

    --generate-interface=<type>
        Wrap the top level module with an external interface.
        Possible values for <type> and related interfaces:
            MINIMAL  -  minimal interface (default)
            INFER    -  top function is built with an hardware interface inferred from
                        the pragmas or from the top function signature
            WB4      -  WishBone 4 interface

    --architecture-xml=<filename>
        User-defined module architecture file.

    --memory-mapped-top
        Generate a memory mapped interface for the top level function.
        The start signal and each one of function parameter are mapped to a memory address


  Scheduling:

    --parametric-list-based[=<type>]
        Perform priority list-based scheduling. This is the default scheduling algorithm
        in bambu. The optional <type> argument can be used to set options for
        list-based scheduling as follows:
            0 - Dynamic mobility (default)
            1 - Static mobility
            2 - Priority-fixed mobility

    --speculative-sdc-scheduling,-s
        Perform scheduling by using speculative SDC.
        The speculative SDC is more conservative, in case 
        --panda-parameter=enable-conservative-sdc=1 is passed.

    --pipelining,-p
        Perform functional pipelining starting from the top function.

    --pipelining,-p=<func_name>[=<init_interval>][,<func_name>[=<init_interval>]]*
        Perform pipelining of comma separated list of specified functions with optional 
        initiation interval (default II=1).
        To pipeline softfloat operators it is possible to specify the __float_<op_name> prefix 
        or simply __float to pipeline all softfloat library.

    --fixed-scheduling=<file>
        Provide scheduling as an XML file.

    --no-chaining
        Disable chaining optimization.


  Binding:

    --register-allocation=<type>
        Set the algorithm used for register allocation. Possible values for the
        <type> argument are the following:
            WEIGHTED_TS         - use weighted clique covering algorithm by
                                  exploiting the Tseng&Siewiorek heuristics
                                  (default)
            COLORING            - use simple coloring algorithm
            WEIGHTED_COLORING   - use weighted coloring algorithm
            CHORDAL_COLORING    - use chordal coloring algorithm
            BIPARTITE_MATCHING  - use bipartite matching algorithm
            TTT_CLIQUE_COVERING - use a weighted clique covering algorithm
            UNIQUE_BINDING      - unique binding algorithm

    --module-binding=<type>
        Set the algorithm used for module binding. Possible values for the
        <type> argument are one the following:
            WEIGHTED_TS        - solve the weighted clique covering problem by
                                 exploiting the Tseng&Siewiorek heuristics
                                 (default)
            WEIGHTED_COLORING  - solve the weighted clique covering problem
                                 performing a coloring on the conflict graph
            COLORING           - solve the unweighted clique covering problem
                                 performing a coloring on the conflict graph
            TTT_FAST           - use Tomita, A. Tanaka, H. Takahashi maxima
                                 weighted cliques heuristic to solve the clique
                                 covering problem
            TTT_FAST2          - use Tomita, A. Tanaka, H. Takahashi maximal
                                 weighted cliques heuristic to incrementally
                                 solve the clique covering problem
            TTT_FULL           - use Tomita, A. Tanaka, H. Takahashi maximal
                                 weighted cliques algorithm to solve the clique
                                 covering problem
            TTT_FULL2          - use Tomita, A. Tanaka, H. Takahashi maximal
                                 weighted cliques algorithm to incrementally
                                 solve the clique covering problem
            TS                 - solve the unweighted clique covering problem
                                 by exploiting the Tseng&Siewiorek heuristic
            BIPARTITE_MATCHING - solve the weighted clique covering problem
                                 exploiting the bipartite matching approach
            UNIQUE             - use a 1-to-1 binding algorithm


    --shared-input-registers
        The module bindings and the register binding try to share more resources by 
        sharing the input registers


  Memory allocation:

    --xml-memory-allocation=<xml_file_name>
        Specify the file where the XML configuration has been defined.

    --memory-allocation-policy=<type>
        Set the policy for memory allocation. Possible values for the <type>
        argument are the following:
            ALL_BRAM           - all objects that need to be stored in memory
                                 are allocated on BRAMs (default)
            LSS                - all local variables, static variables and
                                 strings are allocated on BRAMs
            GSS                - all global variables, static variables and
                                 strings are allocated on BRAMs
            NO_BRAM            - all objects that need to be stored in memory
                                 are allocated on an external memory
            EXT_PIPELINED_BRAM - all objects that need to be stored in memory
                                 are allocated on an external pipelined memory

   --base-address=address
        Define the starting address for objects allocated externally to the top
        module.

   --initial-internal-address=address
        Define the starting address for the objects allocated internally to the
        top module.

   --channels-type=<type>
        Set the type of memory connections.
        Possible values for <type> are:
            MEM_ACC_11 - the accesses to the memory have a single direct
                         connection or a single indirect connection
            MEM_ACC_N1 - the accesses to the memory have n parallel direct
                         connections or a single indirect connection
            MEM_ACC_NN - the accesses to the memory have n parallel direct
                         connections or n parallel indirect connections (default)

   --channels-number=<n>
        Define the number of parallel direct or indirect accesses.

   --memory-ctrl-type=type
        Define which type of memory controller is used. Possible values for the
        <type> argument are the following:
            D00 - no extra delay (default)
            D10 - 1 clock cycle extra-delay for LOAD, 0 for STORE
            D11 - 1 clock cycle extra-delay for LOAD, 1 for STORE
            D21 - 2 clock cycle extra-delay for LOAD, 1 for STORE

    --memory-banks-number=<n>
        Define the number of memory banks.

    --sparse-memory[=on/off]
        Control how the memory allocation happens.
            on - allocate the data in addresses which reduce the decoding logic (default)
           off - allocate the data in a contiguous addresses.

    --do-not-use-asynchronous-memories
        Do not add asynchronous memories to the possible set of memories used
        by bambu during the memory allocation step.

    --distram-threshold=value
        Define the threshold in bitsize used to infer DISTRIBUTED/ASYNCHRONOUS RAMs (default 256).

    --serialize-memory-accesses
        Serialize the memory accesses using the GCC virtual use-def chains
        without taking into account any alias analysis information.

    --unaligned-access
        Use only memories supporting unaligned accesses.

    --aligned-access
        Assume that all accesses are aligned and so only memories supporting aligned

        accesses are used.

    --do-not-chain-memories
        When enabled LOADs and STOREs will not be chained with other
        operations.

    --rom-duplication
        Assume that read-only memories can be duplicated in case timing requires.

    --bram-high-latency=[3,4]
        Assume a 'high latency bram'-'faster clock frequency' block RAM memory
        based architectures:
        3 => LOAD(II=1,L=3) STORE(1).
        4 => LOAD(II=1,L=4) STORE(II=1,L=2).

    --mem-delay-read=value
        Define the external memory latency when LOAD are performed (default 2).

    --mem-delay-write=value
        Define the external memory latency when STORE are performed (default 1).

    --tb-queue-size=value
        Define the maximum number of requests accepted by the testbench (default 4).

    --expose-globals
        All global variables can be accessed from outside the accelerator.

    --data-bus-bitsize=<bitsize>
        Set the bitsize of the external data bus.

    --addr-bus-bitsize=<bitsize>
        Set the bitsize of the external address bus.


  Evaluation of HLS results:

    --simulate
        Simulate the RTL implementation.

    --simulator=<type>
        Specify the simulator used in generated simulation scripts:
            MODELSIM - Mentor Modelsim
            XSIM - Xilinx XSim
            VERILATOR - Verilator simulator

    --verilator-parallel[=num_threads]
        Enable multi-threaded simulation when using verilator

    --max-sim-cycles=<cycles>
        Specify the maximum number of cycles a HDL simulation may run.
        (default 200000000).

    --accept-nonzero-return
        Do not assume that application main must return 0.

    --generate-vcd
        Enable .vcd output file generation for waveform visualization (requires
        testbench generation).

    --evaluation[=type]
        Perform evaluation of the results.
        The value of 'type' selects the objectives to be evaluated
        If nothing is specified all the following are evaluated
        The 'type' argument can be a string containing any of the following
        strings, separated with commas, without spaces:
            AREA            - Area usage
            AREAxTIME       - Area x Latency product
            TIME            - Latency for the average computation
            TOTAL_TIME      - Latency for the whole computation
            CYCLES          - n. of cycles for the average computation
            TOTAL_CYCLES    - n. of cycles for the whole computation
            BRAMS           - number of BRAMs
            DRAMS           - number of DRAMs
            CLOCK_SLACK     - Slack between actual and required clock period
            DSPS            - number of DSPs
            FREQUENCY       - Maximum target frequency
            PERIOD          - Actual clock period
            REGISTERS       - number of registers


  RTL synthesis:

    --clock-name=id
        Specify the clock signal name of the top interface (default = clock).

    --reset-name=id
        Specify the reset signal name of the top interface (default = reset).

    --start-name=id
        Specify the start signal name of the top interface (default = start_port).

    --done-name=id
        Specify the done signal name of the top interface (default = done_port).

    --clock-period=value
        Specify the period of the clock signal (default = 10ns).

    --backend-script-extensions=file
        Specify a file that will be included in the backend specific synthesis
        scripts.

    --backend-sdc-extensions=file
        Specify a file that will be included in the Synopsys Design Constraints
        file (SDC).

   --parallel-backend
        when possible enable a parallel synthesis backend
    --VHDL-library=libraryname
        Specify the library in which the VHDL generated files are compiled.

    --device-name=value
        Specify the name of the device. Three different cases are foreseen:
            - Xilinx:  a comma separated string specifying device, speed grade
                       and package (e.g.,: "xc7z020,-1,clg484,VVD")
            - Altera:  a string defining the device string (e.g. EP2C70F896C6)
            - Lattice: a string defining the device string (e.g.
                       LFE5U85F8BG756C)
            - NanoXplore: a string defining the device string (e.g. nx2h540tsc))

    --power-optimization
        Enable Xilinx power based optimization (default no).

    --connect-iob
        Connect primary input and output ports to IOBs.

    --soft-float (default)
        Enable the soft-based implementation of floating-point operations.
        Bambu uses as default a faithfully rounded version of softfloat with rounding mode
        equal to round to nearest even. Subnormal numbers are disabled by default.
        Default FP formats are e8m23b-127nih and e11m52b-1023nih for single and double 
        precision floating-point types respectively.

    --flopoco
        Enable the flopoco-based implementation of floating-point operations.

    --libm-std-rounding
        Enable the use of classical libm. This library combines a customized version of 
        glibc, newlib and musl libm implementations into a single libm library synthetizable
        with bambu.
        Without this option, Bambu uses as default a faithfully rounded version of libm.

    --soft-fp
        Enable the use of soft_fp GCC library instead of bambu customized version of softfloat library.

    --max-ulp
        Define the maximal ULP (Unit in the last place, i.e., is the spacing
        between floating-point numbers) accepted.

    --fp-subnormal
        Enable the soft-based implementation of floating-point operations with
        subnormals support.

    --fp-exception-mode=<ieee|saturation|overflow>
        Set the soft-based exception handling mode:
              ieee    - IEEE754 standard exceptions (default)
           saturation - Inf is replaced with max value, Nan becomes undefined behaviour
            overflow  - Inf and Nan results in undefined behaviour

    --fp-rounding-mode=<nearest_even|truncate>
        Set the soft-based rounding handling mode:
           nearest_even - IEEE754 standard rounding mode (default)
              truncate  - No rounding is applied

    --fp-format=<func_name>*e<exp_bits>m<frac_bits>b<exp_bias><rnd_mode><exc_mode><?spec><?sign>
        Define arbitrary precision floating-point format by function (use comma separated
        list for multiple definitions). (i.e.: e8m27b-127nihs represent IEEE754 single precision FP)
           func_name - Set arbitrary floating-point format for a specific function (using
                       @ symbol here will resolve to the top function)
                       (Arbitrary floating-point format will apply to specified function
                       only, use --propagate-fp-format to extend it to called functions)
            exp_bits - Number of bits used by the exponent
           frac_bits - Number of bits used by the fractional value
            exp_bias - Bias applied to the unsigned value represented by the exponent bits
            rnd_mode - Rounding mode (exclusive option):
                          n - nearest_even: IEEE754 standard rounding mode
                          t - truncate    : no rounding is applied
            exc_mode - Exception mode (exclusive option):
                          i - ieee      : IEEE754 standard exceptions
                          a - saturation: Inf is replaced with max value, Nan becomes undefined behaviour
                          o - overflow  : Inf and Nan results in undefined behaviour
              spec   - Floating-point specialization string (multiple choice):
                          h - hidden one: IEEE754 standard representation with hidden one
                          s - subnormals: IEEE754 subnormal numbers
              sign   - Static sign representation (exclusive option):
                            - IEEE754 dynamic sign is used if omitted
                          1 - all values are considered as negative numbers
                          0 - all values are considered as positive numbers

    --fp-format=inline-math
        The "inline-math" flag may be added to fp-format option to force floating-point
        arithmetic operators always inline policy

    --fp-format=inline-conversion
        The "inline-conversion" flag may be added to fp-format option to force floating-point
        conversion operators always inline policy

    --fp-format-interface
        User-defined floating-point format is applied to top interface signature if required
        (default modifies top function body only)

    --fp-format-propagate
        Propagate user-defined floating-point format to called function when possible

    --hls-div=<method>
        Perform the high-level synthesis of integer division and modulo
        operations starting from a C library based implementation or a HDL component:
             none  - use a HDL based pipelined restoring division
             nr1   - use a C-based non-restoring division with unrolling factor equal to 1 (default)
             nr2   - use a C-based non-restoring division with unrolling factor equal to 2
             NR    - use a C-based Newton-Raphson division
             as    - use a C-based align divisor shift dividend method

    --hls-fpdiv=<method>
        Perform the high-level synthesis of floating point division 
        operations starting from a C library based implementation:
             SRT4 - use a C-based Sweeney, Robertson, Tocher floating point division with radix 4 (default)
             G    - use a C-based Goldschmidt floating point division.
             SF   - use a C-based floating point division as describe in soft-fp library
                    (it requires --soft-fp).
    --skip-pipe-parameter=<value>
        Used during the allocation of pipelined units. <value> specifies how
        many pipelined units, compliant with the clock period, will be skipped.
        (default=0).

    --reset-type=value
        Specify the type of reset:
             no    - use registers without reset (default)
             async - use registers with asynchronous reset
             sync  - use registers with synchronous reset

    --reset-level=value
        Specify if the reset is active high or low:
             low   - use registers with active low reset (default)
             high  - use registers with active high reset

    --disable-reg-init-value
        Used to remove the INIT value from registers (useful for ASIC designs)

    --registered-inputs=value
        Specify if inputs are registered or not:
             auto  - inputs are registered only for proxy functions (default)
             top   - inputs and return are registered only for top and proxy functions
             yes   - all inputs are registered
             no    - none of the inputs is registered

    --fsm-encoding=value
             auto    - it depends on the target technology. VVD prefers one encoding
                       while the other are fine with the standard binary encoding. (default)
             one-hot - one hot encoding
             binary  - binary encoding

    --cprf=value
        Clock Period Resource Fraction (default = 1.0).

    --DSP-allocation-coefficient=value
        During the allocation step the timing of the DSP-based modules is
        multiplied by value (default = 1.0).

    --DSP-margin-combinational=value
        Timing of combinational DSP-based modules is multiplied by value.
        (default = 1.0).

    --DSP-margin-pipelined=value
        Timing of pipelined DSP-based modules is multiplied by value.
        (default = 1.0).

    --DSP-fracturing=[16,32]
        Restructure multiplication by fracturing the computation.
        16 => All multiplications will be decomposed into multiplications with input size not larger than 16.
        32 => All multiplications will be decomposed into multiplications with input size not larger than 32.

    --mux-margins=n
        Scheduling reserves a margin corresponding to the delay of n 32 bit
        multiplexers.

    --timing-model=value
        Specify the timing model used by HLS:
             EC     - estimate timing overhead of glue logics and connections
                      between resources (default)
             SIMPLE - just consider the resource delay

    --experimental-setup=<setup>
        Specify the experimental setup. This is a shorthand to set multiple
        options with a single command.
        Available values for <setup> are the following:
             BAMBU-AREA           - this setup implies:
                                    -Os  -D'printf(fmt, ...)='
                                    --memory-allocation-policy=ALL_BRAM
                                    --DSP-allocation-coefficient=1.75
                                    --distram-threshold=256
                                    --enable-function-proxy
             BAMBU-AREA-MP        - this setup implies:
                                    -Os  -D'printf(fmt, ...)='
                                    --channels-type=MEM_ACC_NN
                                    --channels-number=2
                                    --memory-allocation-policy=ALL_BRAM
                                    --DSP-allocation-coefficient=1.75
                                    --distram-threshold=256
                                    --enable-function-proxy
             BAMBU-BALANCED       - this setup implies:
                                    -O2  -D'printf(fmt, ...)='
                                    --channels-type=MEM_ACC_11
                                    --memory-allocation-policy=ALL_BRAM
                                    -fgcse-after-reload  -fipa-cp-clone
                                    -ftree-partial-pre  -funswitch-loops
                                    -finline-functions  -fdisable-tree-bswap
                                    --param max-inline-insns-auto=25
                                    -fno-tree-loop-ivcanon
                                    --distram-threshold=256
                                    -C='*'
                                    --disable-function-proxy
             BAMBU-BALANCED-MP    - (default) this setup implies:
                                    -O2  -D'printf(fmt, ...)='
                                    --channels-type=MEM_ACC_NN
                                    --channels-number=2
                                    --memory-allocation-policy=ALL_BRAM
                                    -fgcse-after-reload  -fipa-cp-clone
                                    -ftree-partial-pre  -funswitch-loops
                                    -finline-functions  -fdisable-tree-bswap
                                    --param max-inline-insns-auto=25
                                    -fno-tree-loop-ivcanon
                                    --disable-function-proxy
                                    -C='*'
                                    --distram-threshold=256
             BAMBU-TASTE          - this setup concatenate the input files and
                                    passes these options to the compiler:
                                    -O2  -D'printf(fmt, ...)='
                                    --channels-type=MEM_ACC_NN
                                    --memory-allocation-policy=ALL_BRAM
                                    -fgcse-after-reload  -fipa-cp-clone
                                    -ftree-partial-pre  -funswitch-loops
                                    -finline-functions  -fdisable-tree-bswap
                                    --param max-inline-insns-auto=25
                                    -fno-tree-loop-ivcanon
                                    --disable-function-proxy
                                    -C='*'
                                    --distram-threshold=256
             BAMBU-PERFORMANCE    - this setup implies:
                                    -O3  -D'printf(fmt, ...)='
                                    --memory-allocation-policy=ALL_BRAM
                                    --distram-threshold=512
                                    --disable-function-proxy
             BAMBU-PERFORMANCE-MP - this setup implies:
                                    -O3  -D'printf(fmt, ...)='
                                    --channels-type=MEM_ACC_NN
                                    --channels-number=2
                                    --memory-allocation-policy=ALL_BRAM
                                    --distram-threshold=512
                                    --disable-function-proxy
             BAMBU                - this setup implies:
                                    -O0 --channels-type=MEM_ACC_11
                                    --memory-allocation-policy=LSS
                                    --distram-threshold=256
             BAMBU092             - this setup implies:
                                    -O3  -D'printf(fmt, ...)='
                                    --timing-model=SIMPLE
                                    --DSP-margin-combinational=1.3
                                    --cprf=0.9  -skip-pipe-parameter=1
                                    --channels-type=MEM_ACC_11
                                    --memory-allocation-policy=LSS
                                    --distram-threshold=256
             VVD                  - this setup implies:
                                    -O3  -D'printf(fmt, ...)='
                                    --channels-type=MEM_ACC_NN
                                    --memory-allocation-policy=ALL_BRAM
                                    --distram-threshold=256
                                    --DSP-allocation-coefficient=1.75
                                    --cprf=0.875


  Other options:

    --pragma-parse
        Perform source code parsing to extract information about pragmas.
        (default=no).

    --num-accelerators
        Set the number of physical accelerator instantiated in parallel sections. It must
        be a power of two (default=4).

    --time, -t <time>
        Set maximum execution time (in seconds) for ILP solvers. (infinite).

    --host-profiling
        Perform host-profiling.

    --disable-bitvalue-ipa
        Disable inter-procedural bitvalue analysis.

    --enable-function-proxy
        Enable function proxy. May reduce the resource usage.

    --disable-function-proxy
        Disable function proxy. May increase FSMD parallelism.

    --constraints,-C=<func_name>[=<num_resources>][,<func_name>[=<num_resources>]]*
        Perform resource sharing of functions inside the datapath,
        limiting the number of function instances to 'num_resources'.
        Functions are specified as a comma-separated list with an optional
        number of resources. (num_resources is by default equal to 1 when not specified).
        In case <num_resources> is equal to 'u', the function is unconstrained.
        If the first character of func_name is '*', then 'num_resources'
        applies to all functions having as a prefix 'func_name' with '*'
        character removed.
        In case we have -C='*', all functions have 1 instance constraint. 

    --AXI-burst-type=value
.        Specify the type of AXI burst when performing single beat operations:
              FIXED        - fixed type burst (default)
              INCREMENTAL  - incremental type burst


  Debug options:

    --discrepancy
           Performs automated discrepancy analysis between the execution
           of the original source code and the generated HDL (currently
           supports only Verilog). If a mismatch is detected reports
           useful information to the user.
           Uninitialized variables in C are legal, but if they are used
           before initialization in HDL it is possible to obtain X values
           in simulation. This is not necessarily wrong, so these errors
           are not reported by default to avoid reporting false positives.
           If you can guarantee that in your C code there are no
           uninitialized variables and you want the X values in HDL to be
           reported use the option --discrepancy-force-uninitialized.
           Note that the discrepancy of pointers relies on ASAN to properly
           allocate objects in memory. Unfortunately, there is a well-known
           bug on ASAN (https://github.com/google/sanitizers/issues/914)
           when -fsanitize=address is passed to GCC or CLANG.
           On some compiler versions this issues has been fixed but since the
           fix has not been upstreamed the bambu option --discrepancy may not
           work. To circumvent the issue, the user may perform the discrepancy
           by adding these two options: --discrepancy --discrepancy-permissive-ptrs.

    --discrepancy-force-uninitialized
           Reports errors due to uninitialized values in HDL.
           See the option --discrepancy for details

    --discrepancy-no-load-pointers
           Assume that the data loaded from memories in HDL are never used
           to represent addresses, unless they are explicitly assigned to
           pointer variables.
           The discrepancy analysis is able to compare pointers in software
           execution and addresses in hardware. By default all the values
           loaded from memory are treated as if they could contain addresses,
           even if they are integer variables. This is due to the fact that
           C code doing this tricks is valid and actually used in embedded
           systems, but it can lead to imprecise bug reports, because only
           pointers pointing to actual data are checked by the discrepancy
           analysis.
           If you can guarantee that your code always manipulates addresses
           using pointers and never using plain int, then you can use this
           option to get more precise bug reports.

    --discrepancy-only=comma,separated,list,of,function,names
           Restricts the discrepancy analysis only to the functions whose
           name is in the list passed as argument.

    --discrepancy-permissive-ptrs
           Do not trigger hard errors on pointer variables.

    --discrepancy-hw
           Hardware Discrepancy Analysis.

    --assert-debug
        Enable assertion debugging performed by Modelsim.
        (Mentor Modelsim should be selected to use this option)


  Backend configuration:

    --mentor-visualizer
        Simulate the RTL implementation and then open Mentor Visualizer.
        (Mentor root has to be correctly set, see --mentor-root)

    --mentor-optimizer=<0|1>
        Enable or disable mentor optimizer. (default=enabled)

    --nanoxplore-bypass=<name>
        Define NanoXplore bypass when using NanoXplore. User may set NANOXPLORE_BYPASS
        variable otherwise.

    --altera-root=<path>
        Define Altera tools path. Given path is searched for Quartus.
        (default=/opt/altera:/opt/intelFPGA)

    --lattice-root=<path>
        Define Lattice tools path. Given path is searched for Diamond.
        (default=/opt/diamond:/usr/local/diamond)

    --mentor-root=<path>
        Define Mentor tools path. Given directory is searched for Modelsim and Visualizer
        (default=/opt/mentor)

    --nanoxplore-root=<path>
        Define NanoXplore tools path. Given directory is searched for NXMap.
        (default=/opt/NanoXplore)

    --xilinx-root=<path>
        Define Xilinx tools path. Given directory is searched for both ISE and Vivado
        (default=/opt/Xilinx)


  1. 2024年05月20日 04:30 |
  2. Bambu
  3. | トラックバック:0
  4. | コメント:0

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させよう2

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させよう1”の続き。

Xyloni Development Kit 用の Sapphire SoC のプロジェクトを作成して、SPI と GPIO を PMOD に接続する予定の Pmod OLEDrgb に接続しようということで、前回は、Efinity 2023.2 を起動して、Sapphire SoC IP を作成した。今回は、Verilog HDL ファイルや制約ファイルをインポートして、論理合成、Place & Route、ビットファイルの生成を行った。

SapphireSoC IP を生成したときに生成された T120F324_devkit の Verilog HDL ファイルを Xyloni_OLEDrgb プロジェクトにコピーして、プロジェクトに加える。

左のウインドウの Project タブの Xyloni_OLEDrgb -> Design を右クリックし、右クリックメニューから Add を選択した。

Open ダイアログが表示された。
/media/masaaki/Ubuntu_Disk/Efinity/HDL/Xyloni_OLEDrgb/ip/SapphireSoc/T120F324_devkit フォルダの top_soc.v を選択した。
File Option の Location の Copy to Project のチェックボックスをチェックした。
Open ボタンをクリックした。
Xyloni_OLEDrgb_18_240519.png

top_soc.v が 左のウインドウの Project タブの Xyloni_OLEDrgb -> Design に加わった。
Xyloni_OLEDrgb_19_240519.png

次に制約ファイルを Xyloni_OLEDrgb プロジェクトにコピーして、プロジェクトに加える。

左のウインドウの Project タブの Xyloni_OLEDrgb -> Constraint を右クリックし、右クリックメニューから Add を選択した。

Open ダイアログが表示された。
/media/masaaki/Ubuntu_Disk/Efinity/HDL/Xyloni_OLEDrgb/ip/SapphireSoc/T120F324_devkit フォルダの constraints.sdc を選択した。
File Option の Location の Copy to Project のチェックボックスをチェックした。
Open ボタンをクリックした。
Xyloni_OLEDrgb_20_240519.png

constraints.sdc が左のウインドウの Project タブの Xyloni_OLEDrgb -> constraint に加わった。
Xyloni_OLEDrgb_21_240519.png

Dashboard の Synthesize ボタンをクリックして、論理合成、Place & Route、ビットファイルの生成を行った。

ビットファイルの生成まで終了したが、Unassigned Core Pins が 71 個ある。
Xyloni_OLEDrgb_22_240519.png
  1. 2024年05月19日 19:34 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0

Bambu 2024.03 をビルドしようとしたが失敗した

フリーの高位合成ツールの Bambu の GitHub で v2024.03 が出ていたので、これをビルドしようとブログも書かずに昨日一日中頑張ってたいのだが、失敗した。

INSTALL を見て、Bambu 2024.03 のビルドを行った。最初は、”PANDA – BAMBU INSTALL”を見てインストールを行っていたが、この情報は古いようだった。

Ubuntu 22.04 のパソコンで、Ubuntu 18.04 のやり方で Bambu 2024.03 をビルドしてみたが、失敗した。

次に Docker を使って、Ubuntu 18.04 と Ubuntu 16.04 でやってみたが失敗した。どうやら Bambu 2024.03 からは、C++17 が必要となっていて、Ubuntu 18.04 と Ubuntu 16.04 ではダメそうだった。

INSTALL を見て、Docker に Ubuntu 20.04 を入れて、Bambu 2024.03 のビルドを試みた。

Docker 関連のファイルを示す。
Dockerfile を示す。

FROM ubuntu:20.04
 
RUN apt-get update && apt-get install -y x11-apps
RUN apt-get install -y sudo
 
# Replace 1000 with your user / group id
ARG uid=1000
ARG gid=1000
RUN groupadd -g ${uid} masaaki && \
    useradd -u ${gid} -g masaaki -G sudo -r masaaki && \
    mkdir /home/masaaki && \
    chown ${uid}:${gid} -R /home/masaaki

RUN echo 'Defaults visiblepw'             >> /etc/sudoers
RUN echo 'masaaki ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

USER masaaki
WORKDIR /home/masaaki


build.sh を示す。

docker build -t bambu2403ub20 .


boot.sh を示す。

docker run -ti --rm --name bambu2403ub20 -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix --mount type=bind,src=/media/masaaki/Ubuntu_Disk/PandA-bambu-2024.03/bambu202403ub20/masaaki,dst=/home/masaaki bambu2403ub20 /bin/bash


./build.sh で Ubuntu 20.04 の Docker をビルドして、./boot.sh で起動した。

ホスト・パソコンのホームの .bashrc を /media/masaaki/Ubuntu_Disk/PandA-bambu-2024.03/bambu202403ub20/masaaki ディレクトリにコピーした。
source .bashrc

ライブラリをインストールした。
sudo apt-get install autoconf autoconf-archive automake bison clang-10 clang-11 clang-12 clang-6.0 clang-7 clang-8 clang-9 doxygen flex g++ g++-7 g++-7-multilib g++-8 g++-8-multilib gcc-7 gcc-7-multilib gcc-7-plugin-dev gcc-8 gcc-8-plugin-dev gfortran-7 gfortran-7-multilib gfortran-8 gfortran-8-multilib graphviz libbdd-dev libboost-all-dev libclang-10-dev libclang-11-dev libclang-12-dev libclang-6.0-dev libclang-7-dev libclang-8-dev libclang-9-dev libglpk-dev libicu-dev liblzma-dev libmpc-dev libmpfi-dev libmpfr-dev libsuitesparse-dev libtool libxml2-dev make pkg-config verilator zlib1g-dev

sudo apt install -y net-tools gedit nautilus git


Bambu 2024.03 を git clone した。
git clone -b v2024.03 https://github.com/ferrandi/PandA-bambu.git

cd PandA-bambu
sudo chown -R masaaki:masaaki /opt


configure ファイルを生成した。
make -f Makefile.init

obj ディレクトリを作成し、その中で configure を実行した。
mkdir obj
cd obj
../configure --prefix=/opt/panda --enable-flopoco --enable-opt --enable-release

bambu202403_1_240518.png

configure が終了した。
bambu202403_2_240518.png

make
しばらくビルドしていたが、pugixml.hpp が無いというエラーで止まった。
bambu202403_3_240518.png

How to fix C++ “fatal error: pugixml.hpp: No such file or directory” on Ubuntu”を見ると、apt で libpugixml-dev をインストールするということだったので、インストールした。
sudo apt -y install libpugixml-dev

make してもエラーだった。

pugixml.hpp は zeux/pugixml の src にあったので、他の 2 つファイルともども /media/masaaki/Ubuntu_Disk/PandA-bambu-2024.03/bambu202403ub20/masaaki/PandA-bambu/src/HLS にコピーした。
bambu202403_4_240518.png

その後、またエラーが出たので、pugixml.cpp をどこかにコピーした後でたくさんエラーが出てしまった。
bambu202403_5_240518.png

これで、Bambu 2024.03 のビルドを諦めた。orz
昨日一日ビルドばかりだったよ。。。
  1. 2024年05月19日 04:39 |
  2. Bambu
  3. | トラックバック:0
  4. | コメント:0

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させよう1

Xyloni Development Kit に Pmod OLEDrgb を接続して表示させたい。

Xyloni Development Kit 用の Sapphire SoC のプロジェクトを作成して、SPI と GPIO を PMOD に接続する予定の Pmod OLEDrgb に接続する。
今回は、Efinity 2023.2 を起動して、Sapphire SoC IP を作成する。

Ubuntu 22.04 で Efinity IDE を起動した。
Name に Xyloni_OLEDrgb と入力した。
Location は /media/masaaki/Ubuntu_Disk/Efinity/HDL/Xyloni_OLEDrgb とした。
Family は Trion, Device はT8F81, Timing Model は C2 とした。
OK ボタンをクリックした。
Xyloni_OLEDrgb_1_240517.png

Efinity 2023.2 の Xyloni_OLEDrgb プロジェクトが生成された。
Xyloni_OLEDrgb_2_240517.png

左のウインドウの Project タブの IP を右クリックし、右クリックメニューから New IP を選択した。

P Catalog ダイアログが表示された。
Efinix -> Processors and Peripherals -> Sapphire SoC を選択して、Next>> ボタンをクリックした。
Xyloni_OLEDrgb_3_240517.png

IP Configuration ダイアログが表示された。
SOC タブ
Option を Lite に Frequency (MHz) を 25 MHz に、Cache のチェックボックスのチェックを外した。
Xyloni_OLEDrgb_4_240517.png

Cache/Memory タブ
External Memory Interface のチェックボックスのチェックを外した。
Xyloni_OLEDrgb_5_240517.png

Debug タブ
Target Board/Cable/Module を Xyloni に変更した。
Xyloni_OLEDrgb_6_240517.png

SPI タブ
SPI 1 の Include the SPI 1 のチェックボックスにチェックを入れた。
SPI 2 の Include the SPI 2 のチェックボックスにチェックを入れた。(PmodOLEDrgb に接続する予定)
Xyloni_OLEDrgb_7_240517.png

GPIO タブ
GPIO 0 Bit Width を 16 ビットに変更した。
GPIO 1 Include the GPIO 1 のチェックボックスをチェックした。(PmodOLEDrgb に接続する予定)
GPIO 1 Bit Width を 4 ビットにした。
Xyloni_OLEDrgb_8_240517.png

APB3 タブ
APB Slave 0 の Include the APB3 interface 0 のチェックボックスのチェックを外した。
Xyloni_OLEDrgb_9_240517.png

AXI4 タブ
AXI Slave の Include the AXI4 Slave interface のチェックボックスのチェックを外した。
Xyloni_OLEDrgb_10_240517.png

User Interrupt タブ
User A Interrupt の Include the User Interface A のチェックボックスのチェックを外した。
Xyloni_OLEDrgb_11_240517.png

User Timer タブ
User Timer 0 の Include the User Timer 0 のチェックボックスのチェックを入れた。
User Timer 0 Counter Width を 16 に設定した。
Xyloni_OLEDrgb_12_240517.png

Base Address タブ
Address Assignment Method はデフォルトの AUTO のままとした。
Xyloni_OLEDrgb_13_240517.png

Deliverables タブ
Example Design (Ti60F255_devkit) と Example Design (Ti180J484_devkit) と Testbench/modelsim のチェックボックスのチェックを外した。
Xyloni_OLEDrgb_15_240517.png

Summary タブ
Module Name に SapphireSoc を入力した。
Summary を確認し、Generate ボタンをクリックした。
Xyloni_OLEDrgb_16_240517.png

Review generation configuration ダイアログが表示された。
Generate ボタンをクリックした。

Generation Success ダイアログが表示された。
OK ボタンをクリックした。

Efinity の左のウインドウの Project タブの IP の下に IP : SapphireSoC が追加された。
Xyloni_OLEDrgb_17_240517.png
  1. 2024年05月17日 08:05 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0

FPGAの部屋のまとめサイトの更新(2024年5月16日)

FPGAの部屋のまとめサイト”を更新しました。
2024年5月16日までの記事をまとめて、”Efinity IDE”、”Efinity RISC-V Embedded Software IDE”、”Xyloni Development Kit”、”PolarFire SoC Discovery Kit”、”Pmod OLEDrgb”のカテゴリを追加しました。
  1. 2024年05月16日 04:35 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

Pmod OLEDrgb の勉強3(電源オフ・シーケンス、画像表示シーケンス)

Pmod OLEDrgb の勉強2(電源投入シーケンス)”の続き。。

前回は、Pmod OLEDrgb の電源投入シーケンスを書いた。今回は、電源オフ・シーケンスと画像表示シーケンスを書いた。

Pmod OLEDrgb Reference Manual に基づいて書いている。
SSD1331 Advance Information 96RGB x 64 Dot Matrix OLED/PLED Segment/Common Driver with Controller”を参照している。

電源オフ・シーケンス

1.”Set Display ON/OFF”に 0xAE を送る。(AEh = Display OFF (sleep mode))
2.Vcc Enable (pin 9) を 0 にする。
3.400 ms 待つ
4.電源オフ

ビットマップ画像を Pmod OLEDrgb に書く
vivado-library/ip/Pmods/pmodOLEDrgb_v1_0/drivers/PmodOLEDrgb_v1_0/examples/main.c では、
OLEDrgb_DrawBitmap(&oledrgb, 0, 0, 95, 63, (u8*) tommy);
でビットマップ画像を Pmod OLEDrgb に転送しているようである。
・OLEDrgb_DrawBitmap() は、vivado-library/ip/Pmods/pmodOLEDrgb_v1_0/drivers/PmodOLEDrgb_v1_0/src/PmodOLEDrgb.c にある。
OLEDrgb_DrawBitmap() のコードを引用する。

void OLEDrgb_DrawBitmap(PmodOLEDrgb *InstancePtr, u8 c1, u8 r1, u8 c2, u8 r2,
      u8 *pBmp) {
   u8 cmds[6];
   //set column start and end
   cmds[0] = CMD_SETCOLUMNADDRESS;
   cmds[1] = c1;                   // Set the starting column coordinates
   cmds[2] = c2;                   // Set the finishing column coordinates

   //set row start and end
   cmds[3] = CMD_SETROWADDRESS;
   cmds[4] = r1;                   // Set the starting row coordinates
   cmds[5] = r2;                   // Set the finishing row coordinates

   OLEDrgb_WriteSPI(InstancePtr, cmds, 6, pBmp,
         (((c2 - c1 + 1) * (r2 - r1 + 1)) << 1));
   usleep(1000 * 5);
}


CMD_SETCOLUMNADDRESS は”Set Column Address (15h)”で、CMD_SETROWADDRESS は”Set Row Address (75h) ”のようだ。

たぶん、その後の OLEDrgb_WriteSPI() のコードは読み切れなかったのだが、(割り込みで送っているようだ)たぶん、データとして(Data/Command control (pin 7) を 1 にして)ビットマップのデータを SPIWrite していけば良いのだと思う。それでやってみよう。ダメだったらまた考える。
  1. 2024年05月15日 18:14 |
  2. Pmod OLEDrgb
  3. | トラックバック:0
  4. | コメント:0

Pmod OLEDrgb の勉強2(電源投入シーケンス)

”Pmod OLEDrgb の勉強1(ピン名)”の続き。

前回は、Pmod OLEDrgb の PMOD のピンの機能を書いた。今回は、Pmod OLEDrgb の電源投入シーケンスを書く。

Pmod OLEDrgb Reference Manual に基づいて書いている。
SSD1331 Advance Information 96RGB x 64 Dot Matrix OLED/PLED Segment/Common Driver with Controller”を参照している。

電源 ON シーケンス

1.Data/Command control (pin 7) を 0 にする。(コマンド)
2.Reset pin (pin 8) を 1 にする。(リセット)
3.Vcc Enable (pin 9) を 0 にする。
4.Pmod Enable (pin 10) を 1 にして、20 ms 待つ。
5.RES (pin 8) を 0 にして、少なくとも 3 us 待って 1 にする。ディスプレイ・コントローラをリセット。
6.SPI でロック解除コマンド(0xFD, 0x12)を送る。
7.SPI でディスプレイ・オフ・コマンド(0xAE)を送る。
8.”Remap & Color Depth setting”、SPI で 0xA0, 0x72 を送る。
9.”Set Display Start Line ”、開始ラインは先頭行にする。SPI で 0xA1, 0x00 を送る。
10.”Set Display Offset”、 SPI で 0xA1, 0x00 を送る。垂直オフセットは 0x00。
11.”Set Display Mode”、SPI で 0xA4 を送る。(Normal Display)
12.”Set Multiplex Ratio”、 SPI で 0xA8, 0x3F を送る。
13.”Set Master Configuration”、SPI で 0xAD, 0x3E を送る。(A[0]=0b, Select external VCC supply )
14.”Power Save Mode”、SPI で 0xB0, 0x0B を送る。(A[7:0]=0Bh, Disable Power save mode)
15.”Phase 1 and 2 period adjustment”、SPI で 0xB1, 0x31 を送る。
16.”Display Clock Divider / Oscillator Frequency”、SPI で 0xB3, 0xF0 を送る。クロック分周比を 1 に、内部発振器周波数を ~890 kHzに設定。
17.”Set Second Pre-charge Speed for Color “A”, “B” and “C” ”、SPI で 0x8A, 0x64 を送る。
18.”Set Second Pre-charge Speed for Color “A”, “B” and “C” ”、SPI で 0x8B, 0x78 を送る。
19.”Set Second Pre-charge Speed for Color “A”, “B” and “C” ”、SPI で 0x8C, 0x64 を送る。
20.”Set Pre-charge level”、SPI で 0xBB, 0x3A を送る。各色を目標駆動電圧まで駆動するには、プリチャージ電圧を Vcc の約 45% に設定するそうだ。
21.”Set VCOMH”、SPI で 0xBE, 0x3E を送る。VCOMH 選択解除レベル (ロジック ハイとして登録される最小電圧レベル) を Vcc の 83% に設定するそうだ。
22.”Master Current Control”、SPI で 0x87, 0x06 を送る。マスター電流減衰率を設定して、セグメントドライバーの基準電流を設定するそうだ。
23.”Set Contrast for Color "A"”、SPI で 0x81, 0x91 を送る。カラー A (デフォルトは赤) のコントラストを設定し、明るさのレベルを効果的に設定するそうだ。
24.”Set Contrast for Color "B"”、SPI で 0x82, 0x50 を送る。
25.”Set Contrast for Color "C"”、SPI で 0x83, 0x7D を送る。カラー C (デフォルトは青) のコントラストを設定し、明るさのレベルを効果的に設定するそうだ。
26.”Deactivate scrolling”、SPI で 0x2E を送る。スクロールを無効にする。
27.”Clear Window”、SPI で 0x25, 0x00, 0x00, 0x5F, 0x3F を送る。クリア コマンドとクリアするウィンドウのサイズ (上の列、上の行、下の列、下の行) を送信して、画面をクリアするそうだ。
28.VCCEN (pin 9) を 1 にして、25 ms 待つ。
29.”Set Display ON/OFF”、SPI で 0xAF を送る。ディスプレイを ON する。
30.少なくとも 100 ms 待つ
  1. 2024年05月14日 06:53 |
  2. Pmod OLEDrgb
  3. | トラックバック:0
  4. | コメント:0

Pmod OLEDrgb の勉強1(ピン名)

Pmod OLEDrgb を Xyloni Development Kit で使用したい。Efinity RISC-V の SPI を使用して使ってみたい。というわけで、Pmod OLEDrgb の使い方を勉強したい。今日はPmod OLEDrgb の PMOD のピン名を勉強した。

Digilent 社の Pmod OLEDrgb のサイト

Pmod OLEDrgb Reference Manual

Pmod OLEDrgb で使用してる SSD1331 96RGB x 64 Dot Matrix OLED/PLED Segment/Common Driver with Controller のマニュアル

Pmod OLEDrgb Reference Manual の”Pinout Description Table”を引用する。
PmodOLEDrgb_win_1_240513.png

CS, MOSI, SCK は SPI の信号だ。MISO は無い。Pmod OLEDrgb に Write するだけのようだ。Read は無い。
D/C, RES, VCCEN, PMODEN は GPIO を当てる必要があるかな?
  1. 2024年05月13日 04:56 |
  2. Pmod OLEDrgb
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.1 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる4

Vivado 2023.1 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる3”の続き。

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、前回は、Vitis 2023.1 で Run Configuration を作成し、Run したところ、Pmod OLEDrgb に画像が表示できた。今回は、BMP ファイルから画像をC 言語の配列に変換する Python ソフトウェアを使用して、BMP ファイルを配列に変換し、Pmod OLEDrgb に表示した。

BMP ファイルから C 言語の配列に変換する Python ソフトウェアが tom21091/Bmp-to-byte-array-script/bitmaptoarray.py だ。
Pmod_OLEDrgb_95_240512.png

bitmaptoarray.py をダウンロードした。

test2.bmp を用意した。画像のサイズは 800 x 600 ピクセルだ。
test2.bmp を Pinta で読み込んだ。
Pmod_OLEDrgb_87_240512.jpg

Pinta で 96 x 64 ピクセルに変換し、セーブした。
Pmod_OLEDrgb_88_240512.jpg

HDL/2023.1/ZYBO_Z7-20/Pmod_OLEDrgb ディレクトリに bitmaptoarray.py と test2.bmp が入っている。
Pmod_OLEDrgb_89_240512.png

Terminal で HDL/2023.1/ZYBO_Z7-20/Pmod_OLEDrgb ディレクトリで bitmaptoarray.py を実行した。
python3 bitmaptoarray.py
Pmod_OLEDrgb_90_240512.png

test2array.c ファイルが生成された。
12288 個の配列を持つ test2 配列が記述されていた。
Pmod_OLEDrgb_91_240512.png

Vitis 2023.1 の PmodOLEDrgb アプリケーション・プロジェクトの bitmap.h に tommy 配列がある。
Pmod_OLEDrgb_92_240512.png

tommy 配列を消去して、代わりに test2 配列を書いた。
Pmod_OLEDrgb_93_240512.png

更に main.c の DemoRun() の 84 行目の OLEDrgb_DrawBitmap() の最後の引数を tommy から test2 に書き換えた。
Pmod_OLEDrgb_94_240512.png

Explorer で PmodOLEDrgb_system をクリックし、ビルド・ボタンをクリックしてビルドした。ビルドは成功だ。

Vitis 2023.1 の Explorer の PmodOLEDrgb_system を右クリックし、右クリックメニューから Run As -> Run Configurations... を選択すると、SystemDebugger PmodOLEDrgb system コンフィギュレーションが表示された。
Pmod_OLEDrgb_96_240512.png

ZYBO Z7-20 を Ubuntu 22.04 のパソコンに USB ケーブルで接続し、電源スイッチを ON にした。

Run ボタンをクリックした。

Pmod OLEDrgb に test2.bmp の画像が表示された。
Pmod_OLEDrgb_97_240512.jpg
  1. 2024年05月12日 08:28 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.1 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる3

Vivado 2023.1 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる2”の続き。

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、前回は、Vitis 2023.1 を立ち上げて、アプリケーション・プロジェクトを新規作成し、ソースコードをインポートして、ビルドを行って成功した。今回は、Vitis 2023.1 で Run Configuration を作成し、Run したところ、Pmod OLEDrgb に画像が表示できた。

Vitis 2023.1 の Explorer の PmodOLEDrgb_system を右クリックし、右クリックメニューから Run As -> Run Configurations... を選択した。
Pmod_OLEDrgb_82_240511.png

Run Configurations ダイアログが表示された。
System Projcet Debug を右クリックし、右クリックメニューから New Configuration を選択した。
Pmod_OLEDrgb_83_240511.png

SystemDebugger PmodOLEDrgb system が生成された。
Pmod_OLEDrgb_84_240511.png

Target Setup タブをクリックして開いた。
Use FSBL flow for initialization のチェックが外れていて、ps7_init.tcl が実行されるようだ。

ZYBO Z7-20 を Ubuntu 22.04 のパソコンに USB ケーブルで接続し、電源スイッチを ON にした。

Run ボタンをクリックした。
Pmod_OLEDrgb_85_240511.png

すると、FPGA をコンフィギュレーションして、DONE ランプが一旦点灯するが、すぐに消えてしまった。
試行錯誤したのだが、原因は、ZYBO Z7-20 の電源を USB から取得していたことだったようだ。
5V のスイッチング・レギュレータ電源を ZYBO Z7-20 に接続して、そこから電源を取るようにしたら Pmod OLEDrgb に正常に表示できた。
Pmod_OLEDrgb_86_240511.jpg

どうやら Pmod OLEDrgb はかなり電力を消費するようだ。
Pmod OLEDrgb Reference Manual によると消費電流は White Screen Current Consumption (All pixels set to white at maximum brightness) で 75.5 mA だそうだ。結構、電流が流れるので、USB だと持たなかったのだろう?
  1. 2024年05月11日 04:16 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.1 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる2

Vivado 2023.1 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる1”の続き。

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、前回は、Vitis のバージョンを変えてやってみようということで、Vivado 2023.1 を使用して、もう一度、Pmod_OLEDrgb プロジェクトを作成し、ブロック・デザインを新規作成して、回路を完成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。更に XSA ファイルを生成した。今回は、Vitis 2023.1 を立ち上げて、アプリケーション・プロジェクトを新規作成し、ソースコードをインポートして、ビルドを行って成功した。

Vivado 2023.1 の Tools メニューから Launch Vitis IDE を選択して、Vitis 2023.1 を起動した。

Vitis IDE Launcher ダイアログが表示された。
Workspace の Brows... ボタンをクリックし、HDL/2023.1/ZYBO_Z7-20/Pmod_OLEDrgb に vitis_work ディレクトリを作成して、指定した。
Launch ボタンをクリックした。
Pmod_OLEDrgb_69_240510.png

Vitis IDE が起動した。
Create Application Project をクリックした。
Pmod_OLEDrgb_70_240510.png

New Application Project ダイアログが表示された。
Create a New Application Project 画面
Next > ボタンをクリックした。
Pmod_OLEDrgb_71_240510.png

Platform 画面
Create a new platform from hardware (XSA) タブをクリックした。
XSA File の Brows... ボタンをクリックして、/media/masaaki/Ubuntu_Disk/HDL/2023.1/ZYBO_Z7-20/Pmod_OLEDrgb/Pmod_OLED_wrapper.xsa を選択した。
Next > ボタンをクリックした。
Pmod_OLEDrgb_72_240510.png

Application Project Details 画面
Application project name に pmdoOLEDrgb を入力した。
Next > ボタンをクリックした。
Pmod_OLEDrgb_73_240510.png

Domain 画面
デフォルトのまま、Next > ボタンをクリックした。
Pmod_OLEDrgb_74_240510.png

Templates 画面
Empty Application (C) を選択した。
Finish ボタンをクリックした。
Pmod_OLEDrgb_75_240510.png

Pmod_OLDE_wrapper プラットフォームと PmdoOLEDrgb アプリケーション・プロジェクトが作成された。
Pmod_OLEDrgb_76_240510.png

PmodOLEDrgb_system -> PmodOLEDrgb -> src を右クリックし右クリックメニューから Import Sources... を選択した。
Pmod_OLEDrgb_77_240510.png

From Directory の Brows... ボタンをクリックして、/media/masaaki/Ubuntu_Disk/HDL/vivado-library-master/ip/Pmods/pmodOLEDrgb_v1_0/drivers/PmodOLEDrgb_v1_0/examples ディレクトリの bitmap.h と main.c のチェックボックスをチェックした。
Finish ボタンをクリックした。
Pmod_OLEDrgb_78_240510.png

bitmap.h と main.c が Vitis 2023.1 の PmodOLEDrgb_system -> PmodOLEDrgb -> src ディレクトリに入った。

もう 1 つのディレクトリからファイルをインポートする。
modOLEDrgb_system -> PmodOLEDrgb -> src を右クリックし右クリックメニューから Import Sources... を選択した。

From Directory の Brows... ボタンをクリックして、/media/masaaki/Ubuntu_Disk/HDL/vivado-library-master/ip/Pmods/pmodOLEDrgb_v1_0/drivers/PmodOLEDrgb_v1_0/src ディレクトリの Makefile 以外のファイルのチェックボックスをチェックした。
Finish ボタンをクリックした。
Pmod_OLEDrgb_79_240510.png

これで、pmodOLEDrgb_v1_0/drivers/PmodOLEDrgb_v1_0/src ディレクトリのファイルも Vitis 2023.1 の PmodOLEDrgb_system -> PmodOLEDrgb -> src ディレクトリに入った。

Explorer で PmodOLEDrgb_system をクリックし、ビルド・ボタンをクリックした。
Pmod_OLEDrgb_80_240510.png

ビルドが始まり、終了した。成功だ。ソースコードを修正しなくても正常終了した。やはり、Vivado 2023.2 は結構変更されているようだ。
Pmod_OLEDrgb_81_240510.png
  1. 2024年05月10日 09:34 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.1 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる1

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる6”の続き。
(追記)Vivado 2023.2 では題名に合わないので、改題しました。

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、前回は、ビルドが成功したので、アプリケーション・ソフトウェアを Run したが、エラーが出てしまった。今回は、Vitis のバージョンを変えてやってみようということで、Vivado 2023.1 を使用して、もう一度、Pmod_OLEDrgb プロジェクトを作成し、ブロック・デザインを新規作成して、回路を完成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。更に XSA ファイルを生成した。

Vitis 2023.2 では、その前のバージョンからでは、大幅な変更があったので、Vitis 2023.1 でやってみることにした。
Vivado 2023.2 で作成した XSA ファイルで、Vitis 2023.1 でアプリケーション・プロジェクトを作成して、Run しようとしたらバージョンが違うと言われてしまったので、Vivado 2023.1 でビットストリームの作成からやり直すことにした。

Vivado 2023.2 で手順を書いているので、その通りやっていった。
Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる1”で Vivado 2023.1 で Pmod_OLEDrgb プロジェクトを作成し、vivado-library-master の IP をリポジトリに追加した。

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる2”で、Pmod_OLED ブロック・デザインを作成し、回路を完成させた。

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる3”で、HDL Wrapper ファイルを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行い、XSA ファイルを生成した。

Vivado 2023.1 で作成した Pmod_OLEDrgb プロジェクトを示す。Pmod_OLED ブロック・デザインを作成し、HDL Wrapper ファイルを生成したところだ。
Pmod_OLEDrgb_66_240509.png

論理合成、インプリメンテーション、ビットストリームの生成を行って成功した。
Project Summary を示す。
Pmod_OLEDrgb_67_240509.png

XSA ファイルを作成した。
Pmod_OLEDrgb_68_240509.png
  1. 2024年05月09日 05:06 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる6

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる5”の続き。

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、前回は、アプリケーション・プロジェクトの PmodOLEDrgb を作成して、ソースコードをインポートし、ビルドを行って成功した。今回は、ビルドが成功したので、アプリケーション・ソフトウェアを Run したが、エラーが出てしまった。

Vitis 2023.2 の FLOW ウインドウから Run を選択して、アプリケーション・ソフトウェアを起動した。
Pmod_OLEDrgb_62_240507.png

エラーで停止した。
Pmod_OLEDrgb_64_240508.png

エラー内容は

04:51:47 ERROR : invalid command name "ps7_init"
04:51:47 ERROR : Failed to initialize the hardware invalid command name "ps7_init"

だった。

Run Configuration で Board Initialization を TCL から FSBL に変更してみた。
もう一度、Run を選択して、アプリケーション・ソフトウェアを起動した。
やはりエラーだった。
Pmod_OLEDrgb_65_240508.png

エラー内容は

04:49:12 ERROR : timeout: target has not halted
04:49:12 ERROR : [Ljava.lang.StackTraceElement;@ce95525
04:49:12 ERROR : Failed to initialize the hardware Failed to detect FSBL exit status using symbol: FsblHandoffJtagExit Retry by changing the symbol or set environment variable VITIS_FSBL_EXIT_TIMEOUT to change the wait timeout


  1. 2024年05月08日 04:55 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

PolarFire® SoC Discovery Kit が届いた

昨日、PolarFire® SoC Discovery Kit が届いた。

注文したのは 2024/02/23 だったので、2 ヶ月以上かかったことになる。在庫あると言うことで頼んだと思うのだけど、随分時間がかかってしまった。

これが PolarFire® SoC Discovery Kit の箱だ。
PolarFire_SoC_Discovery_Kit_1_240507.jpg

基板を見ると、MPFS-DISCO-KIT REV 2 のシルクが見える。何か不具合があって、改版していたのだろうか? それで遅れたのかな?
PolarFire_SoC_Discovery_Kit_2_240507.jpg

基板の裏側、大きな OS コン? が搭載されているので、スペーサーが異様に長いのかな?
PolarFire_SoC_Discovery_Kit_3_240507.jpg

PolarFire® SoC Discovery Kit のメインの特徴を PolarFire® SoC Discovery Kit から引用する。

・ PolarFire SoC FPGA with 95K LEs (MPFS095T-1FCSG325E )
・ Four 64-bit RISC-V cores
・ One GB main memory
・ One Gigabit Ethernet
・ Three UART
・ One micro-SD interface
・ Form factor 4.1'' x 3.3''


MIPI コネクタがあるけど、画像の出力用のコネクタが無い。
ラズパイ・コネクタに画像出力用ドーターボードでも作りたい。
  1. 2024年05月07日 04:28 |
  2. PolarFire SoC Discovery Kit
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる5

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる4”の続き。

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、前回は、Vitis を起動し、Embedded Development の Platform Component の PmodOLEDrgb_pf を作成し、ビルドした。ビルドは成功した。今回は、アプリケーション・プロジェクトの PmodOLEDrgb を作成して、ソースコードをインポートし、ビルドを行って成功した。

アプリケーション・プロジェクトを作成する。
Vitis 2023.2 で Embedded Development の Create Embedded Application をクリックする。
Pmod_OLEDrgb_50_240505.png

Create Embedded Application ダイアログが開いた。
Name and Location 画面
Component name に PmodOLEDrgb と入力した。
Componet location に /media/masaaki/Ubuntu_Disk/HDL/2023.2/ZYBO_Z7_20/Pmod_OLEDrgb/vitis_work を指定した。
Next ボタンをクリックした。
Pmod_OLEDrgb_51_240505.png

Select Platform 画面
PmodOLEDrgb_pf を指定した。
Next ボタンをクリックした。
Pmod_OLEDrgb_52_240505.png

Select Domain 画面
OS は standalnoe に指定されている。
Next ボタンをクリックした。
Pmod_OLEDrgb_53_240505.png

Summary 画面
Finish ボタンをクリックした。
Pmod_OLEDrgb_54_240505.png

PmodOLEDrgb アプリケーション・プロジェクトが生成された。
ソースコードをインポートする。
PmodOLEDrgb を展開し Source -> src を右クリックし、右クリックメニューから Import -> FIles... を選択した。
Pmod_OLEDrgb_55_240505.png

Files... ダイアログが開いた。
vivado-library-master/ip/Pmods/pmodOLEDrgb_v1_0/drivers/PmodOLEDrgb_v1_0/examples/bitmap.h を選択した。
Open ボタンをクリックした。
Pmod_OLEDrgb_56_240505.png

同様に main.c もインポートした。

Vitis 2023.2 の FLOW ウインドウで PmodOLEDrgb のビルドを行ったが、エラーなった。
PmodeOLEDrgb.h などが無いようだ。
Pmod_OLEDrgb_57_240505.png

vivado-library-master/ip/Pmods/pmodOLEDrgb_v1_0/drivers/PmodOLEDrgb_v1_0/src ディレクトリのファイルをすべてインポートした。ここに PmodeOLEDrgb.h もある。
これでもう一度ビルドしたが、エラーだった。
xparameters.h に通常定義されている定義の名前が違っているというエラーだった。
xparameters.h に定義されている名前に変更した。
Pmod_OLEDrgb_58_240505.png

これでビルドしたところ成功した。
Pmod_OLEDrgb_59_240505.png
  1. 2024年05月06日 09:32 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる4

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる3”の続き。

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、前回は、HDL Wrapper ファイルを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。更に XSA ファイルを生成した。今回は、Vitis を起動し、Embedded Development の Platform Component の Pmod_OLEDrgb_pf を作成し、ビルドした。ビルドは成功した。

Vivado 2023.2 から Tools メニューから Launch Vitis IDE を選択して、Vitis 2023.2 を起動した。
Vitis 2023.2 が起動した。
Open Workspace をクリックして、ワークスペースを指定する。
Pmod_OLEDrgb_60_240505.png

Open Folder ダイアログが開いた。
HDL/2023.2/ZYBO_Z7_20/Pmod_OLEDrgb ディレクトリに vitis_work ディレクトリを新規作成し、vitis_work をクリックして、Open ボタンをクリックした。
Pmod_OLEDrgb_61_240505.png

プラットフォームを作成する。
Embedded Development の Create Platform Component をクリックした。
Pmod_OLEDrgb_41_240505.png

Create Platform Component ダイアログが開いた。
Name and Location 画面
Component name に PmodOLEDrgb_pf と入力した。
Component location に Browse ボタンをクリックし、/media/masaaki/Ubuntu_Disk/HDL/2023.2/ZYBO_Z7_20/Pmod_OLEDrgb/vitis_work を指定した。
Next ボタンをクリックした。
Pmod_OLEDrgb_42_240505.png

Flow 画面
Hardware Design (XSA) の Browse ボタンをクリックした。
Pmod_OLEDrgb_43_240505.png

Select Hardware Design (XSA) ダイアログが開いた。
/media/masaaki/Ubuntu_Disk/HDL/2023.2/ZYBO_Z7_20/Pmod_OLEDrgb/Pmod_OLED_wrapper.xsa を選択した。
Open ボタンをクリックした。
Pmod_OLEDrgb_44_240505.png

Hardware Design (XSA) に /media/masaaki/Ubuntu_Disk/HDL/2023.2/ZYBO_Z7_20/Pmod_OLEDrgb/Pmod_OLED_wrapper.xsa が入った。
Next ボタンをクリックした。
Pmod_OLEDrgb_45_240505.png

OS and Processor 画面
Operating System が standalone 、Processor が ps7_cortexa9_0 であることを確認して、Next ボタンをクリックした。
Pmod_OLEDrgb_46_240505.png

Summary 画面
Finish ボタンをクリックした。
Pmod_OLEDrgb_47_240505.png

PmodOLEDrgb_pf プラットフォームが作成された。
FLOW ウインドウから Build をクリックした。
Pmod_OLEDrgb_48_240505.png

ビルドが成功した。
Pmod_OLEDrgb_49_240505.png
  1. 2024年05月05日 04:43 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる3

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる2”の続き。

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、前回は、ブロック・デザインを作成し、ZYNQ7 Processing System をブロック・デザインに追加し、PmodOLEDrgb_V1.0 を追加して、Run Connection Automation を実行して、配線を行った。今回は、HDL Wrapper ファイルを作成し、論理合成、インプリメンテーション、ビットストリームの生成を行った。更に XSA ファイルを生成した。

Source ウインドウで Pmod_OLED ブロック・デザインを右クリックし、右クリックメニューから Create HDL Wrapper... を選択した。
Create HDL Wrapper ダイアログが開いた。
Let Vivado Manage wrapper and auto-update のラジオボタンが選択されていることを確認して、OK ボタンをクリックした。
Pmod_OLEDrgb_27_240504.png

Pmod_OLED_wrappter.v ファイルが生成された。
左端のウインドウの Flow Navigator から PROGRAM AND DEBUG -> Generate Bitstream をクリックして、論理合成、インプリメンテーション、ビットストリームの生成を行った。
Pmod_OLEDrgb_28_240504.png

Launch Run Critical Message ダイアログが出たが、OK ボタンをクリックした。
Pmod_OLEDrgb_29_240504.png

論理合成、インプリメンテーション、ビットストリームの生成が成功した。
Project Summary を示す。
Pmod_OLEDrgb_30_240504.png

XSA ファイルを出力する。
Vivado 2023.2 の File メニューから Export -> Export Hardware... を選択した。
Pmod_OLEDrgb_35_240504.png

Export Hardware Platform ダイアログが表示された。
Export Hardware Platform 画面
Next > ボタンをクリックした。
Pmod_OLEDrgb_36_240504.png

Output 画面
Include bitstream ラジオボタンをクリックして選択した。
Next > ボタンをクリックした。
Pmod_OLEDrgb_37_240504.png

Files 画面
XSA file name はデフォルトの Pmod_OLED_wrapper とした。
Export to もデフォルトのままとした。
Next > ボタンをクリックした。
Pmod_OLEDrgb_38_240504.png

Summary 画面
Finish ボタンをクリックした。
Pmod_OLEDrgb_39_240504.png

Pmod_OLEDrgb ディレクトリに Pmod_OLED_wrapper.xsa ファイルが生成された。
Pmod_OLEDrgb_40_240504.png
  1. 2024年05月04日 11:30 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる2

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる1”の続き。

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、前回は、Digilent Vivado library をダウロードして展開し、 Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Settings を開いて Digilent Vivado library を IP のリポジトリに追加した。今回は、ブロック・デザインを作成し、ZYNQ7 Processing System をブロック・デザインに追加し、PmodOLEDrgb_V1.0 を追加して、Run Connection Automation を実行して、配線を行った。

Flow Navigator の IP INTEGRATOR -> Create Block Design をクリックした。
Create Block Design ダイアログが表示された。
Desgin name に Pmod_OLED と入力して、OK ボタンをクリックした。
Pmod_OLEDrgb_13_240503.png

Diagram ウインドウが表示された。
真ん中の + ボタンをクリックした。
Pmod_OLEDrgb_14_240503.png

IP のリストが表示され、Search 欄に Z を入力した。
ZYNQ7 Processing System をダブルクリックして、選択した。
Pmod_OLEDrgb_15_240503.png

processing_system7_0 が Diagram に追加された。
Run Block Automation をクリックした。
Pmod_OLEDrgb_16_240503.png

All Automation にチェックが入っているのを確認して、OK ボタンをクリックした。
Pmod_OLEDrgb_17_240503.png

Diagram ウインドウで processing_system7_0 に DDR と FIXED_IO のポートが追加され、ZYBO Z7-20 の設定が行われた。
Pmod_OLEDrgb_18_240503.png

PmodOLEDrgb_V1.0 を追加する。
Board タブの Connetor JB をダブルクリックした。
Pmod_OLEDrgb_19_240503.png

Connect Board Component ダイアログが表示された。
PmodOLEDrgb_v1.0 -> PmodOLEDrgb_out をクリックし、OK ボタンをクリックした。
Pmod_OLEDrgb_20_240503.png

Diagram ウインドウに PmodOLEDrgb_0 が追加された。
Run Connection Automation をクリックした。
Pmod_OLEDrgb_22_240503.png

Run Connection Automation ダイアログが表示された。
All Automation のチェックボックスをチェックした。
OK ボタンをクリックした。
Pmod_OLEDrgb_23_240503.png

Diagram ウインドウの回路が完成した。
Validate Design ボタンをクリックして、デザインをチェックする。
Pmod_OLEDrgb_24_240503.png

Critical Messages ダイアログが表示された。
DDR のクリティカル・ワーニング以外は表示されていない。ZYBO Z7-20 を Validate Design するといつもこのクリティカル・ワーニングは表示されるので、気にしない。
Pmod_OLEDrgb_25_240503.png

Save Block Design ボタンをクリックして、ブロック・デザインをセーブした。
  1. 2024年05月03日 05:13 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

Vivado 2023.2 で Pmod_OLEDrgb プロジェクトを作成し Pmod OLEDrgb を動作させる1

Getting the PmodOLEDrgb to Work on Zybo”を参考にして、Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Pmod OLEDrgb を動作させてみたいということで、今回は、Digilent Vivado library をダウロードして展開し、 Vivado 2023.2 で ZYBO Z7-20 用の Pmod_OLEDrgb プロジェクトを作成し、Settings を開いて Digilent Vivado library を IP のリポジトリに追加した。

Digilent Vivado library をダウンロードした。
vivado-library-master.zip がダウンロードできた。
vivado-library-master.zip を展開すると、vivado-library-master ディレクトリができた。
Pmod_OLEDrgb_1_240502.png

Vivado 2023.2 を起動した。
Quick Start の Create Project をクリックした。
Pmod_OLEDrgb_2_240502.png

New Project ダイアログが開いた。
Create a New Vivado Project 画面
Next > ボタンをクリックした。
Pmod_OLEDrgb_3_240502.png

Project Name 画面
Project name に Pmod_OLEDrgb を入力した。
Project location を指定した。
Create project subdirectory のチェックボックスにチェックが入っていることを確認する。
Pmod_OLEDrgb_4_240502.png

Project Type 画面
RTL Project のラジオボタンが選択されていることを確認する。
Do not specify soures at this time のチェックボックスにチェックが入っていることを確認する。こうするとソースコードの入力画面をパスできる。
Pmod_OLEDrgb_5_240502.png

Default Part 画面
Boards タブをクリックする。
Vender で digilentinc.com を選択する。
Zybo Z7-20 を選択する。
Pmod_OLEDrgb_6_240502.png

New Project Summary 画面
Finish ボタンをクリックした。
Pmod_OLEDrgb_7_240502.png

Vivado 2023.2 の Pmod_OLEDrgb プロジェクトが生成された。
Pmod_OLEDrgb_8_240502.png

PROJECT MANAGER で Settings をクリックする。
Settings ダイアログが表示された。
左のウインドウの Project Settings から IP -> Repository を選択した。
IP Repositories で + の Add ボタンをクリックした。
Pmod_OLEDrgb_9_240502.png

IP Repositories ダイアログが開いた。
先程ダウンロードした vivado-library-master ディレクトリを指定した。
Pmod_OLEDrgb_10_240502.png

Add Repository ダイアログが開いた。
65 個の IP と 5 個の Interfaces をインポートしたようだ。
OK ボタンをクリックした。
Pmod_OLEDrgb_11_240502.png

Settings ダイアログの IP Repositories に先程ダウンロードした vivado-library-master ディレクトリが追加されている。
OK ボタンをクリックした。
Pmod_OLEDrgb_12_240502.png
  1. 2024年05月02日 05:00 |
  2. ZYBO Z7
  3. | トラックバック:0
  4. | コメント:0

Pmod OLEDrgb を Xyloni Development Kit に付ける

Xyloni Development Kit は PMOD が 1 個、搭載されているので、Tang Primer 25K の PMOD-DVI ボードを挿して DVI で画像を表示したいと思ったが、調べてみると TMDS 信号を直接出力することができなそうだ、ということがわかった。

そこで、前に買ってあって使ってなかった Pmod OLEDrgb があるので、これを Xyloni Development Kit の PMOD に付けて画像を表示してみたい。

Pmod OLEDrgb を購入したのは秋月電子から購入した。

Pmod OLEDrgb の Resouce Center はここだ

とりあえず、Pmod OLEDrgb の動作を見てみたいので、”Getting the PmodOLEDrgb to work on Zybo”をやってみようと思う。
  1. 2024年05月01日 04:24 |
  2. Xyloni Development Kit
  3. | トラックバック:0
  4. | コメント:0