01signal.com

Vivadoの block design ファイルの比較

序章

Vivado プロジェクト内の block design は、ファイル名に .bd 接尾辞が付いているファイル ( vivado_system.bdなど) で表されます。このファイルには、 block design に関するすべての情報がテキスト形式で人間が判読できる形式で含まれています。 Vivadoの古いバージョンでは、このファイルは XML 形式で書き込まれていました。現在、 JSON 形式は block designを表すために使用されています。

テキスト形式のおかげで、テキスト比較用のよく知られたツール (diff および同様のグラフィカル ツール) を使用して 2 つの block design ファイルを比較することができます。これにより、 block designに加えられた変更を追跡できます。

ただし、 JSON 形式には、テキスト ファイルの比較に関して重大な欠点があります。 objectsの定義では、 properties とその値を任意の順序でリストできます。したがって、 diff などのツールは、2 つの JSON ファイルにまったく同じ情報が含まれている場合でも、テキストの内容が大きく異なることを示すことができます。

残念ながら、 Vivado によって生成される block design ファイルの一部には、この問題が発生します。その結果、2 つの .bd ファイルをテキストで比較すると、情報の順序が一貫していないために、誤解を招く多くの相違点が示されます。

JSON ファイルの正規化

テキスト ファイルのランダムな順序に対する自然な解決策は、このファイルを標準形式にすることです。このような正規化を実行する方法についてはRFC 8785に厳密な定義がありますが、2 つのファイルを比較する目的でその標準に従う必要はありません。ランダムな並べ替えを避けるだけで十分です。

簡単な解決策は、オブジェクトの properties を propertiesの名前に従ってアルファベット順に並べ替えることです。これにより、 JSON ファイル内の情報の一貫した表現が保証されます。ただし、この方法で情報を並べ替えることには欠点があります。 properties は通常、ファイルが読みやすい順序でリストされています。 重要 properties は通常、ファイルの最初に置かれ、 properties はその意味に従ってグループ化されます。したがって、 JSON ファイルを正規形式で読み取るのは少し難しくなります。

Perl script

JSON Perl moduleのおかげで、 JSON ファイルの正規化を実行する Perl script を簡単に作成できます。

#!/usr/bin/perl
use warnings;
use strict;

use JSON;

local $/; # Slurp mode

my $json = JSON->new->allow_nonref->space_after->indent->canonical;

my $in = <>;

my $h = $json->decode($in);
my $out = $json->encode($h);

print $out;

この script の使い方はこんな感じです。

$ ./jsonize.pl vivado_system.bd > canonicalized.bd

block designsを比較するには、2 つの正規化された JSON ファイルのテキスト比較を実行します。

このページは英語から自動翻訳されています。 不明な点は元のページを参照してください。
Copyright © 2021-2024. All rights reserved. (b4b9813f)