2023年7月9日日曜日

Logicool ERGO M575Sを再ペアリングさせる

M575Sをひっくり返してペアリングボタン長押し,高速点滅モードにする.その状態でWindows の「Bluetoorhまたはその他のデバイスを追加する」からペアリングすればよい.
常時点灯はペアリング中,ゆっくり点滅はペアリング相手がいないという意味らしい.

ソースはYahoo知恵袋だよ.https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12257600962

2023年7月1日土曜日

電力解析でのスイッチング確率の設定する (set_switching_activity)

論理合成 (DesignCompiler) や静的遅延解析 (PrimeTime) における電力計算をスイッチング確率ベースで行う場合,スイッチング確率を外部から指定するために set_switching_activity コマンドを使う.DesignCompiler における set_switching_activity コマンドのオプションや使い方をまとめる.

dc_shell> set_switching_activity
[-static_probability static_probability]
[-toggle_rate toggle_rate]
[-state_condition state_condition]
[-path_sources path_sources]
[-rise_ratio rise_ratio]
[-period period_value | -base_clock clock]
[-type object_type_list]
[-hierarchy]
[object_list]
[-verbose]

-static_probability static_probability
電圧の High(1) の確率を指定する.引数は0から1.0までの小数である.0.25を指定すると,その時間における電圧 High の確率が25%として計算する.

-toggle_rate toggle_rate
正の小数として,0->1および1->0にトグルするトグル確率を指定する.単位時間におけるトグル確率として指定する.単位時間は -period オプションを用いて指定する.時間の単位はライブラリの物を利用する.クロックがある場合は,-base_clock オプションを用いる事で指定したクロック周期に対するトグル確率として指定する.(後述の利用例を見るとよい)

-state_condition state_condition
状態遷移条件によって振る舞いが異なるピンやセルなどの状態依存トグル確率を指定する.ただしセルやピンの電力の状態遷移依存性がキャラクタライザによって適切にキャラクタライズされている必要がある.このオプションはセルのリーク電流の状態依存性などをアノテートする事を可能にする.指定する state_condition が電力テーブルの内部表現と一致している必要がある.

-path_sources path_sources
パス依存のトグル確率を計算する時にパスの source を指定する.セルの電力のパス依存性がキャラクタライズされている必要がある.指定する path_source が電力テーブルの内部表現と一致している必要がある.

-rise_ratio rise_ratio
ピンのトグル数のうち立ち上がり波形の確率を,0から1の小数で指定する.0の場合はすべての入力が立ち下がり,1の場合はすべての入力が立ち上がりとして指定する.本オプションを利用する場合はトグル確率をユーザーが指定しなくてはいけない.初期値は0.5.

-period period_value
-toggle_rate オプションで指定したトグルが発生する時間期間を指定する.時間の単位はライブラリのものである.本オプションが指定された場合,実際のトグル確率は -toggle_rate オプションで指定した数字を本オプションで割った数字となる.本オプションを明示的に指定しない場合数字として1.0が利用される.

-base_clock clock
トグル確率を計算するために利用するクロックを指定する.本オプションによってクロックが指定された場合,際のトグル確率は -toggle_rate オプションで指定した数字を本オプションで指定したクロック周期で割った数字となる.クロック周期を変更しながら複数回 report_power コマンドを実行する事も可能で,その場合トグル確率は毎回クロック周期ごとに計算しなおされる.クロックとしてワイルドカード"*"を指定する事も可能で,その場合PowerCompiler はそのデザインに関係するクロックを自動的に検出してトグル確率を計算する.

-type object_type_list
スイッチング確率を設計者が明示的に指定したい場合に,対象となるオブジェクトを指定する.オブジェクトとしては以下を選択できる.
registers (sequential cell outputs),
tristates (tristate cell outputs),
black_boxes (black box cell outputs),
inputs (input design ports or hierarchical instance pins),
outputs (output design ports or hierarchical instance pins),
inouts (inout design ports / hierarchical instance pins),
ports (design port or hierarchical instance pins),
nets (nets),
regs_on_clocks clock_list (outputs of flip-flips clocked by the clocks in
clock_list),
clock_gating_cells (clock gating cell outputs),
memory (memory cell outputs).
本オプションを特定のインスタンスに指定する事でスイッチング確率を明示的に指定する事が可能である.registers もしくは regs_on_clock を指定した場合,順序セルの反転出力(QN),非反転出力(Q)が共にアノテートされる.その場合非反転出力は指定のトグル確率が,反転出力は1から指定のトグル確率を引いた値がアノテートされる.regs_on_clock を対象とする場合は,クロック名のリストである clock_list 引数を指定する必要がある.registers はフリップフロップおよびラッチが対象となるが,regs_on_clock はフリップフロップのみ対象であり,クロックゲーティングも対象である.
object_list 引数は対象を明示的に指定するが,-type は対象を暗黙に指定する.オプションは相互に排他的である.

