Verilogチートシート

# このページは,学生実験用資料として筑波大学リコンフィギュラブルコンピューティングシステム研究室のwebページで公開されていたものを,許可を得て転載したものです.


ひな形


  module ModuleName #(
    // パラメータを宣言
    parameter
    PARAMETER_NAME = 8,
    WIDTH = 8
    ) (
       // 出力ポートの宣言
       output wire	 wire_output_port_name,
       output reg	 reg_output_port_name,
       output reg [WIDTH-1:0] multibyte_reg_output_port_name,
       // 入力ポートの宣言
       input 		 input_port_name,
       input [WIDTH-1:0] multibyte_input_port_name,
       input 		 reset,
       input 		 clock
       );
   // パラメータの宣言
   localparam LOCAL_PARAMETER_NAME = 8;
   localparam DEPTH = 8;

   // 信号の宣言
   wire 			 wire_signal;
   wire [WIDTH-1:0]		 multibyte_wire_signal;
   wire [WIDTH-1:0]		 wire_array[DEPTH - 1: 0];
   reg 				 reg_signal;
   reg [WIDTH-1:0]		 multibyte_reg_signal;
   reg [WIDTH-1:0]		 reg_array[DEPTH - 1: 0];

   reg [1:0] 			 r0, r1;
   wire [1:0]			 w0;
   wire 			 w1, w2;

   wire 			 submodule_output;

   // wireへの接続
   assign w0 = w1 + w2;
   wire [1:0] 			 w = w1 + w2;

   // regへの接続(clockの立ち上がりに応じてregの値を変化)
   always @(posedge clock) begin
      if (reset) begin
	 r0 <= 0;
	 r1 <= 0;
      end else begin
	 r0 <= w1 + w2;
	 r1 <= r0[1: 0];
      end
   end

   // サブモジュールの接続
   Submodule #(
       // サブモジュールのパラメータ上書き
       .SUBMODULE_PARAMETER_NAME(PARAMETER_NAME),
       .DEPTH(DEPTH)
       ) instance_name (
	.submodule_port_name(r0),
	.submodule_output(submodule_output), // サブモジュールの出力はwireのみ接続することができる 
	.clock(clock)
	);
  endmodule
 

信号の宣言


  wire w;
  wire [7:0] w8;
  wire [7:0] warray[1:0]; // 二次元配列
  reg r;
  reg [7:0] r8;
  reg [7:0] rarray[1:0]; // 二次元配列
  

定数の宣言


  parameter PARAMETER_NAME = 8;
  localparam LOCAL_PARAMETER_NAME = 8;
    

数値


  4'b0101 // 二進数
  4'd10   // 十進数
  4'hA    // 十六進数
  

演算


  plus <= a + b;
  minus <= a - b;
  multiply <= a * b;
  divide <= a / b; 
  left_shift <= a << 2;
  right_shift <= a >> 2;
  

比較


  (a < b)
  (a > b)
  (a >= b)
  (a <= b)
  (a == b)
  

ビット操作


  bit <= a[2];
  sub0 <= a[5: 2]; // 5ビット目から2ビット目を取得
  sub1 <= a[5 -: 4]; // 5ビット目より下位4ビットを取得
  sub2 <= a[2 +: 4]; // 2ビット目より上位4ビットを取得

  concat <= {a, b}; // aの下位にbを結合してconcatに代入
  {a, b} <= splt;   // spltの上位をaに,残りをbに代入
    

wireへの接続


  assign wire_name = wire0;   // 既存のwireへ接続する
  wire new_wire_name = wire0; // 新しくwireを宣言し、接続する  
    

regへの接続


  reg0 <= reg1;  
    

if文


  if (a[0] == 0) begin
  ...
  end

  if (a[0] == 0) begin
  ...
  end else if (a[1] == 0) begin  
  ...
  end else begin
  ..
  end
    

モジュール接続


  SubModuleName instance_name (
    .port_name0(sgnal_name0),
  ...
    .port_namen(signal_namen)
  );

  SubModuleName #(
    .SUBMODULE_PARAMETER_NAME(PARAMETER_NAME)  
  ) instance_name (
    .port_name0(sgnal_name0),
  ...
    .port_namen(signal_namen)
  );
    

戻る