Verification Engineerの戯言
Bluespec SystemVerilogでCounterをBSV 101: Designing a Counter (1/09)で学びます。
このCounterについて、6回に分けて書きていきます。
Bluespec SystemVerilogのコードは、BSV 101: Designing a Counter (1/09)の中と同じものです(コードの著作権は、Bluespecにあります)。
Bluespec SystemVerilogのコードは、BSV 101: Designing a Counter (1/09)の中と同じものです(コードの著作権は、Bluespecにあります)。
ファイル名は、MyCounter.bsvとします。
HELLO WORLDのときは、モジュールはEmptyというインターフェースを持ちましたが、
Counterは、次のようなインターフェース(Counter)を持ちます。
HELLO WORLDのときは、モジュールはEmptyというインターフェースを持ちましたが、
Counterは、次のようなインターフェース(Counter)を持ちます。
interface Counter; method Bit#(8) read(); method Action load(Bit#(8) newval); method Action increment(); endinterface
Counterインターフェースは、3つのメソッド(method)(read、load、increment)があります。
readメソッドは、戻り値(8ビット)を持ちます。一方、loadとincrementメソッドは、戻り値はありません。
また、loadメソッドは、引数newvalを保ち、型は8ビットになります。
readメソッドは、戻り値(8ビット)を持ちます。一方、loadとincrementメソッドは、戻り値はありません。
また、loadメソッドは、引数newvalを保ち、型は8ビットになります。
次に、mkCounterモジュールを定義していきます。
(* synthesize *) module mkCounter(Counter); Reg#(Bit#(8)) value <- mkReg(0); method Bit#(8) read(); return value; endmethod method Action load(Bit#(8) newval); value <= newval; endmethod method Action increment(); value <= value + 1; endmethod endmodule
mkCounterモジュールの定義の前に(* synthesize *)が必要です。
これが無いと、Verilog HDLには変換されませんので注意してください。
mkCounterモジュールは、Counterインターフェースを持つことになります。
(Hello Worldの例では、Emptyインターフェースになっていました。)
これが無いと、Verilog HDLには変換されませんので注意してください。
mkCounterモジュールは、Counterインターフェースを持つことになります。
(Hello Worldの例では、Emptyインターフェースになっていました。)
mkCounterモジュールは、内部に8ビット幅のレジスタ(value)を持ちます。
Reg#(Bit#(8)) value <- mkReg(0);Reg#(Bit#(8))のReg、Bitは定義済みものです。
mkCounterモジュールは、Counterインターフェースの3つのメソッドを実装しています。
インターフェースは、method/endmethodで囲みます。
インターフェースは、method/endmethodで囲みます。
method Bit#(8) read(); return value; endmethodreadメソッドは、戻り値としてBit#(8)の型であるvalueを返しています。
検証、Verification、Bluespec SystemVerilog