SystemVerilog HDL
HDL(ハードウェア記述言語)の一種、Verilog HDLの進化系?サブセット?
VHDLとは別物
そもそもVerilogとの違いは?
データ型:enum・多次元配列など
.* で同じ名前のものを勝手に繋いでくれる
always_ff など
わかりやすい記事とかはこのあたり
code:test.sv
module test(output wire out);
reg in1;
reg in2;
assign out = in1 & ~in2;
initial begin
$monitor($time,,
"in1: %b | in2: %b | out: %b",
in1, in2, out
);
end
endmodule
C言語で言うprintfは$display
これを$monitorにすると、引数に渡した値が変わるごとに更新される
変数(?)はreg・wire・logicの3種類がある
全部logicで良いらしい
initialの中身は一番最初に一回だけ実行される
begin~endはプログラミング言語のブロック{}と同等
always <条件> と書くと、条件が満たされた際に実行される
@(posedge in1) や @(negedge in2) など
posedgeは信号の立ち上がり、negedgeは逆([positive/negative] edge というわけ)
assignは見ての通り
正直よくわかってない
outputがwireだと直接書き換えられないっぽいので、regを生やしてassignし、regの方を変更する
代入文はブロッキング代入 = とノンブロッキング代入 <=
ブロッキング代入はシーケンシャルで、逐一処理が行われる つまり順番が大事
ノンブロッキング代入は正反対
実際に書いてみたものがこちら(幅8bit、深さ1024段のFIFO seccamp2022課題)