taa
は avv
から出力されたCSVをパースして、DBに書き込んだりDBからデータを取り出し、数え上げを行うCLIツールです
- Requirements
- Install
- Usage
- [taa push](#taa push)
- [taa push Transistor オプション](#taa push Transistor オプション)
- [taa push bufferSize オプション](#taa push bufferSize オプション)
- [taa push Parallel オプション](#taa push Parallel オプション)
- [taa push sweeps オプション](#taa push sweeps オプション)
- [taa push directory オプション](#taa push directory オプション)
- [taa push 引数](#taa push 引数)
- [taa get](#taa get)
- [taa get Transistor オプション](#taa get Transistor オプション)
- [taa get sweeps オプション](#taa get sweeps オプション)
- [taa get out オプション](#taa get out オプション)
- [taa get Range オプション](#taa get Range オプション)
- [taa help](#taa help)
- [taa version](#taa version)
- Config
- DBサーバー
- Shell
- Windows PowerShell
- Bash
- Zsh
- git 2.20.1 以上
- SQLServer
- dotnet 2.1.701 以上
GitHubからソースコードをクローンして.NETCoreでビルドします
# clone
$ git clone https://github.com/xztaityozx/taa
$ cd ./taa
# build. for linux
$ dotnet publish -c Release -r linux-x64 --self-contained true
# build. for win10
$ dotnet publish -c Release -r win10-x64 --self-contained true
ビルドすると ./bin/Release/netcoreapp2.1/linux-x64/publish
, もしくは ./bin/Release/netcoreapp2.1/win10-x64/publish
に taa
という実行ファイルが生成されます。コレに対してAliasを貼るといいと思います
# powershell
$ Set-Alias taa "/path/to/taa.exe"
# bash/zsh
$ alias taa="/path/to/taa"
Release ページ
プラットフォームにあったバイナリを選択してダウンロードしてください
taa
は複数のサブコマンドで機能を切り替えて使います
Usage: taa [command]
push DBにデータをPushします
get 数え上げます
help Display more information on a specific command.
version Display version information.
CSVファイルを解析してDBにデータを書き込みます
-
-d, --directory
--> 指定したディレクトリの下にあるファイルをすべてPushします -
-p, --Parallel
--> (Default: 1) 並列数です -
-b, --bufferSize
--> (Default: 50000) DBへのBulkUpsert一回当たりのEntityの個数です -
--config
--> コンフィグファイルへのパスです -
-N, --VtnVoltage
--> (Default: 0.6) Vtnの閾値電圧です -
--vtnSigma
--> (Default: 0.046) Vtnのシグマです -
--vtnDeviation
--> (Default: 1) Vtnの偏差です -
-P, --VtpVoltage
--> (Default: -0.6) Vtpの閾値電圧です -
--vtpSigma
--> (Default: 0.046) Vtpのシグマです -
--vtpDeviation
--> (Default: 1) Vtpの偏差です -
-s, --sigma
--> (Default: -1) Vtn,Vtpのシグマです.個別設定が優先されます -
--sweeps
--> (Default: 5000) number of sweeps -
--help
--> Display this help screen. -
--version
--> Display version information. -
input (pos. 0)
--> 入力ファイルです
pushするデータのVtnとVtpの値を指定します
-N, --vtnVoltage
--> Vtnのしきい値電圧です--vtnSigma
--> Vtnのシグマです--vtnDeviation
--> Vtnの偏差です-N, --vtpVoltage
--> Vtpのしきい値電圧です--vtpSigma
--> Vtpのシグマです--vtpDeviation
--> Vtpの偏差です-s,--sigma
--> VtnとVtpのシグマを同時に指定できます- 個別の設定がある(
--VtnSigma,--VtpSigma
が指定されている)場合はそちらが優先されます
- 個別の設定がある(
taa
は1つのCSVから複数のデータを取り出し、それらをある程度の個数にまとめてDBに書き込みます。 bufferSize
オプションではその個数を指定できます
-b, --bufferSize
--> DBへのBulkUpsert一回当たりのEntityの個数です
# ex) bufferSizeを200000にする
$ taa push -b 200000
CSV解析の並列数を指定できます
-p, --Parallel
--> (Default: 1) 並列数です
# ex) 並列数を15にする
$ taa push -p 15
解析するファイルのSweep数を指定します
--sweeps
--> (Default: 5000) number of sweeps
指定は、1つのCSVファイルが保存しているSweep数を指定します。例えば avv
で5000回のモンテカルロ・シミュレーションを行った場合はこのオプションに 5000 を指定します
# ex) sweep数を10000に設定する
$ taa push --sweeps 10000
複数のファイルを一度にpushする場合は、ディレクトリ自体を指定することで、pushすることができます。このオプションを有効にする場合、引数に渡したファイルは無視されます
-d, --directory
--> 指定したディレクトリの下にあるファイルをすべてPushします
# ex) ./result 以下にある avv の出力結果をまとめてDBにpushする
$ taa push -d ./result
引数にCSVファイルを渡すとそれを解析して、pushします。--directory
オプションを指定していると、この引数は無視されます
# ex) ./00001 を解析してpushする
$ taa push ./00001
taa get
はDBからデータを取り出して数え上げをします
-w, --sweepRange
(Default: 1,5000) Sweepの範囲を[開始],[終了値]で指定できます-e, --seedRange
(Default: 1,2000) Seedの範囲を[開始],[終了値]で指定できます-i, --sigmaRange
(Default: ) シグマの範囲を[開始],[刻み幅],[終了値]で指定できます--out
--> (Default: ./out.csv) 結果を出力するCSVファイルへのパスです--config
--> コンフィグファイルへのパスです-N, --VtnVoltage
--> (Default: 0.6) Vtnの閾値電圧です--vtnSigma
--> (Default: 0.046) Vtnのシグマです--vtnDeviation
--> (Default: 1) Vtnの偏差です-P, --VtpVoltage
--> (Default: -0.6) Vtpの閾値電圧です--vtpSigma
--> (Default: 0.046) Vtpのシグマです--vtpDeviation
--> (Default: 1) Vtpの偏差です-s, --sigma
--> (Default: -1) Vtn,Vtpのシグマです.個別設定が優先されます--sweeps
--> (Default: 5000) number of sweeps--help
--> Display this help screen.--version
--> Display version information.
taa
は数え上げの結果をCSVにしてファイルに出力します。その時のファイル名を指定できます
# ex) 出力先をA.csvにする
$ taa get --out A.csv
taa
はSweep,Seed,Sigmaそれぞれについて、指定した範囲のデータを同時に取り出すことができます。数値をカンマで区切って記述します
-w, --sweepRange
(Default: 1,5000) Sweepの範囲を[開始],[終了値]で指定できます-e, --seedRange
(Default: 1,2000) Seedの範囲を[開始],[終了値]で指定できます-i, --sigmaRange
(Default: ) シグマの範囲を[開始],[刻み幅],[終了値]で指定できます- この値を指定する場合、
vtnSigma
,vtpSigma
,sigma
の値は無視されます
簡単なヘルプを出力して終了します
taa get
, taa push
にも --help
というオプションが存在し、これをつけて実行すると、オプションのヘルプが出力されます
taa
のバージョン情報を出力して終了します
taa
のコンフィグには、数え上げの条件、DBサーバーの情報などを記述します
条件式に名前をつけ列挙します。この名前をexpressionsの設定で利用します
BNFは以下の通りです
<condition> := <name>: <cond>
<cond> := <value><operator><value>
<value> := <signal>, <number>
<signal> := <signalName>[<time>]
<time> := <number>
<number> := [0-9](.[0-9]+)*, [0-9](.[0-9]+)<siUnit>
<siUnit> := G, M, K, m, u, n, p
<operator> := <, <=, >, >=, !=, ==
<signalName> := <string>
<name> := <string>
<string> := ([a-zA-Z0-9])+
例えば、 AX
という信号線の時間 2.5ns
の値が 0.5以下
であるかどうかという条件式に、Z
という名前をつける場合
conditions:
Z: "AX[2.5n]<=0.5"
と記述できます。また AX
という信号線の時間 2.5ns
の値が BX
という信号線の時間 17.5ns
より大きいかどうかという条件式に、 C
という名前をつける場合
conditions:
C: "AX[2.5n]>BX[17.5n]"
と記述します
taa
が実際に数え上げに使う条件式を記述します
conditionsに列挙した名前を変数として使い条件式を組み立てます
扱える二項演算子、単行演算子は以下です
- && --> AND
- || --> OR
- ! --> NOT
また優先度を明確にするために、条件式を ()
でくくることが可能です
以下の例では、4つの数え上げ条件を指定しています
conditions:
A: "n1[2.5n]>=0.71"
B: "n1[10n]>=0.4"
C: "n1[17.5n]>=0.4"
expressions:
- "A&&B&&C" <-- A AND B AND C
- "A" <-- Aのみ
- "(!B)&&C" <-- (NOT B) AND C
- "!(A||C) <-- NOT(A OR C)
taa
が出力するlogの保存先のディレクトリです
DBの接続情報です。 taa
では SQLServer を利用します
connection: "Server=IPAddress,Port;User Id=username;Password=password"
注意 taa
は回路の情報を持ちません。したがって別の回路の結果をpushするとき、同じDBサーバーを指定しないでください。一度DBを止めダンプを取ったあと新たにDBを起動するか、別のDBサーバーを利用してください。DBサーバーも参考にしてください
実行中のマシンに任意の名前をつけることができます。内部で利用されます
内部で利用しているライブラリの依存により、taa
ではSQLServerを利用します。起動にはDocker-Composeが便利です
version: '3'
services:
mssql:
image: mcr.microsoft.com/mssql/server:latest
environment:
- TZ=Asia/Tokyo
- ACCEPT_EULA=Y
- MSSQL_SA_PASSWORD=VjfKGTC8Kt
ports:
- "28001:1433"
volumes:
- ./setup.sh:/setup.sh
- ./init:/init
command: "sh -c '/setup.sh & /opt/mssql/bin/sqlservr'"
#!/bin/bash
echo "start setup"
status="1"
wait=30
seq $wait |
while read L; do
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $MSSQL_SA_PASSWORD -Q "select 1" > /dev/null && {
echo "===== start configuration ====="
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $MSSQL_SA_PASSWORD -i /init/create_user.sql && echo "info: created user: for taa_push"
echo "===== finished configuration ====="
} && exit 1
done && echo "error: failed connect to SQL Server" || echo "success"
create login taa_push with password = '28ZENw6c8i'
GO
create user taa for login taa_push;
GO
alter server role sysadmin add member [taa_push];
GO
以上のようなファイルを用意し、docker-compose up -d
を実行すると localhost:28001
でSQLServerが起動します。停止は docker-compose down
です。 Important: DBの永続化はしていないため、停止するとデータが消えます
SAのパスワードは VjfKGTC8Kt
で、 taa push
用のUser( taa_push
)のパスワードは 28ZENw6c8i
です。この場合、設定ファイルの connection
には "Server=IPAddress,28001;User Id=taa_push;Password=28ZENw6c8i"
を指定します
SQLServerに設定できるパスワードはある程度の条件があります。MSのリファレンスをご覧ください