忍者ブログ

EDA Blog

Verilog、SystemVerilog、SystemCなど、ハードウェア記述言語についてのブログです。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

現在、新しいコメントを受け付けない設定になっています。

[SyetemVerilog] SystemVerilog for Design (1)

SystemVerilog for Designを一通り読み終えたので、コードを書きつつModelSimを使ってSystemVerilogを勉強していこうと思います。

まずは、Chapter 2で出てくるpackageです。
definitionsというパッケージをdefinitions.sv内に定義します。
package definitions;
parameter VERSION = "1.0";

typedef enum {ADD, SUB, MUL} opcodes_t;

typedef struct {
logic [31:0] a, b;
opcodes_t opcode;
} instruction_t;

function automatic [31:0] multiplier (input [31:0] a, b);
return a * b;
endfunction // multiplier
endpackage // definitions


パッケージdefinitionsの定義を使用するモジュールALMALU.svに記述します。
module ALU (
input definitions::instruction_t IW,
input logic clock,
output logic [31:0] result
);

always_ff @(posedge clock) begin
case(IW.opcode)
definitions::ADD : result = IW.a + IW.b;
definitions::SUB : result = IW.a - IW.b;
definitions::MUL : result = definitions::multiplier(IW.a, IW.b);
endcase // case (IW.opcode)
end
endmodule // ALU

最後に、単純なテストベンチをALU_test.svに記述します。
import definitions::*;

module ALU_tb;
parameter PERIOD = 10;

logic clock;
instruction_t IW;
wire [31:0] result;

initial begin
clock = 1'b0;
IW.opcode = ADD;
IW.a = 32'b0;
IW.b = 32'b0;

repeat (5) @(negedge clock);

IW.a = 32'hdeadbeef;
IW.b = 32'b1;

@(negedge clock) IW.opcode = SUB;
@(negedge clock) IW.opcode = MUL;
@(negedge clock);

#1 $finish;
end

always #(PERIOD/2)
clock <= ~clock;

ALU DUT ( .* );
endmodule // ALU_tb

ModelSimでは、下記のコマンドでコンパイル・実行します。-svオプションをつけることで、SystemVerilogキーワードを認識してくれます。
vlib work
vlog -sv definitions.sv ALU_test.sv ALU.sv
vsim -c -do "add wave *; run 1us" ALU_tb


波形は下図のようになります。
enumで宣言したopcodes_t型の変数は、enum定義のまま表示されているので分かりやすいです。
waveform_030709.png

拍手[0回]

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

フリーエリア

最新CM

[04/11 なつたん]

最新TB

プロフィール

HN:
aston_martin
性別:
非公開

ブログ内検索

カウンター

アクセス解析