fc2ブログ

DPI-C:bit, logicの型を使う。

SystemVerilog:DPI-Cで使える型を試す(シリーズ2)です。
今回は、bit, logicです。

試したソースコードがこちら↓
○Cコード
 1|#include <stdio.h>
 2|#include "dpiheader.h"
 3|
 4|// extern int c_svbit( const svBitVecVal*, svBitVecVal*);
 5|// extern int c_svlogic( const svLogicVecVal*, svLogicVecVal*);
 6|
 7|int c_main(void) {
 8|  printf("Hello from c_main()\n");
 9|
10|  svBitVecVal   bitvec_in,   bitvec_out;
11|  svLogicVecVal logicvec_in, logicvec_out;
12|
13|  bitvec_in   = 8;
14|  logicvec_in.aval = 8;
15|  logicvec_in.bval = 0;
16|
17|  c_svbit   ( &bitvec_in, &bitvec_out);
18|    printf("------ c in=%d, out=%d\n",bitvec_in, bitvec_out);     
19|  c_svlogic ( &logicvec_in, &logicvec_out);
20|    printf("------ c in(a)=%d, out(a)=%d, in(b)=%d, out(b)=%d\n",
21|           logicvec_in.aval, logicvec_out.aval, logicvec_in.bval, logicvec_out.bval);     
22|
23|  // input svLogicVecVal.bval data
24|  printf("\n");
25|  printf("--- test svLogicVecVal.bval data\n");
26|  logicvec_in.aval = 3;
27|  logicvec_in.bval = 2;
28|  c_svlogic ( &logicvec_in, &logicvec_out);
29|    printf("------ c in(a)=%d, out(a)=%d, in(b)=%d, out(b)=%d\n",
30|           logicvec_in.aval, logicvec_out.aval, logicvec_in.bval, logicvec_out.bval);     
31|
32|  return (0);
33|}
34|

○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_svbit   = task sv_bit_task;
12|  export "DPI-C" c_svlogic = task sv_logic_task;
13|
14|  task sv_bit_task      (input bit  [7:0] a, output bit  [7:0] b);
15|    b = a * 10;
16|    $display("--- sv_bit   : input=%d, output=%d", a, b);
17|  endtask
18|
19|  task sv_logic_task    (input logic[3:0] a, output logic[3:0] b);
20|    b = a + 4;
21|    $display("--- sv_logic : input=%d, output=%d", a, b);
22|  endtask
23|
24|endmodule : tb
25|

出力結果がこちらになります。
sv_dpi_bit_logic.png

ちょっと svLogicVecVal のC言語の型に戸惑った。
bval側の値は 0 が正しそうですね。

試したコードは「こちら(github)」に置いてます。

追記
svLogicVecValのaval, bvalについて
「IEEE1800-2009 H.10.1.1 Scalars of type bit and logic」に記載があります。
/* canonical representation */
#define sv_0 0
#define sv_1 1
#define sv_z 2 /* representation of 4-st scalar z */
#define sv_x 3 /* representation of 4-st scalar x */
この値は(bval,aval)になっているようです。
早速、テストコードを変更してテストしてみました。
dpi_c_sv_logic2.png

ちゃんとinput側で「Z, X」になってますね。
また、bit位置も確認OK。ソースコードは同じリポジトリにて更新してます。
プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/

はてなブログがメイン場に
github:Kocha
イベントカレンダー

カレンダー
03 | 2012/04 | 05
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
アクセス人数