FC2カウンター FPGAの部屋

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

FPGAの部屋

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

Zybot をステレオカメラにする1(カメラ・インターフェース基板の実装とテスト)

”I2Cリピーター付きカメラ・インターフェース基板2が来ました”で届いた基板に部品を実装してZYBO に延長ケーブルを付けてテストしてみた。

”I2Cリピーター付きカメラ・インターフェース基板2が来ました”で届いた基板に部品を実装した。
MSC-009_3_161206.jpg

MSC-009_2_161206.jpg

延長ケーブルを付けてZYBO に接続して、Ubuntu を起動してカメラを表示してみたところ、5回とも成功。。。つまり、I2Cリピーターを付けると延長ケーブルを付けてもI2C が通って、正常にカメラ画像を表示できた。
MSC-009_1_161206.jpg

延長ケーブルは、Digiletnt社の 2x6 Pin Cable で、長さは 15 cm だ。

これで、ZYBO を2台 Zybot に搭載してステレオカメラにすることができる。

だが、今回のカメラ・インターフェース基板は、幅を狭くしたので、ZYBO に直接取り付けでステレオカメラにすることもできる。
MSC-009_4_161206.jpg

MSC-009_5_161206.jpg

ただし、Zybot ではモーター・コントロールにPMOD を 1 つ使用しているので、ZYBO 1台にカメラを2つ取り付けるステレオカメラにすることはできない。。。
  1. 2016年12月07日 04:48 |
  2. Zybot
  3. | トラックバック:0
  4. | コメント:0

Zybot に超音波距離センサを搭載する3(Vivado HLSでインターフェースIPを作製)

Zybot に超音波距離センサを搭載する2(Arduino でセンサをテストする)”の続き。

追記:パララックス社の超音波距離センサを使うとするとこの超音波距離センサ用インターフェースIP にはバグがあります。
パララックス社の超音波距離センサは、SIG 1ポートのみで、インターフェースIPからのトリガパルスと超音波距離センサからの距離のパルスの両方が入出力されます。よって、sensor_in をHLS ストリームで宣言しているとインターフェースIPが自分で出力したトリガパルスもsensor_in に入ってきてこれを計測してしまいます。
これについては修正版のブログを後で掲載します。
超音波距離センサー HC-SR04 だと、トリガパルスの長さを 10 us に変更する必要がありますが、Trig ピンと Echo ピンに入力と出力が分かれているので、この超音波距離センサ・インターフェースIPを使うことができると思います。


前回はArduino を使用して秋月電子の「パララックス社超音波距離センサーモジュール」を使ってみた。今回は、「パララックス社超音波距離センサーモジュール」を使うためのインターフェースIP をVivado HLS で作製してみよう。

Vivado HLS 2016.3 で ultrasonic_sensor_inf プロジェクトを新規作成した。ソースファイルとして ultrasonic_sensor_inf.cpp とテストベンチファイルとして、ultrasonic_sensor_inf_tb.cpp を作成した。
Ultrasonic_senser_inf_7_161206.png

ultrasonic_sensor_inf.cpp を示す。クロック周波数は 100 MHz とする。

// ultrasonic_sensor_inf.cpp
// 2016/12/05 by marsee
// count_val は超音波距離センサからのパルス長を示す。単位は 10 ns とする
// 
// ライセンスは二条項BSDライセンス (2-clause BSD license)とします。
//

#include <stdio.h>
#include <string.h>
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include <ap_utils.h>

#define COUNT_LIMIT    2000000 // clock = 100MHz, 20ms

