Verification Engineerの戯言
モジュールでは、内部の動作を記述します。Bluespecでは、SystemVerilogのようにモジュールがポートを持ちません。
その代わりにインターフェース・メソッドというものを定義し、
その定義したインターフェースをモジュールに対応つけます。
その代わりにインターフェース・メソッドというものを定義し、
その定義したインターフェースをモジュールに対応つけます。
package FirstAttempt; // My first design in the cool Bluespec language String s = "Hello world"; module mkAttempt(Empty); rule say_hello; $display(s); endrule endmodule endpackage
括弧の中にあるのがインターフェースになります。
この例では、Emptyという名前のインターフェースをmkAttemptモジュールに対応付けています。
Emptyインタフェースは、Bluespecで定義済みのインターフェースです。
((その1)の最後のコードで追加したものです)
この例では、Emptyという名前のインターフェースをmkAttemptモジュールに対応付けています。
Emptyインタフェースは、Bluespecで定義済みのインターフェースです。
((その1)の最後のコードで追加したものです)
Bluespecでは、モジュールの動作を ルール(rule/endrule)を使って記述します。
ルールは0個以上記述することができます。各ルールはサイクル毎に起動されます。
(一般的には、Bluespecでは、サイクルはクロック単位と考えていいと思います)
(SystemVerilogで記述すれば、
always @(posedge CLK)あるいはalways @(negedge CLK)だと思えば良いでしょう)
ルールは0個以上記述することができます。各ルールはサイクル毎に起動されます。
(一般的には、Bluespecでは、サイクルはクロック単位と考えていいと思います)
(SystemVerilogで記述すれば、
always @(posedge CLK)あるいはalways @(negedge CLK)だと思えば良いでしょう)
この例では、say_helloというルールを定義し、サイクル毎に$display(s)を実行します。
つまり、Hello World をサイクル毎に表示することになります。
($displayは、SystemVerilogのシステムタスク$displayと同じです)
つまり、Hello World をサイクル毎に表示することになります。
($displayは、SystemVerilogのシステムタスク$displayと同じです)
% bsc -verilog FirstAttempt.bsv
Verilog HDLファイルが生成されてません。どうしてでしょうか?
実は、下記のコードのようにmoduleの前に (* synthesize *) を書かないと
Verilog HDLコードには変換されません。
このキーワードがあるモジュールのみ、Verilog HDLに変換されます。
実は、下記のコードのようにmoduleの前に (* synthesize *) を書かないと
Verilog HDLコードには変換されません。
このキーワードがあるモジュールのみ、Verilog HDLに変換されます。
package FirstAttempt; // My first design in the cool Bluespec language String s = "Hello world"; (* synthesize *) module mkAttempt(Empty); rule say_hello; $display(s); endrule endmodule endpackage
`ifdef BSV_ASSIGNMENT_DELAY `else `define BSV_ASSIGNMENT_DELAY `endif module mkAttempt(CLK, RST_N); input CLK; input RST_N; // handling of system tasks // synopsys translate_off always@(negedge CLK) begin #0; $display("Hello world"); end // synopsys translate_on endmodule // mkAttempt
rule記述の部分がalways文になって、クロック(なぜか立ち下がり)毎に"Hello World""を表示します。
検証、Verification、Bluespec SystemVerilog