ひでみのアイデア帳 2020-08-07T21:42:29+09:00 urn:uuid:32c34578-c4da-8d90-5f18-1740239359ee image.ubからDeviceTreeの抽出 urn:uuid:4d26fdfe-8d55-2b2f-086c-ff53f60fdf93 image.ubからDeviceTreeの抽出

image.ubとはKernelやDevice Treeをまとめたu-bootのブートイメージです。

Xilinx系の評価プロジェクトでこれが提供されていることがあるのだが、ここからDeviceTreeを取り出したくなるときがある。

そのためのメモである。

image.ubを生成するにはmkimageを使用するが、抜き出しにはdumpimageを使用する。

まずはimage.ubがどのように構成されているか確認する。

$ dumpimage -l image.ub
FIT description: U-Boot fitImage for PetaLinux/4.14-xilinx-v2018.3+gitAUTOINC+eeab73d120/plnx-zynqmp
Created:         Tue May 26 22:38:33 2020
 Image 0 (kernel@1)
  Description:  Linux kernel
  Created:      Tue May 26 22:38:33 2020
  Type:         Kernel Image
  Compression:  gzip compressed
  Data Size:    7111615 Bytes = 6944.94 KiB = 6.78 MiB
  Architecture: AArch64
  OS:           Linux
  Load Address: 0x00080000
  Entry Point:  0x00080000
  Hash algo:    sha1
  Hash value:   a28aa4f3f6dc093f484e3d8f62383a7827a6ec49
 Image 1 (fdt@system-top.dtb)
  Description:  Flattened Device Tree blob
  Created:      Tue May 26 22:38:33 2020
  Type:         Flat Device Tree
  Compression:  uncompressed
  Data Size:    36434 Bytes = 35.58 KiB = 0.03 MiB
  Architecture: AArch64
  Hash algo:    sha1
  Hash value:   8100aa8e2a88a8e18696033cf27161d56b5b3ad1
 Default Configuration: 'conf@system-top.dtb'
 Configuration 0 (conf@system-top.dtb)
  Description:  1 Linux kernel, FDT blob
  Kernel:       kernel@1
  FDT:          fdt@system-top.dtb
  Hash algo:    sha1
  Hash value:   unavailable

つまり、imageが2個とconfigが1個入っていることになっている。

抜き出すのは2個目のimageで次のようにする。

$ dumpimage -T flat_dt -p 1 -o hoge.dtb image.ub

あとはdtcでテキストにしちゃえばいいだけ。

]]>
2020-07-26T00:01:56+09:00 ひでみ hidemi@sweetcafe/jp <h1>image.ubからDeviceTreeの抽出</h1> <p>image.ubとはKernelやDevice Treeをまとめたu-bootのブートイメージです。</p> <p>Xilinx系の評価プロジェクトでこれが提供されていることがあるのだが、ここからDeviceTreeを取り出したくなるときがある。</p> <p>そのためのメモである。</p> <p>image.ubを生成するにはmkimageを使用するが、抜き出しにはdumpimageを使用する。</p> <p>まずはimage.ubがどのように構成されているか確認する。</p> <pre><code class="txt">$ dumpimage -l image.ub FIT description: U-Boot fitImage for PetaLinux/4.14-xilinx-v2018.3+gitAUTOINC+eeab73d120/plnx-zynqmp Created: Tue May 26 22:38:33 2020 Image 0 (kernel@1) Description: Linux kernel Created: Tue May 26 22:38:33 2020 Type: Kernel Image Compression: gzip compressed Data Size: 7111615 Bytes = 6944.94 KiB = 6.78 MiB Architecture: AArch64 OS: Linux Load Address: 0x00080000 Entry Point: 0x00080000 Hash algo: sha1 Hash value: a28aa4f3f6dc093f484e3d8f62383a7827a6ec49 Image 1 (fdt@system-top.dtb) Description: Flattened Device Tree blob Created: Tue May 26 22:38:33 2020 Type: Flat Device Tree Compression: uncompressed Data Size: 36434 Bytes = 35.58 KiB = 0.03 MiB Architecture: AArch64 Hash algo: sha1 Hash value: 8100aa8e2a88a8e18696033cf27161d56b5b3ad1 Default Configuration: 'conf@system-top.dtb' Configuration 0 (conf@system-top.dtb) Description: 1 Linux kernel, FDT blob Kernel: kernel@1 FDT: fdt@system-top.dtb Hash algo: sha1 Hash value: unavailable</code></pre> <p>つまり、imageが2個とconfigが1個入っていることになっている。</p> <p>抜き出すのは2個目のimageで次のようにする。</p> <pre><code class="txt">$ dumpimage -T flat_dt -p 1 -o hoge.dtb image.ub</code></pre> <p>あとはdtcでテキストにしちゃえばいいだけ。</p>
VSCodeでDraw.ioを使う urn:uuid:4b36c3a5-5c13-89c9-35ba-8d22ed16696f VSCodeでDraw.ioを使う