int ultrasonic_sensor_inf(int &count_val, volatile ap_uint<1> &sensor_out,
        volatile ap_uint<1> &sensor_out_en, hls::stream<ap_uint<1> >& sensor_in){
#pragma HLS INLINE
#pragma HLS INTERFACE ap_hs port=sensor_in
#pragma HLS INTERFACE ap_none register port=sensor_out_en
#pragma HLS INTERFACE ap_none register port=sensor_out
#pragma HLS INTERFACE s_axilite port=count_val
#pragma HLS INTERFACE s_axilite port=return

    int cnt;
    ap_uint<1> sensor_in_node;

    Loop_1out5us: for(cnt=0; cnt<500; cnt++){ // 5 us のパルスを出力
#pragma HLS PIPELINE II=1
        sensor_out = 1;
        sensor_out_en = 1;
    }

    sensor_out = 0;
    Loop_wait1us: for(cnt=0; cnt<100; cnt++){ // 1 us の間 senser_out に 0 を保持
#pragma HLS PIPELINE II=1
        sensor_out = 0;
        sensor_out_en = 1;
    }

    sensor_out_en = 0// sensor_out のバッファをディスエーブル

    Loop_wait_high: for(cnt=0; cnt<COUNT_LIMIT; cnt++){
#pragma HLS PIPELINE II=1
        sensor_in >> sensor_in_node;
        if((int)sensor_in_node)
            break;
    }
    if(cnt == COUNT_LIMIT)
        return(1); // error, overflow

    Loop_mesure_high: for(cnt=0; cnt<COUNT_LIMIT; cnt++){ // リミットは 20 ms
#pragma HLS PIPELINE II=1
#pragma HLS LOOP_TRIPCOUNT min=11500 max=1850000 avg=20000
        sensor_in >> sensor_in_node;
        if(!(int)sensor_in_node)
            break;
    }

    count_val = cnt;
    if (cnt == COUNT_LIMIT)
        return(2); // error, overflow
    else
        return(0); // normal end
}


ultrasonic_sensor_inf_tb.cpp を示す。

// ultrasonic_sensor_inf_tb.cpp
// 2016/12/06 by marsee
//
// ライセンスは二条項BSDライセンス (2-clause BSD license)とします。
//

#include <ap_int.h>
#include <hls_stream.h>

int ultrasonic_sensor_inf(int &count_val, volatile ap_uint<1> &sensor_out,
        volatile ap_uint<1> &sensor_out_en, hls::stream<ap_uint<1> >& sensor_in);

int main(){
    using namespace std;

    hls::stream<ap_uint<1> > sensor_in;
    int count_val;
    ap_uint<1> sensor_out, sensor_out_en;
    int return_val;

    for(int i=0; i<75600; i++){ // 756 us wait
        sensor_in << (ap_uint<1>)0;
    }
    for(int i=0; i<20000; i++){ // 200 usの間 sensor_in を 1 にする
        sensor_in << (ap_uint<1>)1;
    }
    for(int i=0; i<20000; i++){ // 1 usの間 sensor_in を 0 にする
        sensor_in << (ap_uint<1>)0;
    }

    return_val = ultrasonic_sensor_inf(count_val, sensor_out, sensor_out_en, sensor_in);

    if(return_val){
        printf("Error: return_val = %d\n");
        exit(1);
    }

    return(0);
}


C シミュレーションを行った。
Ultrasonic_senser_inf_8_161206.png

C コードの合成を行った。
Ultrasonic_senser_inf_9_161206.png

C/RTL協調シミュレーションを行った。96242 クロックかかった。
Ultrasonic_senser_inf_10_161206.png

C/RTL協調シミュレーションの波形を示す。
sensor_in_V_V を見ると予定の 200 us に対して 200.01 us の間 1 になっている。
Ultrasonic_senser_inf_11_161207.png

sensor_out_V は5.02 us の間 1 になって、sensor_out_en_V は 6.03 us の間 1 になっていた。これで問題ない。
Ultrasonic_senser_inf_12_161207.png

AXI4-Lite Slave のアドレスマップを示す。

//------------------------Address Info-------------------
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/COH)
//        bit 1  - ap_done (Read/COR)
//        bit 2  - ap_idle (Read)
//        bit 3  - ap_ready (Read)
//        bit 7  - auto_restart (Read/Write)
//        others - reserved
// 0x04 : Global Interrupt Enable Register
//        bit 0  - Global Interrupt Enable (Read/Write)
//        others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0  - Channel 0 (ap_done)
//        bit 1  - Channel 1 (ap_ready)
//        others - reserved
// 0x10 : Data signal of ap_return
//        bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of count_val
//        bit 31~0 - count_val[31:0] (Read)
// 0x1c : Control signal of count_val
//        bit 0  - count_val_ap_vld (Read/COR)
//        others - reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)


アドレスマップによると count_val は 0x18 番地だということがわかる。
もう一度、C/RTL協調シミュレーションの波形の終わりのほうを見てみよう。
Ultrasonic_senser_inf_13_161207.png

0x18 番地が Read され、0x4e1f という値であることがわかる。 0x4e1f は10進数で、19,999 なので、少し少ないが十分な精度であっている。