-hierarchy
-type オプションと共に利用し,指定したオブジェクトの下位の階層すべてにアノテートする.本オプションを利用しない場合は,指定したオブジェクトのトップ階層のみアノテートする.

object_list
-static_probability オプションおよび -toggle_rate オプションの対象となる,ネット,ピン,ポート,セルなどのオブジェクトのリストを指定する.

-verbose
スイッチング確率をアノテートした結果を詳細に報告する.


コマンド例
次の例では,set_switching_activity は入力ポートのトグル確率を 33 / 1320 = 0.025,静的分布確率を 0.015 に設定する.
dc_shell> set_switching_activity -toggle_rate 33 -period 1320 
-static_probability 0.015 [get_inputs]

次の例では,入力ポートのトグル確率を0.25,静的分布確率を0.015に設定する.ここではクロック CLK が関連するクロックとして定義されているので,電力を計算する時のトグル確率はクロック周期 10 を用いて実際には 0.25 / 10 = 0.025 として計算される.
dc_shell> create_clock CLK -period 10
dc_shell> set_switching_activity -toggle_rate 0.25 -base_clock CLK -static_probability 0.015 -type inputs

次の例では状態遷移依存の静的分布確率を or1 セルにアノテートする.
dc_shell> set_switching_activity -static_probability 0.10 -state_condition "A & B" [get_cell or1]
dc_shell> set_switching_activity -static_probability 0.35 -state_condition "A & ! B" [get_cell or1]
dc_shell> set_switching_activity -static_probability 0.25 -state_condition "! A & B" [get_cell or1]
dc_shell> set_switching_activity -static_probability 0.30 -state_condition "! A & ! B" [get_cell or1]

次の例では,パス依存トグル確率を xor1 セルの Y 出力にアノテートする. 
dc_shell> set_switching_activity -toggle_rate 0.022 [get_pin xor1/Y]
dc_shell> set_switching_activity -toggle_rate 0.020 -path "A" [get_pin xor1/Y]
dc_shell> set_switching_activity -toggle_rate 0.002 -path "B" [get_pin xor1/Y]

次の例では現在のデザインにおけるすべての順序セルのアノテートされたスイッチング条件を除去する.
dc_shell> set_switching_activity -type registers -hierarchy

次の例ではクロック clk1 と clk2 を使うすべてのレジスタのスイッチング確率をアノテートする.
dc_shell> set_switching_activity -toggle_rate 0.1 -static_probability 0.5 -type {regs_on_clock {clk1 clk2}} -hierarchy

次の例では related_clock 属性としてワイルドカード"*" を指定したオブジェクトに対し,すべての入力にトグル確率0.2を,静的分布確率0.5を,アノテートする.電力解析結果は report_power コマンドで表示される.関連するクロックは自動的に推論され,トグル確率0.2がそれぞれのクロックの周期に会わせて相対的にスケールされる.
dc_shell> set_switching_activity -toggle_rate 0.2 -static_probability 0.5 -base_clock "*" -type inputs
dc_shell> report_power

2023年4月29日土曜日

研究費と機材とその移管の話

大学教員として活動するためには,様々な研究費を獲得する努力と,必要に応じて大学のポストを転々とせざるを得ない事がある(その証拠に,運営費交付金は右肩下がりだし,任期付きポストも増やすインセンティブがあると聞く).結果的に研究資金と研究機材を抱えて大学間を右往左往する羽目になるのだが,大学や研究契約内容によっては研究資金や研究機材の移管ができず置いて行かざるを得ないケースがある.

正確なことはわかっていないのだが,「研究契約の主体」と「資金や機材の寄付の可否」がポイントなのだろうか.

