Allianceを使った論理回路設計 -ALU編-
Allianceを使った論理回路設計を参考にALU(Arithmetic Logic Unit: 算術論理演算装置(デジタル回路の一種で演算を行う))をAllianceのツールを使ってレイアウトまで行いましたので、その手順を示します。現状はこのツールはWindows上で動作し、北九州学研都市にある共同研究センターの2um/2層メタルでのプロセスに対応しています。 設計手順は以下の4ステップになります。
環境の設定(こちらは最初の1回だけです)
設計データの作成及び実行スクリプトの修正
GDSデータの作成
GDSデータの確認
以下順番に説明します。
環境の設定
Allianceを使った論理回路設計にあるLiveCygwinをダウンロードして、展開(ダブルクリック)します。展開すると、 LiveCygwin20170312 というフォルダが出来ます(通常はデスクトップ)。 LiveCygwin20170312 の中にある startup.bat をダブルクリックすると、 cmd.exe と LiveCygwin のウィンドウが立ち上がり、初回の起動のみデータを展開します。展開が終わと LiveCygwin のウィンドウにコマンドプロンプトが現れます。 https://gyazo.com/b973ecc0aac4874598241224fd2aa980
以後の作業はこのコマンドプロンプト上で実行します。
LiveCygwin はWindows 上で動作する Linux環境になりますので、Linuxのコマンドが使用できます。この/homeは、 LiveCygwin 実行時のみにwindows上のローカルディスクの一つとして割り当てられたディスクの下にあるhomeディレクトリになりますが、データの実態はC:\Documents and Settings\<ユーザー名>\cyg_frootにあります(ココのデータがLiveCygwin起動の度にローカルディスクに割り当てられます)。
これで環境の設定は終了です。
設計データの作成及び実行スクリプトの修正
はじめに設計データを作成します。Allianceのツールで使用できる設計データはVHDLのサブセット(限定仕様)版になります。そのため、Alliance用にあったVHDLを作成するよりも、一旦NSL(Next Synthesis Language)で作成して、VHDLのサブセット(限定仕様)版に変換をした方が設計が楽になります。今回の手順も最初にNSLで作成します。 NSLはOvertoneのホームページにNSLとはに紹介があります。そのため、ここではNSLの詳しい説明はしません。尚、OvertoneのホームページにNSL リファレンスマニュアル(pdf)やNSLサンプルがあるので、是非参考にしてください。 今回は/home/ALUのディレクトリを作成し、設計データとして以下のALU.nslをこのディレクトリ作成しました。作成は適当なエディタで作成すれば良いですが、改行コードなどに注意して下さい。
code:ALU.nsl
declare ALU {
input ZX_i;
input NX_i;
input ZY_i;
input NY_i;
input FC_i;
input NO_i;
}
module ALU {
if (~ZX_i && ~NX_i) X_int=X_i;
if (~ZX_i && NX_i) X_int=~X_i;
if ( ZX_i && ~NX_i) X_int=4'b0000;
if ( ZX_i && NX_i) X_int=4'b1111;
if (~ZY_i && ~NY_i) Y_int=Y_i;
if (~ZY_i && NY_i) Y_int=~Y_i;
if ( ZY_i && ~NY_i) Y_int=4'b0000;
if ( ZY_i && NY_i) Y_int=4'b1111;
if (FC_i) Z_int=X_int+Y_int;
if (~FC_i) Z_int=X_int&Y_int;
if (NO_i) Z_o=~Z_int;
if (~NO_i) Z_o=Z_int;
}
次に実行スクリプトを準備します。
実行スクリプトは/home/xpu/Makefileをコピーして編集します。以下のコマンドを実行してコピーを行い、編集します。
cd /home/ALU
cp /home/xpu/Makefile .
vim Makefile
編集箇所はcell名の変更です。Makefile内の以下の記述を変更します。
変更前: FILENAME=xpu_core
変更後: FILENAME=alu
尚、これらの作業に関してLinux環境に慣れていない方はWindows上でC:\Documents and Settings\<ユーザー名>\cyg_froot\homeで同じことをしても良いです(つまり、ALUフォルダの作成する、テキストファイルとしてALU.nslを作成する、Makefileをコピーして編集するなどの一連の作業をWindows上でも可能です)。
これで設計データの作成及び実行スクリプトの修正は終了です。
注) 本レイアウトはMakefile内でもう一箇所LO_NUMを3に変更してあります。 LO_NUM = 3 これはレイアウトにおいてスタンダードセルの配置を3行にする設定です。
レイアウト(GDS)データの作成
ここからいよいよAllianceツールを使用して、GDS(レイアウト)データを作成し、検証を行います。
はじめにNSLからAlliance用のALU.vhdlを作成します。 コマンドプロンプトから以下を入力します。
nsl2vh -vasy -split ALU.nsl
そうすると、ALU.vhdlが作成されます。
実行結果が以下になります。
https://gyazo.com/7d80695507b5a1746cc80a712d99768a
この後、作成されたALU.vhdlの一部を編集します(今後、要確認)。今回のALUは組み合わせ回路なのでフリップフロップいわゆる順序回路を使用していません。そのため、不要のp_reset、m_clockの端子をコメントアウトします。entity ALUにあるp_reset、m_clockの定義の前に–を入れます。
変更前(変更箇所のみ表示):
code:ALU.vhdl
entity ALU is
port(p_reset: in std_logic; m_clock: in std_logic;
Z_o: out std_logic_vector(3 downto 0);
変更後(変更箇所のみ表示):
code:ALU.vhdl
entity ALU is
port(
-- p_reset: in std_logic;
-- m_clock: in std_logic;
Z_o: out std_logic_vector(3 downto 0);
変更後、次はAlliance用のビヘイビアサブセットalu.vbeを作成します。以下のコマンドを実行します。
vasy -p -a -o ALU.vhdl
実行結果が以下になります。
https://gyazo.com/47fc8ac0b4020a3c0e735f3c2002dc4c
ここから、いよいよ論理合成と仮想配置配線を行います。以下のコマンドを実行すると、一気に実行されます。
make alu.ap
ここでは複数のツールが順次実行されます。まず、 BooM で論理合成を実行し、 BooG でスタンダードセルへのマッピングを行います。そして、 LooN でネットリストの最適化を行い、最後に SCR で仮想配置配線データalu.apの作成を行います。
実行の結果が以下になります。ログが長いので最初と最後のスクリーンショットのみを載せてあります。
https://gyazo.com/98ccbce957e2c2eac9edf4f1f718fa7c
https://gyazo.com/acb261de847e5d09893af4b43cf5638a
尚、実行のログにYOSYS_TOPとAVERTEC_TOPの環境変数が設定されていない旨のメッセージが出ます(問題あるかどうか要確認)。
ここで仮想配置配線まで終了したので、仮想配置配線前後でのLVS(Layout versus schematic)検証を行います。これは論理合成した回路データと仮想配置配線後の回路データが同一かどうかを検証するものです。以下のコマンドを実行します。
make lvx-alu
仮想配置配線データから回路データを集出するCougarと論理合成した回路データと仮想配置配線後の回路データとの比較を行うLVXが実行されます。特にエラーが無ければ、その旨のメッセージ(O.K.)が出ます。
https://gyazo.com/64049e5b11cb42b61cbed93486429cd0
最後に実際のレイアウトデータであるgdsデータを作成します。以下のコマンドを実行します。
make alu.gds
仮想配置配線データ(シンボリックレイアウトデータ)から実際のレイアウトデータを作成するs2rが実行され、alu.gdsが作成されます。
https://gyazo.com/becacc8e99737bcad44dd8607cc0c23d
https://gyazo.com/22fb09d594113a926ac6ba7e162e5842
これでレイアウト(GDS)データalu.gdsの作成が終了です。
レイアウト(GDS)データの確認
最後にレイアウト(GDS)データの確認を行います。ここではAllianceのツールではなく、Gladeを使用します。
glade4_win64/glade.exeをクリックして、Gladeを起動します。起動したら、File-New Libraryを選択し、Library nameにaluと入力し、Technology FileにMakeLSI/IPからダウンロード、展開したファイルにあるIP-master/StdCell/Hibikino/Glade/hibikino.tchを選択し、OKを押します。 https://gyazo.com/95c42d1468e457a2b44b1c225ed576ba
次に作成したレイアウト(GDS)データをインポートします。File-Import-Import GDS2…を選択し、Input fileに作成したGDSデータalu.gdsを選択し、取り込みます。尚、GDSデータは以下にあります。
C:\Documents and Settings\<ユーザー名>\cyg_froot\home\alu\alu.gds
https://gyazo.com/f4b585d6cd87075adfbeac16d34189e4
取り込みが終了すると、画面上にレイアウトデータが表示されます。
https://gyazo.com/ee49d1e5930cd12b6dce46cefca91d11
目視でレイアウトデータに問題ないことを確認します。さらに、DRC(Desgin Rule Check)で製造上のルール違反がないかを確認します。GladeのメニューのVerify-DRC-Run DRC…を選択します。DRC rules fileに先ほどと同様にMakeLSI/IPからダウンロード、展開したファイルにあるIP-master/StdCell/Hibikino/Glade/hibikino-drc.pyを選択し、OKを押します。 https://gyazo.com/cd8e4e5a695e3d31a7a74f41b07b3b7b
エラーが無ければ、その旨のログがMessage Windowに表示されます。
https://gyazo.com/f365f9849278a4a328545a4632f26f9e
これでレイアウト(GDS)データの確認が終了です。
お疲れ様でした!!