次には、IOBUF のIP を作ってVivado のIPI で接続しよう。
  1. 2016年12月06日 20:25 |
  2. Zybot
  3. | トラックバック:0
  4. | コメント:0

Zybot に超音波距離センサを搭載する2(Arduino でセンサをテストする)

Zybot に超音波距離センサを搭載する1(概要)”の続き。

パララックス社超音波距離センサモジュールで距離を計る(2)」のArduino を使ったテストをやってみた。

Arduino UNOの9番ピンから超音波距離センサモジュールのSIG に接続した。超音波距離センサの+5V とGND も接続した。
Ultrasonic_senser_inf_1_1611205.jpg

Ultrasonic_senser_inf_2_1611205.jpg

パララックス社超音波距離センサモジュールで距離を計る(2)」のスケッチを書いて、Arduino UNO にダウンロードして、起動した。
Ultrasonic_senser_inf_6_161205.png

シリアルコンソールに、距離が表示された。距離も大体合っているようだ。
Ultrasonic_senser_inf_5_161205.png

波形を見てみた。まずは、全体の波形を示す。
トリガーを打ってから、リスポンスは、約760 us くらいで出てくるようだ。
Ultrasonic_senser_inf_3_1611205.jpg

トリガーの幅は、8 us くらいだった。
Ultrasonic_senser_inf_4_1611205.jpg

(2016/12/06 : 追記)
パララックス社の超音波距離センサは今まで +5V 電源で使っていました。規格外ですが +3.3V でやってみたところ問題なく動作しました。+3.3V 電源はZYBOのPMOD から供給できるので、+3.3V 電源でやってみることにします。
  1. 2016年12月05日 20:37 |
  2. Zybot
  3. | トラックバック:0
  4. | コメント:0

Xilinx 社のマイクロプロセッサまとめ1(PicoBlaze, MicroBlaze MCS)

ハードウェア開発、CPUアーキテクチャ Advent Calendar 2016”の記事として書きます。
始めはVivado HLS について書こうと思ったのですが、マイクロプロセッサの話題が主というか?ほとんどマイクロプロセッサの話題のようなので、急遽ブログ記事を変更しました。

PicoBlaze
最初に一番小さいマイクロプロセッサから行きましょう。まだあるんだ。。。ということで、「PicoBlaze 8-ビット マイクロコントローラー」です。

デバイス ファミリ サポート: Zynq-7000 Virtex-7 Kintex-7 Artix-7 Spartan-6 Virtex-6 Virtex-5 Virtex-4 Virtex-II Pro Virtex-II Spartan-3AN Spartan-3A Spartan-3

Zynqもサポートされているんですね。。。知らなかった。とってもコンパクトな 8 ビット マイクロプロセッサです。
ブロック図です(UG129 - PicoBlaze 8-bit Embedded Microcontroller User Guide for Spartan-3, Spartan-6, Virtex-5, Virtex-6 and 7 Series FPGAs ( v2.1, 2835 KB ) [PDF] の8 ページの「Figure 1-1: PicoBlaze Embedded Microcontroller Block Diagram」を転載させていただきました)
Xilinx_Micon_1_161203.png

PicoBlaze フォーラムもありますよ。

PicoBlaze資料のページ

PicoBlaze のダウンロードページ

FPGAの部屋のブログのPicoBlazeの記事
スパルタン3EスターターキットのLCD表示回路まとめ」でLCDを表示するためにPicoBlazeを使用しました。
「スパルタン3Eスタータキットのロータリーエンコーダ2
Spratan3E Starter KitのDDR SDRAMコントローラ(プロジェクト)」 DDR SDRAMコントローラのシミュレーションのためにPicoBlaze を使ったんだったかな?

MicroBlaze MCS
MicroBlaze MCS もまだあったとは知らなかった。。。

資料
MicroBlaze Micro Controller System v3.0 LogiCORE IP Product Guide Vivado Design Suite PG116 October 5, 2016


MicroBlaze MCS はパイプライン3段固定のMicroBlaze で 32 ビットのRISC プロセッサです。
MicroBlaze Micro Controller System (MicroBlaze MCS) のブロック図をMicroBlaze Micro Controller System v3.0 LogiCORE IP Product Guide Vivado Design Suite PG116 October 5, 2016
の 5 ページ Figure 1-1: MicroBlaze Micro Controller System から引用します。
Xilinx_Micon_8_161203.png

