スポンサーサイト

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

DPI-C:C言語の型を使う。

SystemVerilog:DPI-Cで使える型を試す(シリーズ1)です。
今回は、C言語の型である
char, short int, int, long long, double, floatです。

試したソースコードがこちら↓
○Cコード
 1|#include <stdio.h>
 2|#include "dpiheader.h"
 3|
 4|int c_main(void) {
 5|  printf("Hello from c_main()\n");
 6|
 7|  char      char_in,      char_out;
 8|  short int shortint_in,  shortint_out;
 9|  int       int_in,       int_out;
10|  long long long_long_in, long_long_out;
11|  double    double_in,    double_out;
12|  float     float_in,     float_out;
13|
14|  char_in      = 8;
15|  shortint_in  = 8;
16|  int_in       = 8;
17|  long_long_in = 8;
18|  double_in    = 8.0;
19|  float_in     = 8.0;
20|
21|  c_char     ( char_in     , &char_out);      //printf("------ c in=%d, out=%d\n",char_in     , char_out);      
22|  c_shortint ( shortint_in , &shortint_out);  //printf("------ c in=%d, out=%d\n",shortint_in , shortint_out);  
23|  c_int      ( int_in      , &int_out);       //printf("------ c in=%d, out=%d\n",int_in      , int_out);       
24|  c_long_long( long_long_in, &long_long_out); //printf("------ c in=%lld, out=%lld\n",long_long_in, long_long_out); 
25|  c_double   ( double_in   , &double_out);    //printf("------ c in=%f, out=%f\n",double_in   , double_out);    
26|  c_float    ( float_in    , &float_out);     //printf("------ c in=%f, out=%f\n",float_in    , float_out);     
27|
28|  return (0);
29|}

○SystemVerilogコード
 1|module tb;
 2|  // import c_main
 3|  import "DPI-C" context task c_main();
 4|  
 5|  initial begin
 6|    c_main();
 7|    $finish(2);
 8|  end
 9|
10|  // export tasks
11|  export "DPI-C" c_char      = task sv_byte_task;
12|  export "DPI-C" c_shortint  = task sv_shortint_task;
13|  export "DPI-C" c_int       = task sv_int_task;
14|  export "DPI-C" c_long_long = task sv_longint_task;
15|  export "DPI-C" c_double    = task sv_real_task;
16|  export "DPI-C" c_float     = task sv_shortreal_task;
17|
18|  task sv_byte_task     (input byte       a, output byte       b);
19|    b = a * 10;
20|    $display("--- sv_byte      : input=%8d, output=%8d", a, b);
21|  endtask
22|
23|  task sv_shortint_task (input shortint   a, output shortint   b);
24|    b = a * 100;
25|    $display("--- sv_shortint  : input=%8d, output=%8d", a, b);
26|  endtask
27|
28|  task sv_int_task      (input int        a, output int        b);
29|    b = a * 1000;
30|    $display("--- sv_int       : input=%8d, output=%8d", a, b);
31|  endtask
32|
33|  task sv_longint_task  (input longint    a, output longint    b);
34|    b = a * 10000;
35|    $display("--- sv_longint   : input=%8d, output=%8d", a, b);
36|  endtask
37|
38|  task sv_real_task     (input real       a, output real       b);
39|    b = a * 100.11;
40|    $display("--- sv_real      : input=%8.4f, output=%8.4f", a, b);
41|  endtask
42|
43|  task sv_shortreal_task(input shortreal  a, output shortreal  b);
44|    b = a * 0.8;
45|    $display("--- sv_shortreal : input=%8.4f, output=%8.4f", a, b);
46|  endtask
47|
48|endmodule :

出力結果がこちら。
sv_dpi_ctype.png

long long intのprintfは知らなかったり。。。
試したコードは「こちら(github)」に置いてます。
関連記事

コメントの投稿

非公開コメント

long long int

プロフィール

Kocha

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

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