0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1から学ぶHDL ~RTL設計とゲートレベル設計~

Posted at

1から学ぶHDL ~RTL設計とゲートレベル設計~

HDLについて初めて学んだことを書いてみました。まだまだ学び始めて30分なので内容が浅いです。

RTL設計とゲートレベル設計

RTLのほうが記述量がうんと少ない!
コードを見れば一目瞭然!

RTL.v
module half_add(a, b, co, s);
 input a, b; output co, s;
 assign s = a ^ b; assign co = a & b;
endmodule
gate level.v
module full_add(a, b, ci, co, s);
 input a, b, ci; output co, s; wire w0, w1, w2;
 half_add ha0 (.a(a), .b(b), .co(w1), .s(w0));
 half_add ha1 (.a(w0), .b(ci), .co(w2), .s(s));
 assign co = w1 | w2;
endmodule

同じ内容なのに、こんなにも行数が変わってきます。

ここで詳しくまとめておくと

RTL設計

そのままシミュレーションが可能!

  • 記述量少ない
  • 抽出度高い
  • 大規模回路が容易
  • 組み合わせ回路やレジスタ

ゲートレベル設計

  • 記述量多い
  • 抽出度低い
  • 大規模回路が困難
  • ANDやOR、フリップフロップ

always文

ここでalways文について動作記述言語の1つ

always.v
always@ ( センシティビティリスト ) begin
演算
end

センシティビティリストはその値が変化したときにそのコードが実行されるというもの。
alwaysで代入する値はregで宣言する

alwaysの例として4bit加算器を示す。

ex_always.v
module add4(a, b, ci, co, s);
input [3:0] a, b;
 input ci;
 output co;
 output [3:0] s;
 reg co;
 reg [3:0] s;
 always@(a or b or ci) begin
 {co, s} <= a + b + ci;
 end
endmodule
0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?