Draw.ioとはdiagrams.netが提供しているMicrosoft VisioやInkscapeなどのツールと同等レベルのドローツールです。

筆者はよく使うドローツールです。

Web上でお絵描きできるツールとして有名ですがWebだけではなく、Windows、Mac、Linuxなどのネイティブアプリでも提供されています。

Web上ではファイルの保存先を直接、google driveやdropboxなどオンラインストレージを指定できるのでオンラインストレージでファイルを管理して使われている方も多いのではないかと思います。

Draw.ioで作成した絵に限らず、他のドローツールで作成した絵であってもその絵だけで資料が完成することはほぼありません。

何らかの文書とともに絵が存在して一つの資料としてまとまると思います。

このDraw.ioが非公式ながらVSCodeのExtensionとしてインストールすることができます。

インストール

インストール

ファイルオープン

ファイルの拡張子は.drawio.dio.drawio.svgとなっているとEXPLORERでファイルを選択時すると自動的にDraw.ioで開きます。

ファイルオープン

ここでは、作成済みのファイルをオープンしていますがファイルを新規作成するとブランクなキャンパスで開くことができます。

キャンパス色の変更

ファイルオープンで見えるキャンパスはwebで作成したファイルを持ってきたものです。

Webでは白背景のキャンパスで作成したものでした。

VScodeは黒背景になっているので文字が消えてしまったいるように見えます。

筆者はキャンパスは白背景で良いのでVScodeのDraw.ioのThemeを変更します。

VScodeでFilePreferenceHediet > Vscode-drawio:Themeを開いて、atlasに変更します。

Themeの変更

キャンパスを白背景にすると次のようになります。

キャンパスを白背景

これでWebと同じキャンパスで描けるようになります。

Webで作成

WebでDraw.ioを使うにはdiagrams.netに直接アクセスするか、google driveであれば新規その他diagrams.netで作成することができます。

Webで作成

google driveからVSCodeへ

今までにgoogle driveなどで作成した絵はダウンロードして使うことができます。

google driveで保存されるファイルは.drawioですがfileexportXMLでXMLファイルとしてダウンロードします。

Export

ダウンロードすると拡張子が.xmlになるので.drawioまたは.dioに変換するとVSCodeでもそのまま読み込むことができます。

あとがき

筆者としてはドキュメントとDraw.ioで作成した絵に限らずドキュメントに掲載する元ファイルは一元管理したい思いがあります。

今まではgoogle driveでDraw.ioの絵を描いて、PNGでダウンロードしてMarkdownのドキュメントに入れてということをして、ドキュメントと絵を2つの場所で管理していましたがVScodeでDraw.ioができるようになってドキュメントと絵を一元管理して、githubに入れることができるようなりました。

VScodeは結構便利です。