次に示す IO モジュールがあります。

I/O Bus
Interrupt Controller using fast interrupt mode
UART
Fixed Interval Timers
Programmable Interval Timers
General Purpose Inputs
General Purpose Outputs


MicroBlaze と MicroBlaze MCS の違いは、MicroBlaze がフルスペックなのに対して、MicroBlaze MCS は固定された機能を使えるという違いがあります。(MicroBlaze マイクロ コントローラー システム (MCS)の表を参照ください)
以前はフルスペックのMicroBlaze が有償だったので使っていましたが、MicroBlaze が無償となった今となっては使いどころはあまりないと思われます。
ですが、7 シリーズも対応しているし、Vivado でも使えるようです。

Vivado のIP Integrator でも使えるので、Add IP してやってみましょう。

Vivado 2016.3 を起動して、IP Integrator のブロックデザインを開きます。

Add IP ボタンをクリックしてAdd IP します。Micro で検索するとMicroBlaze MCSが出てきます。これをダブルクリックして、ブロックデザインに入れてみましょう。
Xilinx_Micon_2_161203.png

すると、MicroBlaze MCS がインスタンスされました。まだ、Clk と Reset のみの状態です。
Xilinx_Micon_3_161203.png

MicroBlaze MCS をダブルクリックして設定してみましょう。
Xilinx_Micon_4_161203.png

MCS タブです。
Xilinx_Micon_5_161203.png

UART タブでUART をイネーブルしてみます。
Xilinx_Micon_6_161203.png

OK ボタンをクリックすると、MicroBlaze MCS にUART のポートが追加されているのが分かります。
Xilinx_Micon_7_161203.png

MicroBlaze MCSのソフトウェアを作るには、Eclipse ベースのSDK を使用します。

FPGAの部屋の「MicroBlaze MCS」のページです。
  1. 2016年12月04日 05:39 |
  2. FPGAのマイクロプロセッサ
  3. | トラックバック:0
  4. | コメント:0

SDSoC 2016.2 でラプラシアンフィルタをテスト3

SDSoC 2016.2 でラプラシアンフィルタをテスト2”の続き。

前回、SDSoC 2015.2 と同様に SDSoC 2016.2 でも 800 x 600 ピクセルの画像をラプラシアンフィルタ処理することはできなかった。それで、前回同様に、64 x 48 ピクセルでやってみることにした。

64 x 48 ピクセルの画像を指定した。例によって使用している 'A' の画像にした。
SDSoC_2016_2_25_161203.png

お気づきと思うが、すでにラプラシアンフィルタ処理の実装をビルドしてある。やはり小さいサイズであればビルドできた。

lap_filter2\SDRelease\sd_card フォルダの内容と temp.bmp('A'の画像)を MicroSD カードに書き込んだ。
SDSoC_2016_2_26_161203.png

Micro SD カードをZYBO に挿入してテストしてみた。

ZYBO 上でLinux が起動した。
mnt ディレクトリに移動して ./lap_filter2.elf を実行して、実行時間を見た。
SDSoC_2016_2_27_161203.png

最初の実行では、ハードウェアが 641 us に対して、ソフトウェアが 362 us となって 2 倍近くハードウェアの方が遅かった。しかしその後、ハードウェアのラプラシアンフィルタ処理時間はかなりばらついた。ソフトウェアの実行時間もハードウェアよりはばらつきが少ないがやはりばらついている。

ZYBO の電源をOFF して MicroSD カードを見ると、temp_lap.bmp が増えていた。
SDSoC_2016_2_28_161203.png

temp_lap.bmp を開いてみると、きちんとエッジの画像になっていた。
SDSoC_2016_2_29_161203.png

レポートを見てみよう。
lap_filter2\SDRelease\_sds\reports\data_motion.html を見てみよう。
SDSoC_2016_2_30_161203.png

cam_fb と lap_fb に AXIDMA_SG が使用されている。スキャッター・ギャザーDMA だ。

lap_filter2\SDRelease\_sds\reports\sds.rpt を貼っておく。

