Ryusai's Homepage
トップページ > LinuxでEDA > Verilog mode > Verilog modeの機能

Verilog mode for emacs (2/2)

Verilog mode の機能

ここで紹介するのはほんの少しの機能でしかありません。もっと多くの便利な機能を使うには help を参照してください。

コメント操作

[M-*]
以下のようなコメントの挿入
   /*
    *
    */
[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
//---------------------------------------------------------------------

AUTO mode

verilog のソース中にコメントとして AUTO 機能を /*AUTOxxx*/ と記述することによって、自動的にポート名や宣言文を挿入、補完してくれるモードです。コマンドを実行するには C-c C-a とタイプし、元に戻す場合は C-c C-k とタイプします。

例えば、図 1 のような state_machine と decoder モジュールから構成される top モジュールの場合、リスト3のように簡略化して記述することができます。
キータイプの数を減らすことができるわけです。

以下、それぞれのコマンドについて説明します。
リスト3
module top (/*AUTOARG*/);
   /*AUTOINPUT*/
   /*AUTOOUTPUT*/
   /*AUTOWIRE*/

   state_machine STATE_MACHINE(/*AUTOINST*/);

   decoder DECODER(/*AUTOINST*/);

endmodule

AUTOARG

モジュールのポートリストに /*AUTOARG*/ と記述する(リスト4)ことにより、モジュール内の入出力の宣言文から自動的にモジュールのポートリストにポート名を挿入してくれます(リスト5)。

リスト 4
module state_machine(/*AUTOARG*/);

   input clk;
   input reset;
   input PStrobe;
   input PRW;
   input cen;

   output PReady;
   output oen;
   output wen;

   --- 省略 ---

endmodule
図 1
ブロック図
C-c C-a とタイプする。
リスト5
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
C-c C-a とタイプ。
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
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 ;
   /*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
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;

   /*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
まだ全ての機能が説明できていませんが、これだけでもかなりのキータイプを効率化できますね。


前のページ
Verilog modeのインストール



 
サイトマップこのサイトについてお問い合わせ |
Copyright (C) 2006-2008 Ryusai's Homepage All rights reserved