なんでもかんでもVScodeでというのもあとあと危険な可能性もあるのですが今のところ、いい感じなので当分はこのまま使用していきます。

]]>
2020-07-20T11:38:24+09:00 ひでみ hidemi@sweetcafe/jp <h1>VSCodeでDraw.ioを使う</h1> <p>Draw.ioとはdiagrams.netが提供しているMicrosoft VisioやInkscapeなどのツールと同等レベルのドローツールです。</p> <p>筆者はよく使うドローツールです。</p> <p>Web上でお絵描きできるツールとして有名ですがWebだけではなく、Windows、Mac、Linuxなどのネイティブアプリでも提供されています。</p> <p>Web上ではファイルの保存先を直接、google driveやdropboxなどオンラインストレージを指定できるのでオンラインストレージでファイルを管理して使われている方も多いのではないかと思います。</p> <p>Draw.ioで作成した絵に限らず、他のドローツールで作成した絵であってもその絵だけで資料が完成することはほぼありません。</p> <p>何らかの文書とともに絵が存在して一つの資料としてまとまると思います。</p> <p>このDraw.ioが非公式ながらVSCodeのExtensionとしてインストールすることができます。</p> <h2>インストール</h2> <p><img src="./files/20200720-01.png" alt="インストール" /></p> <h2>ファイルオープン</h2> <p>ファイルの拡張子は<code>.drawio</code>、<code>.dio</code>、<code>.drawio.svg</code>となっているとEXPLORERでファイルを選択時すると自動的にDraw.ioで開きます。</p> <p><img src="./files/20200720-02.png" alt="ファイルオープン" /></p> <p>ここでは、作成済みのファイルをオープンしていますがファイルを新規作成するとブランクなキャンパスで開くことができます。</p> <h2>キャンパス色の変更</h2> <p>ファイルオープンで見えるキャンパスはwebで作成したファイルを持ってきたものです。</p> <p>Webでは白背景のキャンパスで作成したものでした。</p> <p>VScodeは黒背景になっているので文字が消えてしまったいるように見えます。</p> <p>筆者はキャンパスは白背景で良いのでVScodeのDraw.ioのThemeを変更します。</p> <p>VScodeで<code>File</code>→<code>Preference</code>→<code>Hediet &gt; Vscode-drawio:Theme</code>を開いて、<code>atlas</code>に変更します。</p> <p><img src="./files/20200720-03.png" alt="Themeの変更" /></p> <p>キャンパスを白背景にすると次のようになります。</p> <p><img src="./files/20200720-04.png" alt="キャンパスを白背景" /></p> <p>これでWebと同じキャンパスで描けるようになります。</p> <h2>Webで作成</h2> <p>WebでDraw.ioを使うにはdiagrams.netに直接アクセスするか、google driveであれば<code>新規</code>→<code>その他</code>→<code>diagrams.net</code>で作成することができます。</p> <p><img src="./files/20200720-05.png" alt="Webで作成" /></p> <h2>google driveからVSCodeへ</h2> <p>今までにgoogle driveなどで作成した絵はダウンロードして使うことができます。</p> <p>google driveで保存されるファイルは<code>.drawio</code>ですが<code>file</code>→<code>export</code>→<code>XML</code>でXMLファイルとしてダウンロードします。</p> <p><img src="./files/20200720-06.png" alt="Export" /></p> <p>ダウンロードすると拡張子が<code>.xml</code>になるので<code>.drawio</code>または<code>.dio</code>に変換するとVSCodeでもそのまま読み込むことができます。</p> <h2>あとがき</h2> <p>筆者としてはドキュメントとDraw.ioで作成した絵に限らずドキュメントに掲載する元ファイルは一元管理したい思いがあります。</p> <p>今まではgoogle driveでDraw.ioの絵を描いて、PNGでダウンロードしてMarkdownのドキュメントに入れてということをして、ドキュメントと絵を2つの場所で管理していましたがVScodeでDraw.ioができるようになってドキュメントと絵を一元管理して、githubに入れることができるようなりました。</p> <p>VScodeは結構便利です。</p> <p>なんでもかんでもVScodeでというのもあとあと危険な可能性もあるのですが今のところ、いい感じなので当分はこのまま使用していきます。</p>
同期/非同期リセットでの生成回路の違い(5) urn:uuid:e7c4db5d-1ddd-4c63-8939-e257cc7a4e9a 同期/非同期リセットでの生成回路の違い(5)