あくまで私の事例だが,
最初の引っ越し:国立大→私立大
経費:科研費は移管.共同研究費は移管できなかったと思う
機材:科研費,学内経費,共同研究費すべてを「寄付」と言う形で移管

次の引っ越し:私立大→私立大
経費:科研費は移管.共同研究費は移管できず,残るボス先生に移管
機材:科研費のみ移管.学内経費,共同研究費は移管できず(事務的には機材は「私がいた部屋の備品」で教員に所属していないので移管という考えが無い)
面白かったのは,国立大→私立大で移管した機材も,科研費と学内経費の分は移管できるが,共同研究費は移管できなかった事.受け入れはできるが持ち出しはできないの??!?

将来の引っ越し:私立大→???
経費:公的資金は移管できる.共同研究費は移管できない.
機材:公的資金は移管できる.共同研究費は移管できない.
とのことらしい.

任期付きポストでも研究費取って来いよでもいいのだが,任期切れたら持ち出しできませんは勘弁してほしいものよ.

2023年4月27日木曜日

とある助教の公募戦線記録(2)

これまでに出した公募の結果が一段落したのでまとめてみる.検討したけれど出していないものもあげます.

スペック
・男
・集積回路の物理設計よりのCAD屋.回路設計もするよ
・応募時の業績:論文誌6本,レター3本,国際会議20本,その他
・科研費は若手x2,共同研究x2,分担がいくつか
・任期5年再任有りの3年目

こだわったところ
・集積回路設計特にCADに関わりたい
・PIは,私が知っている教員か,外部資金などを取っている教員を希望した
・お金は取ってこれるので地方国立大とかがいいのでは
・理想は関西圏だけれど西日本ならいいかな
・2年間ぐらいかけてのんびり就活する予定だった

2020/? 公立大
・先方のPIから「うちに来ない?」と連絡がきた
・以前も公募があったが学会で「アナログ回路の人が欲しいんだよね」と言われたので応募を止めた所だった
・任期付き助教?
・2018年の公募で事前にお断りされて,転職直後に応募してよと言われても….

2021/8 私立大
・教授,准教授,もしくはテニュア准教授,「若干名」
・分野は集積回路全般なので問題なさそう
・前回就活時,学会で「数年後公募あるから応募したら?」と情報をもらっていたので応募
・応募後2週間ほどでお祈りメール
・落ちた理由は業績が足りないとの事 (事後に指摘された)

2021/10 私立大
・講師(任期付),2年+1年x3のようだ.5年が上限
・分野は集積回路全般なので問題なさそう
・英語講義を6コマ担当するとのこと….研究できるのか?
・応募2週間後に面接,ボコボコにされる
・面接2週間後に内々定

2021/10 国立大
・准教授
・分野は集積回路全般,だけど本命は超伝導とか光コンピューティングみたい
・書類出そうと思っていたが,講師が先に決まってしまったので見送った

感想
・意外に教育歴は見られる?面接で「今大学で教えている科目の演習科目やってほしいな」と言われた
・でも「演習科目やってほしいな」は別の先生から「いらん」と言われるなど
・現在の担当科目名だけでなく内容も書いた方が面接の時の議論のネタになるからよいみたい
・JRecinの過去ログは消えるのでPDFは保存しておくべき
・(本公募ではなく)知り合いが受けた公募では,JRecinでは「再任あり」とあったが面接では「再任無し」になったケースがあったと聞いた,で蹴ったらしい
・上げるつもりはないので転職を考えておきなさいと言われています,厳しい(>_<),が業績ないもんな
・准教授ではなく講師(任期付)なのは察してください.着任してから理解したけれどほぼ助教だこれ…

過去の公募戦線ログ

2023年4月26日水曜日

ECS LIVAX2-120 に Linux Mint を入れてVNCサーバーにする

 ただの日記です.タイトル通り,ECS LIVAX2-120 に Linux Mint (XFCE) を入れてVNCサーバーにします.スペックは以下の通り.
・Celeron N3050(1.6GHz、ビデオ機能内蔵)
・DDR3L 4GB
・SSD 128GB
・HDMI 1.4a(30Hz 4K出力対応)、ミニD-Sub15ピン
・Gigabit Ethernet
・IEEE 802.11ac/a/b/g/n無線LAN、Bluetooth 4.0(ただし使えていない)
・USB 3.0×3