(c) Copyright 2012-2016 Xilinx, Inc. All Rights Reserved.
#-----------------------------------------------------------
# Tool version : sds++ 2016.2 SW Build on Jul 15 2016 19:20:29
# Start time : Fri Dec 02 04:17:56 +0900 2016
# Command line : sds++ -o lap_filter2.elf ./src/lap_filter_tb.o ./src/laplacian_filter2.o -dmclkid 1 -sds-pf zybo
# Log file : C:/Users/Masaaki/workspace/lap_filter2/SDRelease/_sds/reports/sds.log
# Journal file : C:/Users/Masaaki/workspace/lap_filter2/SDRelease/_sds/reports/sds.jou
# Report file : C:/Users/Masaaki/workspace/lap_filter2/SDRelease/_sds/reports/sds.rpt
#-----------------------------------------------------------

-------------------
Design Timing Check
-------------------

Partition 0
Vivado Log : C:/Users/Masaaki/workspace/lap_filter2/SDRelease/_sds/p0/ipi/vivado.log
Timing Summary : C:/Users/Masaaki/workspace/lap_filter2/SDRelease/_sds/p0/ipi/zybo.runs/impl_1/zybo_wrapper_timing_summary_routed.rpt

All user specified timing constraints are met.

Timing Summary Report

Timer Settings
--------------

Enable Multi Corner Analysis : Yes
Enable Pessimism Removal : Yes
Pessimism Removal Resolution : Nearest Common Node
Enable Input Delay Default Clock : No
Enable Preset / Clear Arcs : No
Disable Flight Delays : No
Ignore I/O Paths : No
Timing Early Launch at Borrowing Latches : false

Corner Analyze Analyze
Name Max Paths Min Paths
------ --------- ---------
Slow Yes Yes
Fast Yes Yes



check_timing report

Table of Contents
1. checking no_clock
2. checking constant_clock
3. checking pulse_width_clock
4. checking unconstrained_internal_endpoints
5. checking no_input_delay
6. checking no_output_delay
7. checking multiple_clock
8. checking generated_clocks
9. checking loops
10. checking partial_input_delay
11. checking partial_output_delay
12. checking latch_loops

1. checking no_clock
There are 0 register/latch pins with no clock.


2. checking constant_clock
There are 0 register/latch pins with constant_clock.


3. checking pulse_width_clock
There are 0 register/latch pins which need pulse_width check


4. checking unconstrained_internal_endpoints
There are 0 pins that are not constrained for maximum delay.

There are 0 pins that are not constrained for maximum delay due to constant clock.


5. checking no_input_delay
There are 0 input ports with no input delay specified.

There are 0 input ports with no input delay but user has a false path constraint.


6. checking no_output_delay
There are 0 ports with no output delay specified.

There are 0 ports with no output delay but user has a false path constraint

There are 0 ports with no output delay but with a timing clock defined on it or propagating through it


7. checking multiple_clock
There are 0 register/latch pins with multiple clocks.


8. checking generated_clocks
There are 0 generated clocks that are not connected to a clock source.


9. checking loops
There are 0 combinational loops in the design.


10. checking partial_input_delay
There are 0 input ports with partial input delay specified.


11. checking partial_output_delay
There are 0 ports with partial output delay specified.


12. checking latch_loops
There are 0 combinational latch loops in the design through latch input



Design Timing Summary
---------------------

WNS(ns) TNS(ns) TNS Failing Endpoints TNS Total Endpoints WHS(ns) THS(ns) THS Failing Endpoints THS Total Endpoints WPWS(ns) TPWS(ns) TPWS Failing Endpoints TPWS Total Endpoints
------- ------- --------------------- ------------------- ------- ------- --------------------- ------------------- -------- -------- ---------------------- --------------------
2.599 0.000 0 34698 0.036 0.000 0 34698 3.870 0.000 0 12722


All user specified timing constraints are met.


Clock Summary
-------------

Clock Waveform(ns) Period(ns) Frequency(MHz)
----- ------------ ---------- --------------
clk_fpga_0 {0.000 20.000} 40.000 25.000
clk_fpga_1 {0.000 5.000} 10.000 100.000
clk_fpga_2 {0.000 4.000} 8.000 125.000
clk_fpga_3 {0.000 10.000} 20.000 50.000


-------------------
Data Motion Network
-------------------

Data motion network report generated in C:/Users/Masaaki/workspace/lap_filter2/SDRelease/_sds/reports
HTML file : C:/Users/Masaaki/workspace/lap_filter2/SDRelease/_sds/reports/data_motion.html

-------------------
Design Utilization
-------------------