結局、STAで問題なければよいのでどの記述でもいいわけなんだけど、他にいくつか試してみた。

信号名をRSTでないケース

ケース2と同じ記述でRST_NからRSTを削除したものです。

`default_nettype none
`timescale 1ns/1ps

module fftest5
(
    input wire DINX,
    input wire CLK,

    input wire DIN0,
    input wire DIN1,
    input wire DIN2,
    input wire DIN3,
    input wire DIN4,
    input wire DIN5,
    input wire DIN6,

    output reg DOUT
);

reg CLK_DINX;

always @(posedge CLK) begin
    CLK_DINX <= DINX;
end

always @(posedge CLK) begin
    if(!CLK_DINX) begin
        DOUT <= 0;
    end else begin
        DOUT <= DIN0 | (DIN1 & DIN2 & DIN3 & DIN4 & DIN5 & DIN6);
    end
end

endmodule

`default_nettype wire

結果はケース2と同じになりました。

0への初期化はリセットと認識されるんですかね?

三項演算子にしたケース

RST名前もなしに三項演算子で0に初期化するケースです。

`default_nettype none
`timescale 1ns/1ps

module fftest7
(
    input wire DINX,
    input wire CLK,

    input wire DIN0,
    input wire DIN1,
    input wire DIN2,
    input wire DIN3,
    input wire DIN4,
    input wire DIN5,
    input wire DIN6,

    output reg DOUT
);

reg CLK_DINX;

always @(posedge CLK) begin
    CLK_DINX <= DINX;
end

always @(posedge CLK) begin
    DOUT <= (!CLK_DINX)?0:(DIN0 | (DIN1 & DIN2 & DIN3 & DIN4 & DIN5 & DIN6));
end

endmodule

`default_nettype wire

この場合もケース2と同じ結果になった。

0への初期化はRSTとして認識するんですね。

論理に組み込んだケース

初期化するというよりかいネーブル信号に近い形にしたケースです。

`default_nettype none
`timescale 1ns/1ps

module fftest6
(
    input wire DINX,
    input wire CLK,

    input wire DIN0,
    input wire DIN1,
    input wire DIN2,
    input wire DIN3,
    input wire DIN4,
    input wire DIN5,
    input wire DIN6,

    output reg DOUT
);

reg CLK_DINX;

always @(posedge CLK) begin
    CLK_DINX <= DINX;
end

always @(posedge CLK) begin
    DOUT <= CLK_DINX & (DIN0 | (DIN1 & DIN2 & DIN3 & DIN4 & DIN5 & DIN6));
end

endmodule