元々は Cent OS 7 でこれは後述するネットワークの問題はなかったのだが,Gnome があまりに重たすぎるので軽量めの Linux Mint に移行した.

Windows PC に VNC Viewer を入れて,ポートフォワードで Server に接続する.ネットワーク構成は以下のような感じ.

Windows PC (VNC Viewer)
↓ [ssh]
Linux Mint (VNC Server)
↓ [ssh -X]
計算機サーバー群

直接計算機サーバーに VNC を立ち上げないのは,サーバーにVNCのポートを開けるのが怖い事とサーバーごとに個別に VNC Server を立ち上げなくてすむ利点がある.

Linux Mint 21.1 をダウンロードし,Rufus でブート USB を作成.インストールは普通に実施する.VNC サーバーにするために SSH (oepnssl) と VNC (tigerVNC) をインストールするのだが, 大学のネットワークが複雑すぎてインターネットに到達できない.仕方なく Buffalo の USB WiFi ドングル (WI-U2-433DMS/N) をさして携帯テザリングしようと思ったのだが,ドライバがなくて WiFi が使えない.なので以下のサイトを参考に,Windows マシンで Github のドライバのデータをダウンロードして,Linux Mint 上でコンパイルした.
https://hirotaka-hachiya.hatenablog.com/entry/2020/12/14/184422

WiFi テザリングができるようになったら,SSH と VNC を「ソフトウエアの管理」からインストールする.アプリが入ればインターネットは不要なので, WiFi は消えてしまって構わない.

VNC Server を起動するも X が正常に立ち上がらない.~/.vnc/xstartup を以下のように編集して VNC を再起動する.

def 
export XKL_XMODMUP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
/etc/X11/Xsession
/usr/bin/startxfce4 &
/usr/bin/xfce4-session &
/usr/bin/xfce4-pannel &
/usr/bin/xfce4-terminal &

VNC Server の起動はサービスに登録するのがスマートだろうが,過去の癖から手動で起動するようにしている.以下のエイリアスを作成している.Virtuoso を起動するため "-depth 24" で色解像度 24bit を指定する.
alias vncserver4k="vncserver -geometry 3800x2000 -depth 24"

すべての準備がすめば Windows PC で以下のバッチファイルを作成して,ポートフォワードと VNC Cliant を起動する.
start /b cmd /c "C:\PROGRA~1\PuTTY\putty.exe -load liva -l [userID] -pw [userPW]"
timeout 30
start /b cmd /c "C:\PROGRA~1\UVNCBV~1\UltraVNC\vncviewer.exe -connect 127.0.0.1::5901 -nocursorshape -notoolbar -noauto -password [userPW] -8greycolors"
timeout は SSH セッションが成立するのに時間がかかるが予測がつかないので少し長め,接続を確認したら手動でスペースを打って次に進めている.パスワード平文で保存しているのでセキュリティ的には危ないかもしれない.

Celeron N3050 は今となってはゴミかもしれないが,シンクライアント的に使うにはまあ十分かなぁ.4KのVNCもなんとか使えてる.ただしCADのログファイルがガンガン Terminal に出力されると途端にカクカクし始めるけれど...

2023年3月24日金曜日

THE RIGHT WORD fraction, fragment, part, piece, portion, section, segment

 よくわからなくなったので調べた.New Oxford American Dictionaly からです.

Fragment: 破損が発生したことを示唆し (fragments of pottery),多くの場合ガラスや陶器などの脆い物質を指す.
Segment: 全体が自然または既存の分割線に沿って分離されていることを示唆する (a segment of an orange). Section は,ある全体を形成するための,明確に分離された一方で他の部分と隣接する一部を示唆する (section of bookcase) .
Fraction: 通常、実質的ではないが明確に線引きされた部分を示唆する (a fraction of her income) .Portion は誰かに割り当てられた部分を示す (her portion of program) .
Piece: 全体から分離したどのような一部にも利用でき,最も良く使われる.

特に意図がなければ Piece を使えば良さそうだ.

2023年3月17日金曜日

近隣国の○○○○的組織

・Taiwan Semiconductor Research Institute (TSRI)
台湾の先生が使っているようだ.先生は「CICに質問しなさい」と学生に指導しているので,質問やサポートを受け付けてくれるのかな,うらやましい.

