どのブロックが他のどのブロックに接続されているかを示す特定のVerilogモジュール階層の回路図を作成したいと思います。Novas / SpringsoftのDebussy / Verdi nschemaツール、またはRTLにグラフィカルなデザインブラウザーを提供する多くのEDAツールのいずれかによく似ています。
verilogまたはvhdlの定義から、または他のテキストベースの入力形式からプログラムで回路図を描画するために利用できるツール領域は何ですか?
どのブロックが他のどのブロックに接続されているかを示す特定のVerilogモジュール階層の回路図を作成したいと思います。Novas / SpringsoftのDebussy / Verdi nschemaツール、またはRTLにグラフィカルなデザインブラウザーを提供する多くのEDAツールのいずれかによく似ています。
verilogまたはvhdlの定義から、または他のテキストベースの入力形式からプログラムで回路図を描画するために利用できるツール領域は何ですか?
回答:
無料でオープンソースの素晴らしい HDL合成ツールボックスであるYosysを使用して、クールな(そして無料の)(そして最新のVivadoよりも高速な)追加の用量を使用します(スピーチやビールのように無料について言及しましたか?)(そして素晴らしい)!
yosysとxdotユーティリティ(多くの場合、python-xdotと呼ばれるパッケージの一部)だけでなく、graphvizも入手してください。
次に、verilogファイルのようにします(これをと呼びましょうminifsm.v
)。
module piggybank (
input clk,
input reset,
input [8:0] deposit,
input [8:0] withdrawal,
output [16:0] balance,
output success
);
reg [16:0] _balance;
assign balance = _balance;
wire [8:0] interest = _balance [16:9];
reg [5:0] time_o_clock;
localparam STATE_OPEN = 0;
localparam STATE_CLOSED = 1;
reg openness;
assign success = (deposit == 0 && withdrawal == 0) || (openness == STATE_OPEN && (withdrawal <= _balance));
always @(posedge clk)
if(reset) begin
_balance <= 0;
openness <= STATE_CLOSED;
time_o_clock <= 0;
end else begin
if (openness == STATE_CLOSED) begin
if(time_o_clock == 5'd7) begin
openness <= STATE_OPEN;
time_o_clock <= 0;
end else begin
time_o_clock <= time_o_clock + 1;
end
if (time_o_clock == 0) begin //add interest at closing
_balance <= _balance + interest;
end;
end else begin //We're open!
if(time_o_clock == 5'd9) begin // open for 9h
openness <= STATE_CLOSED;
time_o_clock <= 0;
end else begin
_balance <= (success) ? _balance + deposit - withdrawal : _balance;
time_o_clock <= time_o_clock + 1;
end
end // else: !if(openness == STATE_CLOSED)
end // else: !if(reset)
endmodule // piggybank
そしてyosysを実行します:
yosys
/----------------------------------------------------------------------------\
| |
| yosys -- Yosys Open SYnthesis Suite |
| |
| Copyright (C) 2012 - 2016 Clifford Wolf <clifford@clifford.at> |
| |
| Permission to use, copy, modify, and/or distribute this software for any |
| purpose with or without fee is hereby granted, provided that the above |
| copyright notice and this permission notice appear in all copies. |
| |
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| |
\----------------------------------------------------------------------------/
Yosys 0.6+155 (git sha1 a72fb85, clang 3.7.0 -fPIC -Os)
verilogファイルをロードし、階層を確認してから、プロセスを抽出し、最適化し、ステートマシンを見つけ、最適化してグラフを表示します。
yosys> read_verilog minifsm.v
… …
yosys> hierarchy -check;
yosys> proc;
yosys> opt;
yosys> fsm;
yosys> opt;
yosys> show;
そしてあなたは次のようなものを得るでしょう
show
コマンドのさまざまなオプションを使用して、グラフをファイルに保存することもできます。Yosysを使用すると、verilog、EDIF、BLIFなどで「フラット化された」ロジックを記述し、ArachnePnRでサポートされているものを含む特定の技術プラットフォーム用に合成してマップし、さらに興味深いことができます。本質的に、Yosysは、コンパイラの作成方法を知っている人にVerilogシンセサイザを記述させるようなものです。
何がありますか?これらの機能には、さまざまな出力品質の機能があります。