`default_nettype wire

この場合は次のようになりました。

ケース2に比べてLUTが1個減り、つぎの構成になりました。

  • DINXのFF
  • DOUTのFF
  • (DIN1 & DIN2 & DIN3 & DIN4 & DIN5 & DIN6)のLUT
  • CLK_DINX & (DIN0 | 上記の信号)のLUT

だから、なんなのさぁと言われても何もないんですけどね。

]]>
2020-07-03T00:00:00+09:00 ひでみ hidemi@sweetcafe/jp <h1>同期/非同期リセットでの生成回路の違い(5)</h1> <p>結局、STAで問題なければよいのでどの記述でもいいわけなんだけど、他にいくつか試してみた。</p> <h2>信号名をRSTでないケース</h2> <p>ケース2と同じ記述で<code>RST_N</code>から<code>RST</code>を削除したものです。</p> <pre><code class="txt">`default_nettype none `timescale 1ns/1ps module fftest5 ( input wire DINX, input wire CLK, input wire DIN0, input wire DIN1, input wire DIN2, input wire DIN3, input wire DIN4, input wire DIN5, input wire DIN6, output reg DOUT ); reg CLK_DINX; always @(posedge CLK) begin CLK_DINX &lt;= DINX; end always @(posedge CLK) begin if(!CLK_DINX) begin DOUT &lt;= 0; end else begin DOUT &lt;= DIN0 | (DIN1 &amp; DIN2 &amp; DIN3 &amp; DIN4 &amp; DIN5 &amp; DIN6); end end endmodule `default_nettype wire</code></pre> <p>結果はケース2と同じになりました。</p> <p><code>0</code>への初期化はリセットと認識されるんですかね?</p> <h2>三項演算子にしたケース</h2> <p><code>RST</code>名前もなしに三項演算子で<code>0</code>に初期化するケースです。</p> <pre><code class="txt">`default_nettype none `timescale 1ns/1ps module fftest7 ( input wire DINX, input wire CLK, input wire DIN0, input wire DIN1, input wire DIN2, input wire DIN3, input wire DIN4, input wire DIN5, input wire DIN6, output reg DOUT ); reg CLK_DINX; always @(posedge CLK) begin CLK_DINX &lt;= DINX; end always @(posedge CLK) begin DOUT &lt;= (!CLK_DINX)?0:(DIN0 | (DIN1 &amp; DIN2 &amp; DIN3 &amp; DIN4 &amp; DIN5 &amp; DIN6)); end endmodule `default_nettype wire</code></pre> <p>この場合もケース2と同じ結果になった。</p> <p><code>0</code>への初期化は<code>RST</code>として認識するんですね。</p> <h2>論理に組み込んだケース</h2> <p>初期化するというよりかいネーブル信号に近い形にしたケースです。</p> <pre><code class="txt">`default_nettype none `timescale 1ns/1ps module fftest6 ( input wire DINX, input wire CLK, input wire DIN0, input wire DIN1, input wire DIN2, input wire DIN3, input wire DIN4, input wire DIN5, input wire DIN6, output reg DOUT ); reg CLK_DINX; always @(posedge CLK) begin CLK_DINX &lt;= DINX; end always @(posedge CLK) begin DOUT &lt;= CLK_DINX &amp; (DIN0 | (DIN1 &amp; DIN2 &amp; DIN3 &amp; DIN4 &amp; DIN5 &amp; DIN6)); end endmodule `default_nettype wire</code></pre> <p>この場合は次のようになりました。</p> <p><img src="./files/20200628_fftest07-01.png" alt="" /></p> <p>ケース2に比べてLUTが1個減り、つぎの構成になりました。</p> <ul> <li>DINXのFF</li> <li>DOUTのFF</li> <li>(DIN1 &amp; DIN2 &amp; DIN3 &amp; DIN4 &amp; DIN5 &amp; DIN6)のLUT</li> <li>CLK_DINX &amp; (DIN0 | 上記の信号)のLUT</li> </ul> <p>だから、なんなのさぁと言われても何もないんですけどね。</p>
同期/非同期リセットでの生成回路の違い(4) urn:uuid:7430c433-c1cb-c41b-af6d-eae2af0e2dd4 同期/非同期リセットでの生成回路の違い(4)

「同期/非同期リセットでの生成回路の違い(1)」の合成結果でつぎのようにでていました。

ケース0 ケース1 ケース2 ケース3 ケース4
同期/非同期 なし 非同期 同期 同期 非同期
LUT 2 3 3 3 3
FF 1 1 2 1 2
IO 9 10 10 10 10
BUFG 1 1 1 1 1