中身はよくわかっていませんが,台湾はクラウドでチップ試作できるのでしょうか.個々のラボで環境整備しなくて良いのでいいな.

どんなEDAがあってどうやって使うとか親切な説明があって涙がでます.参考にさせてもらおう.TSRI ってNational Chip Implementation Center (CIC) が元なのかな,
を選ぶとTSRIにリダイレクトされますね.

・IC Design Education Center (IDEC)
https://www.idec.or.kr
「韓国の半導体産業の競争力(한국 반도체산업의 경쟁력)」だそうです.EDAの一覧がカタログになってます.ちゃんとまとまっててめっちゃいい.
http://doc.idec.or.kr/eunjuseok/EDA_Tool_%EC%86%8C%EA%B0%9C%EC%9E%90%EB%A3%8C1.pdf

日本の先生も頑張って環境構築のドキュメント作成してくださっているけれど,こういう網羅的な資料があると「使ってみよう」って思う気がするんだけどな.(でも未だにINCISIVとか書いてあるし無理か...)

中国に同じような組織があるのかはわからなかった.留学生が言うには ASIC 向けの EDA を大学で使うのは難しく FPGA 実装が主流だそうだ.

2023年2月5日日曜日

LTSpiceでMOSFETの動作点を解析する

 LTSpice でも .op で MOSFET の動作点を表示できる.制御記述 .op のみを記述し( .tran は書かない),"Run" を押すとシミュレーションが走る.まず各ノードの電圧電流が表示がポップアップされるが閉じておく.次に "View" -> "SPICE Error log"を選択すると,MOSFET の動作点解析結果を見ることができる.

2023年2月3日金曜日

ICC の配線を早めに諦めさせる (set_route_opt_strategy)

IC Compiler で配置配線を行うと IC Compiler は設計が収束するまでブロック分割などの配線ストラテジを変えながら配線を何度もトライするが,設計初期の見積もりなどでは試行錯誤の回数を減らして CPU 占有時間を減らしたい.配線 (route_opt) の戦略を変えるには,set_route_opt_strategy コマンドがあり,うち2つのオプションにて配線の試行回数を制御できる.

set_route_opt_strategy --route_drc_threshold [NUM1] --search_repair_loops [NUM2]

--search_repair_loops オプションは,配線時に Violation が出たときに,配線戦略(ブロック分割など) を変えて再度配線を行う試行回数の数を制御する.NUM2 は0から500の整数で,その初期値は classic router では15,zroute では10.

--route_drc_threshold オプションは,詳細配線時にどれだけ Violation が出たら配線そのものを諦めるかという閾値.初期値は3000.-1を指定すると,IC Compiler は(DRC Thresholdを?)チェックせず無制限に詳細配線の再実行を行う.

ちなみに(?),Synopsys IC Compiler は命令するとそれが理不尽でも延々と頑張る(そしてえらく時間がかかってようやく諦める)印象で,Cadence SoC Encounter はいくら命令しても一向に言うことを聞かない印象である.Innovusは知りません.

2023年1月31日火曜日

OCV,AOCV,POCV,LVF

あまりよくわかっていないので(今更)まとめた.いずれもチップ内ばらつきを取り扱うための手法.

Static Timing Analysis (STA)

STAではパス中の論理セルの遅延を積算していく事で回路遅延を求めていく.以下の図の右側の Flip-Flopの セットアップ制約 T_setup は

T_setup > T_clk - ( T_launch - T_capture )

である.ここで T_clk はクロック周期,T_lauch はlauch path 遅延(データパス遅延),T_capture は capture path 遅延(クロックパス遅延)である.なお共通項は取り除かれる(Common Path Pessimism Removal).



On-Chip Variation (OCV)

OCV では derate factor を用いて回路遅延の平均からのずれを表現する.例えば回路中の論理ゲートが 3σ 遅延で ±5% ばらつくとする.OCV では,オンチップばらつきによって T_launch が 5% 悪化し,T_capture が 5% 改善すると考える.するとセットアップ制約は

T_setup > T_clk - ( T_launch * 1.05 - T_capture * 0.95)

と悪化する.各セルが Nσ でどの程度ばらつくか予測がつけばよいため,極端な話 Monte-Carlo シミュレーションは不要かもしれない.ただし段数効果が入っていないこの解析結果はかなり悲観的である.