Partition 0
Utilization Summary : C:/Users/Masaaki/workspace/lap_filter2/SDRelease/_sds/p0/ipi/zybo.runs/impl_1/zybo_wrapper_utilization_placed.rpt

Utilization Design Information

Table of Contents
-----------------
1. Slice Logic
1.1 Summary of Registers by Type
2. Slice Logic Distribution
3. Memory
4. DSP
5. IO and GT Specific
6. Clocking
7. Specific Feature
8. Primitives
9. Black Boxes
10. Instantiated Netlists

1. Slice Logic
--------------

+----------------------------+-------+-------+-----------+-------+
| Site Type | Used | Fixed | Available | Util% |
+----------------------------+-------+-------+-----------+-------+
| Slice LUTs | 7513 | 0 | 17600 | 42.69 |
| LUT as Logic | 6799 | 0 | 17600 | 38.63 |
| LUT as Memory | 714 | 0 | 6000 | 11.90 |
| LUT as Distributed RAM | 456 | 0 | | |
| LUT as Shift Register | 258 | 0 | | |
| Slice Registers | 11408 | 0 | 35200 | 32.41 |
| Register as Flip Flop | 11408 | 0 | 35200 | 32.41 |
| Register as Latch | 0 | 0 | 35200 | 0.00 |
| F7 Muxes | 74 | 0 | 8800 | 0.84 |
| F8 Muxes | 1 | 0 | 4400 | 0.02 |
+----------------------------+-------+-------+-----------+-------+


1.1 Summary of Registers by Type
--------------------------------

+-------+--------------+-------------+--------------+
| Total | Clock Enable | Synchronous | Asynchronous |
+-------+--------------+-------------+--------------+
| 0 | _ | - | - |
| 0 | _ | - | Set |
| 0 | _ | - | Reset |
| 0 | _ | Set | - |
| 0 | _ | Reset | - |
| 0 | Yes | - | - |
| 342 | Yes | - | Set |
| 628 | Yes | - | Reset |
| 222 | Yes | Set | - |
| 10216 | Yes | Reset | - |
+-------+--------------+-------------+--------------+


2. Slice Logic Distribution
---------------------------

+------------------------------------------+------+-------+-----------+-------+
| Site Type | Used | Fixed | Available | Util% |
+------------------------------------------+------+-------+-----------+-------+
| Slice | 3398 | 0 | 4400 | 77.23 |
| SLICEL | 2235 | 0 | | |
| SLICEM | 1163 | 0 | | |
| LUT as Logic | 6799 | 0 | 17600 | 38.63 |
| using O5 output only | 1 | | | |
| using O6 output only | 5271 | | | |
| using O5 and O6 | 1527 | | | |
| LUT as Memory | 714 | 0 | 6000 | 11.90 |
| LUT as Distributed RAM | 456 | 0 | | |
| using O5 output only | 0 | | | |
| using O6 output only | 52 | | | |
| using O5 and O6 | 404 | | | |
| LUT as Shift Register | 258 | 0 | | |
| using O5 output only | 0 | | | |
| using O6 output only | 117 | | | |
| using O5 and O6 | 141 | | | |
| LUT Flip Flop Pairs | 3966 | 0 | 17600 | 22.53 |
| fully used LUT-FF pairs | 953 | | | |
| LUT-FF pairs with one unused LUT | 2819 | | | |
| LUT-FF pairs with one unused Flip Flop | 2684 | | | |
| Unique Control Sets | 599 | | | |
+------------------------------------------+------+-------+-----------+-------+
* Note: Review the Control Sets Report for more information regarding control sets.


3. Memory
---------

+-------------------+------+-------+-----------+-------+
| Site Type | Used | Fixed | Available | Util% |
+-------------------+------+-------+-----------+-------+
| Block RAM Tile | 21 | 0 | 60 | 35.00 |
| RAMB36/FIFO* | 18 | 0 | 60 | 30.00 |
| RAMB36E1 only | 18 | | | |
| RAMB18 | 6 | 0 | 120 | 5.00 |
| RAMB18E1 only | 6 | | | |
+-------------------+------+-------+-----------+-------+
* Note: Each Block RAM Tile only has one FIFO logic available and therefore can accommodate only one FIFO36E1 or one FIFO18E1. However, if a FIFO18E1 occupies a Block RAM Tile, that tile can still accommodate a RAMB18E1


4. DSP
------

