スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

task/functionのオーバーロードを検討してみた。(DPI-C編)

task/functionのオーバーロードを検討してみた。」の続きです。
今回は DPI-Cを使ったやり方です。
ただ、この場合だと C++のオーバーロードを使ったやり方になりますので、
シナリオは C++側に書くことになります。

  • C++側のコード
  •  1|#include <stdio.h>
     2|
     3|#ifdef __cplusplus
     4|extern "C" {
     5|#endif
     6|extern void sv_show( int );
     7|extern void sv_show2( int , int );
     8|#ifdef __cplusplus
     9|}
    10|#endif
    11|
    12|void show(int a){
    13|  sv_show(a);
    14|}
    15|
    16|void show(int a, int b){
    17|  sv_show2(a, b);
    18|}
    19|
    20|#ifdef __cplusplus
    21|extern "C" {
    22|#endif
    23|int c_main( void )
    24|{
    25|  int x = 2;
    26|  int y = 9;
    27|  show(x);
    28|  show(x, y);
    29|  return 0;
    30|}
    31|#ifdef __cplusplus
    32|}
    33|#endif
  • SystemVerilog側のコード
  •  1|module tb;
     2|
     3|  import "DPI-C" context task c_main();
     4|
     5|  initial begin
     6|      c_main();
     7|
     8|      $finish(2);
     9|  end
    10|
    11|  export "DPI-C" sv_show  = task task_show;
    12|  export "DPI-C" sv_show2 = task task_show2;
    13|
    14|  task task_show( input int a );
    15|    $display("--- a = %3d", a);
    16|  endtask : task_show
    17|
    18|  task task_show2( input int a, input int b );
    19|    $display("--- a = %3d, b = %3d", a,b);
    20|  endtask : task_show2
    21|
    22|endmodule : tb
  • 実行結果
  • # --- a =   2
    # --- a =   2, b =   9

というような感じです。

関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
09 | 2017/10 | 11
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 - - - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。