Advanced OCV (AOCV)

AOCV (a.k.a SBOCV: Stage Based OCV) ではパスの段数と距離をパラメータとして持つ.パスの段数はランダムばらつきの影響力に寄与し,段数が多いほどばらつきは減る.距離はシステマティックばらつきの影響力に寄与し,距離が長いほどシステマティックばらつきが多い.この二つのパラメータを得るために,キャラクタライザは同じ論理ゲートのチェーンを作成し,Montecalro Simulation もしくは感度シミュレーションを用いてばらつきモデルを作成する.ばらつきモデルは,段数あたりの derate factor のテーブルで,early (改善方向)と late (悪化方向) の2つを持つ.

具体的には異なる論理段数のチェーンに対して

[early derate factor] = ([nom. delay] - 3σ)/ [nom. delay]
[late derate factor]  = ([nom. delay] + 3σ)/ [nom. delay]

で各 derate factor を計算し,それをテーブルとして

object_type: lib_cell
delay_type: cell
rf_type: rise
object_spec: */INV
derate_type: early
depth: 1 2 3 4 5
distance: 0
table: 0.87 0.91 0.92 0.93 0.94

object_type: lib_cell
delay_type: cell
rf_type: rise
object_spec: */INV
rf_type: rise
derate_type: late
depth: 1 2 3 4 5
distance: 0
table: 1.17 1.12 1.09 1.08 1.07

の様に保持する.(fallも同様)

パス遅延の計算は,通常の STA 同様各論理ゲート遅延の和を取れば良い.段数効果を考慮するため OCV に対してより現実的であるが,同一の論理ゲートのチェーンで評価しているため,論理回路の遅延評価には不向きである.そのためクロックの様な同じ論理素子のチェーンの評価で使われる.距離の情報も必要なので,ネットリストから各素子の X-Y 座標のデータを取り込む必要がある.

Liberty Variation Format (LVF)

POCV: Parametric OCV (a.k.a SOCV: Statistical OCV) は derate factor そのものを持つのでは無く,POCV Coefficient と呼ぶばらつきの相対値 (σ/μ) を利用する.プロセスパラメータを Sweep して POCV Coefficient を計算する.そのため以下のような POCV モデルが生成される.

ocvm_type: pocvm
object_type: lib_cell
delay_type: cell
derate_type: early
rf_type: rise
object_spec: */INV_coefficient: 0.04
coefficient: 0.04

ocvm_type: pocvm
object_type: lib_cell
delay_type: cell
derate_type: late
rf_type: rise
object_spec: */INV_coefficient: 0.04
coefficient: 0.04

POCV の結果は,個々のセルごとのばらつき情報として出力するか, LVF (Liberty Variation Format) として出力する.slew-load 依存伝搬遅延,遷移遅延,slew-slew 依存ばらつきをモデル化している.LVF では μ に加えて σ のテーブルを持つ.

遅延の計算では,各論理ゲートを通過するごとに以下の遅延 (Incr) を足し合わせていく.

Incr = Mean ± K * (Sensit_cell)^2/ (Sensit_slack)

ここで,Mean はパス中の一つの論理ゲートの遅延の平均,K はtiming_pocvm_report_sigma という変数(KσのK?),Sensit_cell は論理ゲートの 1σ ばらつき,Sensit_slack はパス Slack の 1σ ばらつき,と思われる.
(PrimeTime の説明だが,これ合ってるのか?)

こちらの Youtube動画 だともうちょっとシンプルに
Total_delay = (μ_1+ ...+μ_n) + sqrt(σ^2_1+...+σ^2_n) * N
であった.(NはNσ?)

この LVF は遅延の平均(μ)と標準偏差(σ)を利用しているので,分布が正規分布である事を想定しており,Regular-LVF と呼ばれる.さらに微細なプロセスではパス分布がガウス分布に従わないので,平均(μ)と標準偏差(σ)に加え,平均のシフト量,スキュー,尖度を考慮した,Moment-Based LVF を利用する必要があるそうだ.

なんかここまで来ると SSTA と変わらなくない?と思ってしまう.SSTA と違いパス単位の検証しかせず Max, Min 演算をしないのがミソなのかな...