|
Verilog mode for emacs (2/2)
|
| ここで紹介するのはほんの少しの機能でしかありません。もっと多くの便利な機能を使うには help を参照してください。 |
[C-c C-c]
マークした領域(マークセットした行からカーソル位置まで)をコメントアウトする |
/* -----\/----- EXCLUDED -----\/-----
使わない部分
-----/\----- EXCLUDED -----/\----- */
|
[C-c C-u]
上記コメントの中でタイプすることによって comment-in (元に戻す)とする
[C-c C-r]
自動的に end の後にラベル を挿入してくれる。例えばこんな感じ。 |
else begin
state <= IDLE;
oen <= 1;
wen <= 1;
PReady <= 0;
end // else: !if(PStrobe && !PRW)
end // case: IDLE
|
[C-c C-h]
ファイルの先頭にヘッダーを挿入します。
C-c C-h とタイプすると Emacs のミニバッファに Title: Project: Company:
を順次入力するように促されるのでそれぞれ入力するとソースの <title>
<project> <company> に補完されます。 |
//---------------------------------------------------------------------
// Title : <title>
// Project : <project>
//---------------------------------------------------------------------
// File : test.v
// Author : Hoge Foo <hoge@foo>
// Created : 03.12.2005
// Last modified : 03.12.2005
//---------------------------------------------------------------------
// Description :
//
//---------------------------------------------------------------------
// Copyright (c) 2005 by <company> This model is the confidential and
// proprietary property of <company> and the possession or use of this
// file requires a written license from <company>.
//---------------------------------------------------------------------
// Modification history :
// 03.12.2005 : created
//---------------------------------------------------------------------
|
verilog のソース中にコメントとして AUTO 機能を /*AUTOxxx*/ と記述することによって、自動的にポート名や宣言文を挿入、補完してくれるモードです。コマンドを実行するには
C-c C-a とタイプし、元に戻す場合は C-c C-k とタイプします。
例えば、図 1 のような state_machine と decoder モジュールから構成される
top モジュールの場合、リスト3のように簡略化して記述することができます。
キータイプの数を減らすことができるわけです。
以下、それぞれのコマンドについて説明します。 |
module top (/*AUTOARG*/);
/*AUTOINPUT*/
/*AUTOOUTPUT*/
/*AUTOWIRE*/
state_machine STATE_MACHINE(/*AUTOINST*/);
decoder DECODER(/*AUTOINST*/);
endmodule
|
AUTOARG
モジュールのポートリストに /*AUTOARG*/ と記述する(リスト4)ことにより、モジュール内の入出力の宣言文から自動的にモジュールのポートリストにポート名を挿入してくれます(リスト5)。 |
module state_machine(/*AUTOARG*/);
input clk;
input reset;
input PStrobe;
input PRW;
input cen;
output PReady;
output oen;
output wen;
--- 省略 ---
endmodule
|
module state_machine(/*AUTOARG*/
// Outputs
PReady, oen, wen,
// Inputs
clk, reset, PStrobe, PRW, cen
);
input clk;
input reset;
input PStrobe;
input PRW;
input cen;
output PReady;
output oen;
output wen;
--- 省略 ---
endmodule
|
AUTOINPUT
/*AUTOINST*/ と同時に使用され、サブモジュールへの入力信号で、上位モジュール内で宣言されていない入力ポートの宣言を補完します。
|
module top (PReady, oen, wen,clk, reset, PStrobe, PRW, PAddress);
/*AUTOINPUT*/
input [15:0] PAddress ;
output PReady;
output oen;
output wen;
state_machine STATE_MACHINE(/*AUTOINST*/);
decoder DECODER(/*AUTOINST*/);
endmodule
|
module top (PReady, oen, wen,clk, reset, PStrobe, PRW, PAddress);
/*AUTOINPUT*/
// Beginning of automatic inputs (from unused autoinst inputs)
input [15:0] PAddress; // To DECODER of decoder.v
input PRW; // To STATE_MACHINE of state_machine.v
input PStrobe; // To STATE_MACHINE of state_machine.v
input clk; // To STATE_MACHINE of state_machine.v
input reset; // To STATE_MACHINE of state_machine.v
// End of automatics
output PReady;
output oen;
output wen;
--- 省略 ---
endmodule
|
AUTOINST
上位層で使われるインスタンス化されたサブモジュールのポートリストに /*AUTOINST*/
と記述することによって、サブモジュールのポート名を挿入してくれます。
|
module top (PReady, oen, wen,clk, reset, PStrobe, PRW, PAddress);
input clk;
input reset;
input PStrobe;
input PRW;
input [15:0] PAddress ;
output PReady;
output oen;
output wen;
state_machine STATE_MACHINE(/*AUTOINST*/);
decoder DECODER(/*AUTOINST*/);
endmodule
|
| C-c C-a とタイプすることによって、以下のようにポートしストにポート名が挿入されます。 |
module top (PReady, oen, wen,clk, reset, PStrobe, PRW, PAddress);
input clk;
input reset;
input PStrobe;
input PRW;
input [15:0] PAddress ;
output PReady;
output oen;
output wen;
state_machine STATE_MACHINE(/*AUTOINST*/
// Outputs
.PReady (PReady),
.oen (oen),
.wen (wen),
// Inputs
.clk (clk),
.reset (reset),
.PStrobe (PStrobe),
.PRW (PRW),
.cen (cen));
decoder DECODER(/*AUTOINST*/
// Outputs
.cen (cen),
// Inputs
.PAddress (PAddress[15:0]));
endmodule
|
AUTOOUTPUT
/*AUTOINST*/ と同時に使用し、インスタンス化されたサブモジュールから他のサブモジュールへの出力以外の出力信号を補完します。 |
module top (PReady, oen, wen,clk, reset, PStrobe, PRW, PAddress);
input clk;
input reset;
input PStrobe;
input PRW;
input [15:0] PAddress ;
/*AUTOOUTPUT*/
state_machine STATE_MACHINE(/*AUTOINST*/);
decoder DECODER(/*AUTOINST*/);
endmodule
|
module top (PReady, oen, wen,clk, reset, PStrobe, PRW, PAddress);
input clk;
input reset;
input PStrobe;
input PRW;
input [15:0] PAddress ;
/*AUTOOUTPUT*/
// Beginning of automatic outputs (from unused autoinst outputs)
output PReady; // From STATE_MACHINE of state_machine.v
output oen; // From STATE_MACHINE of state_machine.v
output wen; // From STATE_MACHINE of state_machine.v
// End of automatics
state_machine STATE_MACHINE(/*AUTOINST*/
// Outputs
.PReady (PReady),
.oen (oen),
.wen (wen),
// Inputs
.clk (clk),
.reset (reset),
.PStrobe (PStrobe),
.PRW (PRW),
.cen (cen));
decoder DECODER(/*AUTOINST*/
// Outputs
.cen (cen),
// Inputs
.PAddress (PAddress[15:0]));
endmodule
|
AUTOWIRE
/*AUTOINST*/ と同時に使用され、インスタンス化されたサブモジュール間の接続信号で、宣言されていない
wire 宣言文を補完します。
|
module top (PReady, oen, wen,clk, reset, PStrobe, PRW, PAddress);
input clk;
input reset;
input PStrobe;
input PRW;
input [15:0] PAddress ;
output PReady;
output oen;
output wen;
/*AUTOWIRE*/
state_machine STATE_MACHINE(/*AUTOINST*/);
decoder DECODER(/*AUTOINST*/);
endmodule
|
module top (PReady, oen, wen, clk, reset, PStrobe, PRW, PAddress);
input clk;
input reset;
input PStrobe;
input PRW;
input [15:0] PAddress ;
output PReady;
output oen;
output wen;
/*AUTOWIRE*/
// Beginning of automatic wires (for undeclared instantiated-module \
outputs)
wire cen; // From DECODER of decoder.v
// End of automatics
state_machine STATE_MACHINE(/*AUTOINST*/
// Outputs
.PReady (PReady),
.oen (oen),
.wen (wen),
// Inputs
.clk (clk),
.reset (reset),
.PStrobe (PStrobe),
.PRW (PRW),
.cen (cen));
decoder DECODER(/*AUTOINST*/
// Outputs
.cen (cen),
// Inputs
.PAddress (PAddress[15:0]));
endmodule
|
| まだ全ての機能が説明できていませんが、これだけでもかなりのキータイプを効率化できますね。 |
|
|