ケース3は同期リセット、ケース4は非同期リセットを想定して記述したものでしたが上記の結果からもケース3にはリセットのFFはなく、ケース4は明示的にFFを置いているのでリセットのFFが存在します。

ケース3は次のように構成されてほしかったのです。

ケース3の場合、記述は同期リセットのつもりなのに非同期リセットなのでRecovery TimeとRemoval Timeを考慮する必要があります。

同期リセットで表現したつもりが合成するとRecovery TimeとRemoval Timeが考慮され、動作周波数が低い合成結果か、または、できないかが発生するかもしれません。

ケース4は同期リセットのつもりだけど記述が非同期リセットっぽくなっているが同期リセットで合成されたのはある意味、棚から牡丹餅なのかもしれません。

太古の昔の言い伝えは今、どうなっているか確認するつもりでしたがもう言い伝えは今の時代には通用しなく、新しい問題が発生しているということがわかりました。

XilinxのツールはRSTの名称がついているとリセット信号として通常の信号とは違う扱いにするようです。

ただ、配置配線もリセットにFFがあるので同期リセットっぽい、FFが無いので非同期リセットっぽいのはCellの設定を見ても判断を付けにくい。

ただ、これらの状況から言えるのはケース2やケース4のようにリセットはFFで叩いてから使うのが良いだろう。

そして、ツールを信用するしかない・・・

BUFGが余っているなら次のようにRSTを2段FFでメタス回避してBUFGを使用して各FFをリセットするのが良いだろう。

]]>
2020-07-02T00:00:00+09:00 ひでみ hidemi@sweetcafe/jp <h1>同期/非同期リセットでの生成回路の違い(4)</h1> <p>「同期/非同期リセットでの生成回路の違い(1)」の合成結果でつぎのようにでていました。</p> <table> <thead> <tr> <th></th> <th style="text-align: right;">ケース0</th> <th style="text-align: right;">ケース1</th> <th style="text-align: right;">ケース2</th> <th style="text-align: right;">ケース3</th> <th style="text-align: right;">ケース4</th> </tr> </thead> <tbody> <tr> <td>同期/非同期</td> <td style="text-align: right;">なし</td> <td style="text-align: right;">非同期</td> <td style="text-align: right;">同期</td> <td style="text-align: right;">同期</td> <td style="text-align: right;">非同期</td> </tr> <tr> <td>LUT</td> <td style="text-align: right;">2</td> <td style="text-align: right;">3</td> <td style="text-align: right;">3</td> <td style="text-align: right;">3</td> <td style="text-align: right;">3</td> </tr> <tr> <td>FF</td> <td style="text-align: right;">1</td> <td style="text-align: right;">1</td> <td style="text-align: right;">2</td> <td style="text-align: right;">1</td> <td style="text-align: right;">2</td> </tr> <tr> <td>IO</td> <td style="text-align: right;">9</td> <td style="text-align: right;">10</td> <td style="text-align: right;">10</td> <td style="text-align: right;">10</td> <td style="text-align: right;">10</td> </tr> <tr> <td>BUFG</td> <td style="text-align: right;">1</td> <td style="text-align: right;">1</td> <td style="text-align: right;">1</td> <td style="text-align: right;">1</td> <td style="text-align: right;">1</td> </tr> </tbody> </table> <p>ケース3は同期リセット、ケース4は非同期リセットを想定して記述したものでしたが上記の結果からもケース3にはリセットのFFはなく、ケース4は明示的にFFを置いているのでリセットのFFが存在します。</p> <p>ケース3は次のように構成されてほしかったのです。</p> <p><img src="./files/20200627-DFF2.png" alt="" /></p> <p>ケース3の場合、記述は同期リセットのつもりなのに非同期リセットなのでRecovery TimeとRemoval Timeを考慮する必要があります。</p> <p>同期リセットで表現したつもりが合成するとRecovery TimeとRemoval Timeが考慮され、動作周波数が低い合成結果か、または、できないかが発生するかもしれません。</p> <p>ケース4は同期リセットのつもりだけど記述が非同期リセットっぽくなっているが同期リセットで合成されたのはある意味、棚から牡丹餅なのかもしれません。</p> <p>太古の昔の言い伝えは今、どうなっているか確認するつもりでしたがもう言い伝えは今の時代には通用しなく、新しい問題が発生しているということがわかりました。</p> <p>Xilinxのツールは<code>RST</code>の名称がついているとリセット信号として通常の信号とは違う扱いにするようです。</p> <p>ただ、配置配線もリセットにFFがあるので同期リセットっぽい、FFが無いので非同期リセットっぽいのはCellの設定を見ても判断を付けにくい。</p> <p>ただ、これらの状況から言えるのはケース2やケース4のようにリセットはFFで叩いてから使うのが良いだろう。</p> <p>そして、ツールを信用するしかない・・・</p> <p>BUFGが余っているなら次のように<code>RST</code>を2段FFでメタス回避してBUFGを使用して各FFをリセットするのが良いだろう。</p> <p><img src="./files/20200627-DFF3.png" alt="" /></p>
同期/非同期リセットでの生成回路の違い(3) urn:uuid:8d8382a2-d6bd-084f-266d-b592188ce0cb 同期/非同期リセットでの生成回路の違い(3)