+----------------+------+-------+-----------+-------+
| Site Type | Used | Fixed | Available | Util% |
+----------------+------+-------+-----------+-------+
| DSPs | 10 | 0 | 80 | 12.50 |
| DSP48E1 only | 10 | | | |
+----------------+------+-------+-----------+-------+


5. IO and GT Specific
---------------------

+-----------------------------+------+-------+-----------+--------+
| Site Type | Used | Fixed | Available | Util% |
+-----------------------------+------+-------+-----------+--------+
| Bonded IOB | 0 | 0 | 100 | 0.00 |
| Bonded IPADs | 0 | 0 | 2 | 0.00 |
| Bonded IOPADs | 130 | 130 | 130 | 100.00 |
| PHY_CONTROL | 0 | 0 | 2 | 0.00 |
| PHASER_REF | 0 | 0 | 2 | 0.00 |
| OUT_FIFO | 0 | 0 | 8 | 0.00 |
| IN_FIFO | 0 | 0 | 8 | 0.00 |
| IDELAYCTRL | 0 | 0 | 2 | 0.00 |
| IBUFDS | 0 | 0 | 96 | 0.00 |
| PHASER_OUT/PHASER_OUT_PHY | 0 | 0 | 8 | 0.00 |
| PHASER_IN/PHASER_IN_PHY | 0 | 0 | 8 | 0.00 |
| IDELAYE2/IDELAYE2_FINEDELAY | 0 | 0 | 100 | 0.00 |
| ILOGIC | 0 | 0 | 100 | 0.00 |
| OLOGIC | 0 | 0 | 100 | 0.00 |
+-----------------------------+------+-------+-----------+--------+


6. Clocking
-----------

+------------+------+-------+-----------+-------+
| Site Type | Used | Fixed | Available | Util% |
+------------+------+-------+-----------+-------+
| BUFGCTRL | 1 | 0 | 32 | 3.13 |
| BUFIO | 0 | 0 | 8 | 0.00 |
| MMCME2_ADV | 0 | 0 | 2 | 0.00 |
| PLLE2_ADV | 0 | 0 | 2 | 0.00 |
| BUFMRCE | 0 | 0 | 4 | 0.00 |
| BUFHCE | 0 | 0 | 48 | 0.00 |
| BUFR | 0 | 0 | 8 | 0.00 |
+------------+------+-------+-----------+-------+


7. Specific Feature
-------------------

+-------------+------+-------+-----------+-------+
| Site Type | Used | Fixed | Available | Util% |
+-------------+------+-------+-----------+-------+
| BSCANE2 | 0 | 0 | 4 | 0.00 |
| CAPTUREE2 | 0 | 0 | 1 | 0.00 |
| DNA_PORT | 0 | 0 | 1 | 0.00 |
| EFUSE_USR | 0 | 0 | 1 | 0.00 |
| FRAME_ECCE2 | 0 | 0 | 1 | 0.00 |
| ICAPE2 | 0 | 0 | 2 | 0.00 |
| STARTUPE2 | 0 | 0 | 1 | 0.00 |
| XADC | 0 | 0 | 1 | 0.00 |
+-------------+------+-------+-----------+-------+


8. Primitives
-------------

+----------+-------+----------------------+
| Ref Name | Used | Functional Category |
+----------+-------+----------------------+
| FDRE | 10216 | Flop & Latch |
| LUT3 | 2303 | LUT |
| LUT6 | 1835 | LUT |
| LUT4 | 1434 | LUT |
| LUT5 | 1219 | LUT |
| LUT2 | 1171 | LUT |
| FDCE | 628 | Flop & Latch |
| RAMD32 | 610 | Distributed Memory |
| LUT1 | 364 | LUT |
| FDPE | 342 | Flop & Latch |
| CARRY4 | 339 | CarryLogic |
| SRL16E | 338 | Distributed Memory |
| FDSE | 222 | Flop & Latch |
| RAMS32 | 202 | Distributed Memory |
| BIBUF | 130 | IO |
| MUXF7 | 74 | MuxFx |
| SRLC32E | 61 | Distributed Memory |
| RAMD64E | 48 | Distributed Memory |
| RAMB36E1 | 18 | Block Memory |
| DSP48E1 | 10 | Block Arithmetic |
| RAMB18E1 | 6 | Block Memory |
| PS7 | 1 | Specialized Resource |
| MUXF8 | 1 | MuxFx |
| BUFG | 1 | Clock |
+----------+-------+----------------------+


