qshinoの日記

Powershell関係と徒然なこと

verilog DPI

SystemVerilog DPI

目次

  1. DPIとは
  2. 簡単な例
  3. 試験環境
  4. それぞれのDPI
  5. 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 作成手順

  1. vcd  file .vcd
  2. vcd add <instance_path>/*
  3. run simulation
  4. quit –sim

vcd to wlf/mdelsim wave data

  1. vcd2wlf  <file.vcd>  <file.wlf>
  2. Exit the current ModelSim session
  3. File menu -> Open -> file.wlf

新旧DPIビルドフロー

参照4

旧フロー

  1. DPI ヘッダー作成 from .v
  2. exportobj作成 from .v
  3. .dll or .so作成 by gcc
  4. vsim 実行

新フロー

  1. vlog?でdpi.h 作成
  2. vlog で実行ファイル生成
  3. 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

https://verificationguide.com/systemverilog/systemverilog-tasks/#:~:text=Tasks%20and%20Functions%20provide%20a,static

Function

task()との違い

  1. タイミング遅延を持てない
  2. outputが一つだけ
  3. 内部からtask()を呼べない
  4. local.variableが無いときだけ、global変数にアクセスできる。
  5. 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

[3] https://www.intel.com/content/www/us/en/programmable/support/support-resources/knowledge-base/solutions/rd07062010_692.html

[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') 

https://pypi.org/project/tabula-py/

軽減税率

日本、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/

沖縄慰霊の日、2020/6/23

沖縄慰霊の日

1945/4/1米軍沖縄本島上陸で始まった沖縄戦、第32軍司令官牛島満大将(当時中将)等の司令部自決日が終結日とされる。自決は6/22説と23説あり。1974制定「沖縄県慰霊の日を定める条例」が6/23を「慰霊の日」と定める。

玉城デニー沖縄県知事の平和宣言@ 6/23 https://t.co/1wyNigmGJZ

ios update process

steps

ios 13.5.1 へのupdateの場合

  1. 「ダウンロード中」
  2. 「アップデートを準備中」結構かかる
  3. 「アップデートを検証中」比較的早い
  4. 再起動、暫くかかる

  5. iCloud設定をアップデート中」

参照

https://www.imobie.jp/support/ios-wont-finish-updating.htm