2007年09月04日

VHDLでFPGAのバージョン管理

皆さんはFPGAのバージョン管理はどうしていますか?
「たまにエラー出るけどこれいつのバージョンか分からない!」
「バージョンレジスタを付けたけど更新するの忘れた!」
なんて事ありませんか?
私はよくあります...

そこで!論理合成するたびに自動的にインクリメントしてくれる信号を作ってみました。これは合成時に値が決定するので回路のリソースは消費しませんし、自動なので更新を忘れることもありません。

使い方は、FPGAのトップから本パッケージの関数を呼び出すだけです。
以下に使用例を紹介します。


-- バージョン取得パッケージの参考例
library IEEE;
use IEEE.std_logic_1164.all;

-- FPGAのトップファイルにこのパッケージを宣言する。
library work;
use work.ver_get.all;

entity top is
    generic
    (
        -- シミュレーションを行う場合は、
        -- テストベンチから「SIM_MODE」を1にして呼び出す。
        -- 合成の時はディフォルトの0が自動的に割り当たる。
        SIM_MODE            : integer := 0
    );
    port
    (
        VER_OUT         : out   std_logic_vector(31 downto 0)
    );
end top;

architecture top of top is

    -- この呼び出しで論理合成する毎にインクリメントされた値を返す。
    constant    VERSION : std_logic_vector(31 downto 0)
                                := get_version( SIM_MODE, "ver.txt" );

begin

    VER_OUT <= VERSION;

end top;


動作の仕組みは、論理合成時に指定されたバージョンファイルからバージョンデータを読み出しインクリメントしたバージョンデータを書き込むだけです。
詳しくはパッケージファイルにコメントを書いていますのでそれを見てください。

パッケージはココ
参考ファイルはココ
バージョンファイルの参考例はココ
からダウンロードできます。

「もっと良い方法しってるよ!」って人は是非教えてください。

投稿時刻(20:14)│コメント(6)VHDL 

この記事へのコメント

1. Posted by marsee   2007年09月05日 05:42
バージョンレジスタつけていません。
普通は、ファイル名に日付とその何番目かを入れています。
test_070905_2.bitというように。わからなくなったら、再度コンフィギュレーションしています。
バージョンレジスタもいいですね。できれば、自動的に日付、時間が取得できるといいですね。そういう関数VHDLではないのかな?
2. Posted by たーぼ   2007年09月06日 15:32
私もbitファイル名には日付を付けています。
これをROMに書き込み実機上でバージョンを確認したい時のためにバージョンレジスタを付けています。
ただ、バージョンレジスタの更新を忘れてデータを作ってしまう事があるので自動的に更新出来る仕組みが必要でした。
自動的に日付、時間を取得出来る方法を考えたのですが簡単には出来ないようです。
でも、作るのは大変ですがアイデアはあるのでまた報告したいと思います。
3. Posted by nyo   2007年09月14日 08:31
私もVSSやらCVSやらも含め、いろいろ試してみたことがあります。単に日付を入れるだけなら、バージョン管理システムで十分かと。

いろいろあって、今はbitファイルを作る度に、全データをフォルダー毎バックアップする、に落ち着いています。前のバージョンのタイミングレポートが見たくなったり、FPGAエディタでDCMのパラメータを確認したくなったりするので、全部バックアップ取った方が間違いないという、後ろ向きな結論になりました。

プロジェクトの最中に、何らかの理由でサービスパックを当てたりすると、同じソースでも同じ回路になる保証も無いですから、今はこれがベストだと思っています。

100回bitファイルを作ったら、それのソースから何から一式100回分バックアップ取ることになりますが、HDDも安いのでそれほど問題にはならないです。
4. Posted by たーぼ   2007年09月18日 20:50
nyoさん、コメントありがとうございます。
私もVSSやCVSを使って管理しようと使っていた時期がありました。
でも、どうも使い勝手が良くなくてやめました。
今は、nyoさん同様にリリースしたバージョンは全てのデータをコピーしています。
今回ほしかったのは、回路内のレジスタにリリースした日付を自動的に入れる機能です。
VSSをうまく使えば可能なのでしょうか?余りVSSに詳しくないので分かりませんでした。
もしご存じでしたら是非ご教授願いたいのですが。
5. Posted by nyo   2007年09月19日 07:54
VSSもCVSもこのレベルであれば、機能は同じです。
$id$とかで文字列置換できるのなら、バージョン管理ツールと同期が取れるので、おもしろそうですね。ちょっと、考えてみます。

C言語でもプリプロセッサ使って、オブジェクトファイルに文字列入れたりしますから、やってみる価値はありそうです。
6. Posted by たーぼ   2007年09月20日 20:26
nyoさん、こんにちは。
文字列置換は私も気になっていたのですが余り調べていませんでした。時間がとれれば私の方でも少し試してみたいと思います。
良い方法が見つかれば、また教えてください。

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
最新コメント
ブログ内検索
カテゴリ別表示
月別表示
問い合わせ・連絡先
ta_bo__@livedoor.com

本サイトは以下のアクセス解析を使用しております。
基礎化粧品