2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

同期回路とVerilog

Last updated at Posted at 2017-11-14

目的

同期回路と設計上の注意点の続編?、勢いで書いただけです。

同期回路を意識したVerilogの書き方について述べる。

Wikipediaにあるように論理回路は組み合わせ回路と順序回路からなる。Verilogではそれぞれ分けて書くことが望ましい。

同期回路の構成要素

下記に同期回路の構成要素を列挙しそれぞれVerilogでどう書くか例を挙げる。

DFF

下記は1bitのDFFの記述の例、クロック(CLK)とリセット(RESETN)をつけるのがよい。
DFFへの入力はDINから渡す。DFFへの入力はノンブロック代入がよい。

reg DFF;
always@(posedge CLK or negedge RESETN)
  if(!RESETN)
     DFF <= 0;
  else
     DFF <= DIN

簡単な順序回路(カウンタ)なら論理を書いても問題ない。

reg [3:0] CNT;
always@(posedge CLK or negedge RESETN)
  if(!RESETN)
     CNT <= 0;
  else
     CNT <= CNT + 1

ラッチ回路

ラッチ回路は使わない方がいいが下記の記述で作成できる。

reg DFF;
always@(CLK or DIN)
 if(CLK)
    DFF <= DIN

論理ゲートを使った組み合わせ回路

下記は加算器の例、c=a+bを行う。

assign文の場合

wire [3:0] a;
wire [3:0] b;
wire [3:0] c;
assign c = a + b;

always文の場合、ブロッキング代入が望ましい。

wire [3:0] a;
wire [3:0] b;
reg [3:0] c;
always @*
  c = a + b;

ステートマシン

下記はステートマシンの例、組み合わせ回路と順序回路をそれぞれ使用する。
NSTATは組み合わせ回路でSTATは順序回路である。

reg [2:0] NSTAT;
reg [2:0] STAT;

always @* 
  case (STAT)
    3'b000: NSTAT = 3'b001;
    3'b001: NSTAT = 3'b010;
    3'b010: NSTAT = 3'b100;
    defaut: NSTAT = 3'b000;
  endcase

always@(posedge CLK or negedge RESETN)
  if(!RESETN)
     STAT <= 0;
  else
     STAT <= NSTAT
2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?