verilog DPI
SystemVerilog DPI
目次
- DPIとは
- 簡単な例
- 試験環境
- それぞれのDPI
- modelsim data to vcd dile
http://www.kumikomi.net/archives/2009/12/_1systemverilogdpi-c.php?page=2
DPIとは
DPIはDirect Program Interface. SystemVerilog IEEE 1800-2005で "DPI-C" として定義された。VerilogからC Function、CからVerilog Funcrion, Taskを呼び出す仕組み。
簡単な例
modelsim新版での方法、ここではフリー版を使用。
参照 5,6
使用ファイル
- hello.sv
- test.c
手順
- vlog -dpiheader dpi.h hello.sv # .h作成
- vlog hello.sv test.c # 実行ファイル作成
- vsim -c hello -do "run -all;quit" # 実行
内容
// hello.sv `timescale 1ns/10ps module hello; wire a, b: import "DPI-C" context task test(input int a, output int b); initial begin a = 1; b = 0; #3 test(a,b); $display("hello.sv a=%d to b=%d", a,b); $finish; end endmodule
/* test.c */ #include "dpi.h" int test(int a, int *p){ printf("test."); *p = a+1; return 0; }
modelsimの旧手順
Cからdllを作成し、vsimにdllを指定する。
参照7
使用ファイル
- test.c
- $SV_File
中間ファイル
- dpi.h : c用ヘッダーファイル
- cexports.obj : dll用stub オブジェクト
- dpi.o : c部分オブジェクト
- cimports.dll : dll
手順
- vlog $SV_File -dpiheader dpi.h # .h作成
- vsim -dpiexportobj cexports -c tb_top # stub作成
- gcc -c -g test.c -I$INC_PATH -I. -o dpi.o # C部分コンパイル
- gcc -shared -o cimports.dll dpi.o cexports.obj -L$LIB_PATH -lmtipli # リンク
- vsim -c tb_top -sv_lib cimports -do "run -all;quit" # 実行
試験環境
Modelsim フリー版、intel modlesim starter 20.1をCentos7x64 環境で実施。modelsimフリー版が32bit版と言うこともあり、下記pkgのi686版インストールが必要。
- glibc, libgcc, libXext, libXft, libstdc++
i686版導入例)
sudo yum install -y glibc.i686, libgcc.i686
modelsim free版はwindows版もあり。フリー版は3,000 execution lineまでの制限あり。単位詳細不明。
それぞれのDPI
ここではC/C++でBFMを作成し、veirilog と繋ぐ事を目標とする。夢はverilatorとmodelsimを繋ぎ、veritatorの拡張機能として使用する。modelsimしか扱えない暗号化RTLやIP coreをmodelsimで動かし、その他をVerilatorで実行する。
課題は、Verilatorが2値SIMでX,Zを扱えない。veitatorのマルチスレッド機能の有効性確認、veritatorの対応等。
品質確保向けSIMにはベンダ品を使い、機能SIMには用途に応じた使い分けを推奨する。
Data mapping
参照10
function task patameter
参照11
C to Verilog
Verilog to c
Verilog で定義されたFunction への引数にOpenArrayが使えない。OpenArrayは配列の一部で、bit型の様に配列をint 変換できる。
modelsim data to vcd
ref [3]
vcd 作成手順
- vcd file
.vcd - vcd add <instance_path>/*
- run simulation
- quit –sim
vcd to wlf/mdelsim wave data
- vcd2wlf <file.vcd> <file.wlf>
- Exit the current ModelSim session
- File menu -> Open -> file.wlf
新旧DPIビルドフロー
参照4
旧フロー
- DPI ヘッダー作成 from .v
- exportobj作成 from .v
- .dll or .so作成 by gcc
- vsim 実行
新フロー
task
taskはイン・アウトポートをもつ返り値がない、あるいは成功失敗を返す関数。C 。Pascalで言う所のProcedure.
ちなみに、verilogにもFunctionがある。outputが一つだけ、かつ、タイミングを持てないtask()。
例
module sv_task; int x; //task to add two integer numbers. task sum(input int a,b,output int c); c = a+b; endtask initial begin sum(10,5,x); $display("\tValue of x = %0d",x); end endmodule
Function
task()との違い
- タイミング遅延を持てない
- outputが一つだけ
- 内部からtask()を呼べない
- local.variableが無いときだけ、global変数にアクセスできる。
- Funcionはmodule内で定義され、呼ぶ事ができる。
// function definition module simple_function(); function myfunction; input a, b, c, d; begin myfunction = ((a+b) + (c-d)); end endfunction endmodule
module function_calling(a, b, c, d, e, f); input a, b, c, d, e ; output f; wire f; `include "myfunction.v" assign f = (myfunction (a,b,c,d)) ? e :0; endmodule
http://www.asic-world.com/verilog/task_func1.html
参考
[1] https://www.cc.gatech.edu/~hadi/teaching/cs3220/doc/modelsim/ModelSim_Users_Manual_v10.1c.pdf
[2] http://verilog.blog.shinobi.jp/verilog/-verilog-%20modelsim%E3%81%A7dpi%E3%82%92%E4%BD%BF%E3%81%86
[4] https://msyksphinz.hatenablog.com/entry/2015/10/14/000000
[5] https://msyksphinz.hatenablog.com/entry/2015/10/14/000000
[6] https://www.edaboard.com/threads/how-to-run-dpi-in-modelsim.303356/
[7] https://sites.google.com/site/playsystemverilog/testvector/dpi-c
[8] https://www.macnica.co.jp/business/semiconductor/manufacturers/intel/products/7066/ SystemVerilog
[9] https://www.doulos.com/knowhow/sysverilog/tutorial/dpi/ SystemVerilig DPI
[10] https://www.amiq.com/consulting/2019/01/30/how-to-call-c-functions-from-systemverilog-using-dpi-c/ Data mapping
[11] https://www.doulos.com/knowhow/sysverilog/tutorial/dpi/ Function/Task parameter restriction for openarray.
table in pdf to pandas, python
Table in pdf to pandas
PDF内の表をpandas fataframeにしてくれるモジュール taburaを使う。
tabulaのインストール
pip install tabula-py
java必須。
import pandas.as pd import tabura import re file = 'a.pdf' page = '10' dl = tabula.read_pdf(file, lattice=True, pages = page) # 列名に\rがあれば削除。 for d in dl: newcol = {} for col in d.columns: if re.search('\r', col): newcol[col]=col.replace('\r','') d.rename( columns=newcol) for.d.in dl: display(d)
pages は、'all'や [1,2,3]等のリストも可。 latticeは罫線がある表。lattice=Falseの時は、罫線なしの表も読み取る。
https://qiita.com/konitech913/items/4ef70e1f7753c824b40f
tabula
import tabula # Read pdf into list of DataFrame df = tabula.read_pdf("test.pdf", pages='all') # Read remote pdf into list of DataFrame df2 = tabula.read_pdf("https://github.com/tabulapdf/tabula-java/raw/master/src/test/resources/technology/tabula/arabic.pdf") dl3 = tabula(file, multiple_tables=True, lattice=True, pags=[1,3,5]) # convert PDF into CSV file tabula.convert_into("test.pdf", "output.csv", output_format="csv", pages='all') # convert all PDFs in a directory tabula.convert_into_by_batch("input_directory", output_format='csv', pages='all')
軽減税率
日本、2019
税率 | 適用品目 |
---|---|
10% | 下記以外 |
8% | 食品、酒以外の飲料、新聞 |
非課税 | 家賃 |
https://www.nta.go.jp/taxes/shiraberu/zeimokubetsu/shohi/keigenzeiritsu/01-1.htm
英国、2020
税率 | 適用品目 |
---|---|
非課税 | 土地・建物の譲渡・賃貸、保険、郵便、賭け事、 |
金融、教育、医療・福祉、埋葬・火葬、 | |
公的団体による美術館・動物園等の入場料など | |
ゼロ税率 | 食料品(人間の食料、動物の飼料は原則としてゼロ税率。ただし適用除外品目が多数) |
上下水道、出版物(書籍・新聞・雑誌)、運賃、処方に基づく医薬品、医療用品、 | |
子ども用の衣料・靴、女性用衛生用品など | |
軽減税率(5%) | 家庭用燃料・電力の供給、 |
高齢者・低所得者を対象とした暖房設備・防犯用品等、チャイルドシート、避妊用品など | |
標準税率(20%) | 上記以外の多くの商品、サービスに適用されます。 |
レストランでの飲食、ケータリング、宅配、温かい食べ物のテイクアウトを含みます。 | |
また、冷凍菓子類、菓子類(ビスケットを除く)、スナック菓子類、 | |
酒、飲料(フルーツジュースとペットボトルの水を含む)などにも適用されます。 |
なお、イギリスの付加価値税の課税ベースの狭さは、その導入当初から問題視されていました。
https://zeimo.jp/article/18596
スウェーデン、2019
税率 | 適用品目 |
---|---|
非課税 | 歯科診療費 |
医療費(治療の一環として投与される医薬品も課税非対象) | |
教育費 | |
6% | 交通機関(バス、タクシー、電車、飛行機(国内線))コンサート・サーカス・映画・劇場・バレエ・オペラ(これに類するチケットも含む)図書館・博物館・動物園スポーツイベント参加費(スポーツ観戦も含む)書籍(小冊子、パンフレット、リーフレット、絵本、ぬり絵も含む)新聞・雑誌CD・カセットテープ楽譜地図(壁掛けの地図、地形図も含む) |
12% | 食料品(飲み物(アルコール度数の低いビール含む)も含まれます)宿泊費(ホテル・ゲストハウス・ホステル含む)レストラン飲食・ケータリング利用キャンプ施設利用 |
25% | 前記以外のサービス・物品 |
例)多くのアルコール飲料(スピリッツ・ワイン・アルコール度数の高いビール)タバコ医薬品化粧品ペット用品(ドッグフードなど)カレンダーノートメモ帳オーディオブックメッセージカード |
https://norr.jp/truth-of-swedish-vat/
フランス、2019
フランスにおける軽減税率・非課税の適用品目(一例)
税率 | 適用品目 |
---|---|
10% | ・食料調理品または農業生産品のための未加工の農水産物 |
・レストランでの食事 | |
・即時消費のための調理済食品、ケータリング(酒類を除く) | |
・ホテル、キャンプ場などでの宿泊 | |
・旅客運送 | |
・動物園や博物館などの入場料など | |
5.5% | ・水、非酒飲料、食品(菓子、チョコレート、マーガリン、キャビアを除く) |
・書籍 | |
・演劇やコンサート料金、映画館入場料など | |
2.1% | ・演劇やコンサートの初演(140回目まで) |
・一部の医薬品 | |
・雑誌や新聞など | |
非課税 | ・医療 |
・学校教育 | |
・印紙や郵便切手 | |
・ロト、競馬、スポーツくじなど |
https://zeimo.jp/article/18451
デンマーク、2019
税率 | 適用品目 |
---|---|
25% | 下記以外 |
非課税 | 慈善活動、文化活動、非営利事業等のサービス |
非課税と25%の2種類のみとする理由。
(1)徴税コストを抑制する
(2)軽減税率の適用対象品目の峻別(しゅんべつ)が困難である
(3)税の歪(ゆが)みを抑制する
(4)高所得者は食料品に対しても相応の支出を行うため高所得者の方が軽減税率による負担軽減額が多くなる
(5)低所得者への配慮は社会保障給付によって行う方が効率的である
なお、慈善活動や文化活動、非営利活動などにより提供されるサービスなどは非課税となっています。
デンマーク大使館 フェイスブック公式アカウントより抜粋 2015/09/09
https://m.facebook.com/EmbassyDenmark/photos/a.248426095193921/867613036608554/