01signal.com

Comparer les fichiers de block design de Vivado

Introduction

Un block design (schéma de blocs) dans un projet Vivado est représenté par un fichier dont l’extension est .bd, par exemple vivado_system.bd. Ce fichier contient toutes les informations relatives au block design dans un format à la fois textuel et lisible par un être humain. Dans les anciennes versions de Vivado, ce fichier était écrit au format XML. Aujourd’hui, le format JSON est utilisé pour représenter un block design.

Grâce au format textuel, il est possible de comparer deux fichiers de block design avec des outils bien connus de comparaison textuelle (diff et les outils graphiques du même genre). Cela permet de garder une trace des modifications apportées au block design.

Cependant, le format JSON présente un inconvénient important en ce qui concerne la comparaison de fichiers texte : dans les définitions d’objets, les propriétés et leurs valeurs peuvent être listées dans un ordre quelconque. Des outils comme diff peuvent donc montrer que le contenu textuel de deux fichiers JSON est significativement différent, alors qu’ils renferment exactement la même information.

Malheureusement, certaines parties des fichiers de block design générés par Vivado souffrent de ce problème. De ce fait, une comparaison textuelle entre deux fichiers .bd affiche de nombreuses différences trompeuses, qui résultent d’un ordre incohérent dans la présentation de l’information.

Canonicalisation d’un fichier JSON

La solution naturelle à un ordre aléatoire dans un fichier texte consiste à amener ce fichier à une forme canonique. Il existe une définition stricte de la façon d’effectuer une telle canonicalisation dans la RFC 8785, mais il n’est pas nécessaire de suivre cette norme pour comparer deux fichiers. Éviter un réordonnancement aléatoire suffit.

Une solution simple consiste à trier les propriétés des objets par ordre alphabétique, selon le nom des propriétés. Cela garantit une représentation cohérente de l’information dans un fichier JSON. Toutefois, ce réordonnancement a un inconvénient : les propriétés sont généralement listées dans un ordre qui rend le fichier facile à lire. Les propriétés importantes sont habituellement placées en début de fichier, et les propriétés sont regroupées selon leur signification. Il est donc un peu plus difficile de lire un fichier JSON sous forme canonique.

Un script Perl

Grâce au module Perl JSON, il est facile d’écrire un script Perl qui effectue la canonicalisation d’un fichier JSON :

#!/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;

Utilisez ce script avec une commande comme celle-ci :

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

Pour comparer des block designs, effectuez une comparaison textuelle de deux fichiers JSON canonicalisés.

Cette page a été traduite de l’anglais par une machine. En cas de doute, veuillez vous reporter au texte original
Copyright © 2021-2026. All rights reserved. (dcc38493)