次に実際の合成結果を配置の観点から見てみます

ケース0

ケース0の場合、リセットがないので綺麗に1つのCLKで2つのLUTが使われました。

ケース1

ケース1の場合は次のように配置されました。

まずは全体は2つのCLBに別れました。

下側が6つのANDのLUT、上側がリセットとORのLUTです。

ケース2

ケース2も2つのCLBに配置されましたがケース1のように離れた場所ではなく近接のCLBで配置されました。

ケース3

ケース3はケース1と同じように配置されました。

ケース4

ケース4はケース2と同じように配置されました。

よくみると

配置結果を見てみると、ケース3は非同期リセットでケース4は同期リセットになっていました。

]]>
2020-07-01T00:00:00+09:00 ひでみ hidemi@sweetcafe/jp <h1>同期/非同期リセットでの生成回路の違い(3)</h1> <p>次に実際の合成結果を配置の観点から見てみます</p> <h2>ケース0</h2> <p>ケース0の場合、リセットがないので綺麗に1つのCLKで2つのLUTが使われました。</p> <p><img src="./files/fftest0-0.png" alt="" /></p> <h2>ケース1</h2> <p>ケース1の場合は次のように配置されました。</p> <p>まずは全体は2つのCLBに別れました。</p> <p>下側が6つのANDのLUT、上側がリセットとORのLUTです。</p> <p><img src="./files/fftest1-0.png" alt="" /> <img src="./files/fftest1-1.png" alt="" /> <img src="./files/fftest1-2.png" alt="" /></p> <h2>ケース2</h2> <p>ケース2も2つのCLBに配置されましたがケース1のように離れた場所ではなく近接のCLBで配置されました。</p> <p><img src="./files/fftest2-0.png" alt="" /> <img src="./files/fftest2-1.png" alt="" /> <img src="./files/fftest2-2.png" alt="" /></p> <h2>ケース3</h2> <p>ケース3はケース1と同じように配置されました。</p> <p><img src="./files/fftest3-0.png" alt="" /> <img src="./files/fftest3-1.png" alt="" /> <img src="./files/fftest3-2.png" alt="" /></p> <h2>ケース4</h2> <p>ケース4はケース2と同じように配置されました。</p> <p><img src="./files/fftest4-0.png" alt="" /> <img src="./files/fftest4-1.png" alt="" /> <img src="./files/fftest4-2.png" alt="" /></p> <h2>よくみると</h2> <p>配置結果を見てみると、ケース3は非同期リセットでケース4は同期リセットになっていました。</p>