9. Black Boxes
--------------

+----------+------+
| Ref Name | Used |
+----------+------+


10. Instantiated Netlists
-------------------------

+-----------------------------+------+
| Ref Name | Used |
+-----------------------------+------+
| zybo_xlconcat_0 | 1 |
| zybo_xbar_1 | 1 |
| zybo_xbar_0 | 1 |
| zybo_s02_regslice_0 | 1 |
| zybo_s02_data_fifo_0 | 1 |
| zybo_s01_regslice_0 | 1 |
| zybo_s01_data_fifo_0 | 1 |
| zybo_s00_regslice_1 | 1 |
| zybo_s00_regslice_0 | 1 |
| zybo_s00_data_fifo_0 | 1 |
| zybo_ps7_0 | 1 |
| zybo_proc_sys_reset_1_0 | 1 |
| zybo_m01_regslice_0 | 1 |
| zybo_m00_regslice_1 | 1 |
| zybo_m00_regslice_0 | 1 |
| zybo_m00_data_fifo_0 | 1 |
| zybo_lap_filter_axim_0_if_0 | 1 |
| zybo_lap_filter_axim_0_0 | 1 |
| zybo_dm_0_0 | 1 |
| zybo_axis_rtr_dm_0_0 | 1 |
| zybo_auto_us_df_0 | 1 |
| zybo_auto_pc_1 | 1 |
| zybo_auto_pc_0 | 1 |
| zybo_acp_axcache_0xE_0 | 1 |
| zybo_acp_axcache_0x2_0 | 1 |
+-----------------------------+------+

  1. 2016年12月03日 05:41 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

I2Cリピーター付きカメラ・インターフェース基板2が来ました

MT9D111をコードを伸ばしてステレオ・カメラにする6(I2CリピータIO付きカメラ・インターフェース基板が届いた)”で作ったI2Cリピーター付きカメラ・インターフェース基板ですが、VCC と GND のピンを間違うという大失態を演じてしまいました。orz...

というわけで、新しいI2Cリピーター付きカメラ・インターフェース基板2を11月18日に頼んで、今日届きました。レジストの色は同じ値段で選べるようになったので、黄色にしました。
早く届くように配送に DHL を指定したんですが、製造に2週間くらいかかってしまったので、DHLでは4日くらいで届いたのですが、遅くなってしまいました。

来た基板を見たところ、GNDラインが細いと思って盛ってしまったので、下の写真の→のところがVCC と近くなってしまいました。仕方がないので、ショート気味だったら、カッターを使ってクリアランスを確保します。
でもDRCは問題なかったので、必要なクリアランスは確保できているのかもしれません?良く見えないので。。
kiban_161203.jpg

(2016/12/06 : 追記)
高解像度 顕微鏡デジタルマイクロスコープ で見たところパターンは問題ありませんでした。導通試験もOKでした。
Kiban_2_161206.jpg
  1. 2016年12月02日 20:29 |
  2. プリント基板作成
  3. | トラックバック:0
  4. | コメント:0

Zybot に超音波距離センサを搭載する1(概要)

2台の Zybot での隊列走行5(追従走行を試してみた)」で曲がりなりにも 2 台の Zybot で隊列走行ができるようになった。その際に前走車の走り方によっては隊列走行が崩れる時がよくある。そこで、カメラの画角から外れてしまっても、追従車は予測で走れるようにしたいのだが、何か物体があったらぶつかってしまう。そこで、ぶつからないように超音波距離センサをつけたいと思う。
実は、Zybot に取り付けようとして、秋月電子で、「パララックス社超音波距離センサーモジュール」を購入してある。
マニュアルはこちら”PING))) Ultrasonic Distance Sensor (#28015)
実は安い超音波距離センサも買ってある。「超音波距離センサー HC-SR04

検索してみると「超音波レンジファインダー PING)))™ #28015 」という日本語のマニュアルもあるようだ。

使い方はこの記事「パララックス社超音波距離センサモジュールで距離を計る(2)」を見るとよくわかる。

スケッチもあることだし、まずは Arduino でパララックス社超音波距離センサの動作確認をしてみようかな?
  1. 2016年12月02日 04:05 |
  2. Zybot
  3. | トラックバック:0
  4. | コメント:0
»