Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

「心理的な安全性」の原点?エドモンドソン さんの書籍「恐れのない組織」を読んだ!

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

はじめに

恐れのない組織 - 「心理的な安全性」が学習・イノベーション・成長をもたらす を読みました。 紙の本は2420円ですが、Kindleは半額の1210円です。文字以外の部分は、Kindleだと読みにくいですが、半額ならね。

心理的な安全性?って、Googleからじゃないんだね。

あたしは、この「心理的な安全性」ということは、下記のツイートにあるように、Googleが発表したものだと思っていました。2年ぐらい。

Googleの「プロジェクト アリストテレス

英語では、psychological safety

この件に関しては、2016年3月31日にこのブログで書いていました。

vengineer.hatenablog.com

著者のエイミーC. エドモンドソン さんとは?

ダイアモンド・ハーバード・ビジネスレビューに下記のような紹介ページがありました。かなり詳しく書いてあります。

www.dhbr.net

心理的安全性って、何?

上記のダイアモンド・ハーバード・ビジネスレビューのサイトに、

チームの「心理的安全性(psychological safety)」に着目した。「心理的安全性」とは、関連のある考えや感情について気兼ねなく発言できる雰囲気や環境を指す。

とありました。

あ、「心理的安全性」じゃなくて、チームの「心理的安全性」なんだ。。。だから、Googleの「プロジェクト アリストテレス」の研究に繋がるんだ。。

ということは、チームが変わると状況が変わる。。。。

昨年に、この「心理的安全性」がTwitterによく流れてきたのですが、組織の「心理的安全性」っぽい表現していたのような気がします。 組織だと、範囲が広いのでその中での「心理的安全性」を保つのが難しそう。。。

今回読んだ本、原題「、The Fearless Organization: Creating Psychological Safety in the Workplace for Learning, Innovation, and Growth, 2018.」は、この「心理的安全性を生み出す重要性」について、書いたんだって。。。

「チーム」から「チーミング

エドモンドソンの定義によれば、チーミングとは、複雑で不確実性の高い状況でもっとうまい仕事のやり方を考え出しながら、協働して課題を片づける方法である。市場での競争が激化し、顧客ニーズの予測しにくい今日の事業環境では、メンバーを固定するのではなく、組織内外の分野の異なるメンバーで結成される創発的なチームワークである「チーミング」が必要とされる、と主張する。

ということで、「チーム」から「チーミング」が必要だと。。。

このお話として、TEDにて、「他人同士の集まりをチームに変える方法」で12:37のビデオが公開されています。(めっちゃ、足が細いのが気になりました。。。)

おわりに

心理的安全性」、この言葉だけだと、いろいろなとらえ方があるとおもうんだけど、この本を読んでみて、思ったことは。。。

個人の総合力、と、組織での個人の総合力を束ねる力 だと、束ねる力の中に、「心理的安全性」が重要だということに。。。

vengineer.hatenablog.com

UHDM と UHDM-Verilator Integrationのビルド

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

はじめに

ASIC や FPGA の開発にも下記のようなオープンソースのソフトウェアを使う動きが活発になってきました。

これらのソフトウェアとは別に、SystemVerilog をサポートするソフトウェア間のモデルを共通化という UHDM (Universal hardware Data Model) というプロジェクトがあります。

UHDM とは?

UHDM (Universal Hardware Data Model) は、IEEE standard の SystemVerilog 2017 の 976~1050頁で詳細に記述されているオブジェクトモデルに準拠したものです。このオブジェクトモデルは、SystemVerilog の VPI (Verilog Procedural Interface) を使ったものです。VPI は、Verilog HDL の PLI 2.0 (Programming Language Interface version 2.0) と同じもので、IEEE 1364 Programming Language Interface standard から IEEE 1800 (SystemVerilog) に取り込まれたものです。

UHDM に関する資料

UHDM は名前が示すようにモデルです。Antmicro が このUHDMを論理合成ツールである YosysVerilog HDL/SystemVerilog シミュレータである Verilator に統合するプロジェクトを行っています。

AntMicroのVerilator

Verilator は本家のVerilatorではなく、AntMicroのVerilator with a dynamic schedulerです。 Veriator with a dynamic scheduler は、本家のVerilatorに対して、

  • # 遅延
  • initial 文
  • wait 文
  • event
  • fork
  • Randomize class function with constraints

をサポートしています。

UHDM-Verilator Integration

UHDM と AntMicro の Verilator with a dynamic scheduler の統合は、uhdm-verilator branch に行われています。

ビルド

Verilator で UHDM を使えるようにした、UHDM-Verilator Integration をビルドします。

準備として、下記のパッケージをインストールします。

$ sudo apt install g++-7 cmake build-essential tclsh \
 ant default-jre swig google-perftools libgoogle-perftools-dev \
 python3 python3-dev

また、Surelog のビルド時に、"No package 'uuid' build というメッセージが表示され、cmake が失敗するので、uu-dev パッケージをインストールします。

$ sudo apt install uuid-dev

UHDM-Verilator のビルドです。

$ git clone -b uhdm-verilator https://github.com/antmicro/verilator.git uhdm-verilator
$ cd uhdm-verilator
$ git submodule update --init --recursive
$ ./build_binaries.sh
$ cd uhdm-integration
$ make

WSL2 (WSL)のビルドでエラーが発生した

WSL2 でビルドすると、third_party/capnproto/c++src/capnp のところで次のようなエラーが発生する場合があります

[ 46%] Generating ../src/UHDM.capnp.h, ../src/UHDM.capnp.c++
UHDM MODEL GENERATION
Working dir: /home/vengineer/home/verilator/UHDM/build; codegen_base: /home/vengineer/home/verilator/UHDM
capnp_path = /home/vengineer/home/verilator/UHDM/build/third_party/capnproto/c++/src/capnp/capnpc-c++
sh: 1: export: Files/WindowsApps/CanonicalGroupLimited.Ubuntu20.04onWindows_2004.2021.610.0_x64__79rhkp1fndgsc:/mnt/c/Program: bad variable name
child process exited abnormally
    while executing
"exec -ignorestderr sh -c "export PATH=$capnp_path:\$PATH; $capnp_path/capnp compile -oc++:. $myProjetPathNoNormalize/src/UHDM.capnp""
    (procedure "generate_code" line 393)
    invoked from within
"generate_code $models"
    (file "/home/vengineer/home/verilator/UHDM/model_gen/model_gen.tcl" line 1704)
make[3]: *** [CMakeFiles/GenerateCode.dir/build.make:349: ../src/UHDM.capnp.h] Error 1
make[3]: Leaving directory '/mnt/c/Users/haray/home/verilator/UHDM/build'
make[2]: *** [CMakeFiles/Makefile2:403: CMakeFiles/GenerateCode.dir/all] Error 2
make[2]: Leaving directory '/mnt/c/Users/haray/home/verilator/UHDM/build'
make[1]: *** [Makefile:141: all] Error 2
make[1]: Leaving directory '/mnt/c/Users/haray/home/verilator/UHDM/build'
make: *** [Makefile:16: release] Error 2

このエラーの原因は、PATH にスペースが入っているためのようです。PATH を 下記のように再設定することでエラーが無くなりました。 この対策が分かるまで、4時間ぐらいかかちゃいましたよ。

$ export PATH=/usr/bin:/usr/local/bin

おわりに

今回は、UHDMとUHDM-Verilator Integration の ビルドまで行いました。

俺様FPGAの論理合成ツール Yosys と VTR の対抗馬である nextpnr とは?

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

はじめに

SymbiFlow での論理合成に使われている Yosys。そして、配置配線は、VTR 。

今回取り上げる Yosys + nextpnr は、配置配線として、nextpnr を使うというものです。

Yosys + nextpnr

論文は、2019年3月25日に出ています。Yosys+nextpnr: an Open Source Framework from Verilog to Bitstream for Commercial FPGAs

github は、こちら:GitHub - YosysHQ/nextpnr: nextpnr portable FPGA place and route tool

2018年のスライド : The nextpnr FOSS FPGA place-and-route tool, Clifford Wolf, Symbiotic EDA

サポートしているデバイスは、

  • Lattice iCE40 devices supported by Project IceStorm
  • Lattice ECP5 devices supported by Project Trellis
  • Lattice Nexus devices supported by Project Oxide
  • Gowin LittleBee devices supported by Project Apicula
  • (experimental) Cyclone V devices supported by Mistral

Gowin って、確か中国のFPGAベンダーだったと。

GUI付きのツールもあり、Windowsでも動くようです。

VPR との違いは、入力ファイルがBLIFではなく、json 。 そして、Packer, Placer, Router の後の Bitstream Generation まで行えます。VPR の場合は、FASMを使います。

Device Database API なるもので、Packer, Placer, Router がその Device Database API 経由でアーキテクチャの情報にアクセスする感じのようです。

Python API がある。

おわりに

Yosys は知っていましたが、nextpnr は知りませんでした。。。VTR (VPR) が実質デファクトスタンダート的な扱いになっているところに、nextpnr を投入。

SYMBIOTIC EDAという会社が「YOSYS - SYMBIOTIC EDA EDITION」というものを扱っているようです。

Yosys の開発者は、Clifford Wolfさんですが、Homepage of Claire Wolf になっています。LinkedIn で調べても出てこなかった理由がこれでした。 2017年9月から2020年10月までSymbiotic EDAのCTO, Co-Founderをやっていたみたいです。 現在は、YosysHQのCTO, Co-Founderです。こちらが新しいサイトTwitter ID @oe1cxw

俺様FPGAの開発ツールVTR : Verilog to Routingとは?

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

はじめに

今日は、一昨日(SymbiFlow)と昨日(OpenFPGA)で使われているツールである VTR : Verilog to Routing について、調べてみました。

VTR

VTR : Verilog to Routing

  • ODIN II : ODIN II is the HDL compiler of the VTR flow
  • ABC : ABC optimizes BLIF circuits
  • VPR : Versatile Place and Route (VPR)
  • FASM : FPGA Assembly (genfasm)

のツールから構成されています。

ちょっと古いのがこちら => VPR and T-VPack: Versatile Packing, Placement and Routing for FPGAs

VPR is a placement and routing tool for array-based FPGAs, and T-VPack is a logic block packing (clustering) program. VPR was written to allow circuits to be placed and routed on a wide variety of FPGAs to facilitate comparisons of different architectures. It takes two input files, a netlist describing the circuit to be placed and routed, and a description of the FPGA architecture. Optionally, one can also input a placement file to VPR if one desires that an existing placement be routed only.

VPR : Versatile Place and Route

メインとなるのが、VPRです。VPRは、

  • Pack
  • Place
  • Route
  • Analysis

のフローにて実行されます。

VPRのドキュメント

VPR の最初の論文は、1997年のFPL97の VPR: A New Packing, Placement and Routing Tool for FPGA Research1ぽいです。 この論文によると、

  • Place Circuit or Read in Existing Placement
  • Perform either Global or Combined Global / Detailed Routing

の2ステップの図になっていました。

2020年のプレゼンテーション資料 では、VPR 8.0:[Verilog to Routing (VTR): A Flexible Open-Source CAD Flow to Explore and Target Diverse FPGA Architectures] (https://www.eecg.utoronto.ca/~vaughn/papers/vlsi_soc_2020_vtr.pdf)になっています。

Placeには、Adaptive FPGA Placement Optimization via Reinforcement Learning, MLCAD2019が、 Routeには、AIR: A Fast but Lazy Timing-Driven FPGA Router, ASPDAC2020が、 導入されているようです。

おわりに

VPRの最初の論文が1997年なので24年も同じ研究を続けているのって、凄いですね。。。

VPRの開発者のVaughn Betz さんの博士論文(1998年)、Architecture and CAD for Speed and Area Optimization of FPGAs Advisor : Johnathon Rose -san

FPGA Architectures: An Overview

SPEED AND AREA TRADE-OFFS IN CLUSTER-BASED FPGA ARCHITECTURES

俺様FPGAをOpenFPGAで作れるか?

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

はじめに

昨日のブログで、「俺様SoCではなく、俺様FPGAは作れるのか?」では、SymbiFlow を使えば、俺様FPGAは作れそうと書きました。

vengineer.hatenablog.com

Google君に聞いてみたら、OpenFPGAなるものを使えば、俺様FPGAができそうです。ただし、実際にSiliconにするには、ASIC開発のためのお金と作業が必要なので途中までになります。

OpenFPGA とは?

OpenFPGAのツール群

おわりに

OpenFPGAを使えば、俺様FPGAは作れそう。。。動作確認は、Verilog HDL Simulator が必要だけど、iverilog でも大丈夫かしら? verilator は使えそうにないしね。

俺様SoCではなく、俺様FPGAは作れるのか?

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

はじめに

このブログで、かなり前に、Arm Cortex-A53入りFPGAを使って俺様SoCを作ろう、的なことを書きました。 そのブログを検索してみたら、なんと、2010.10.17と、10年以上も前でした。

vengineer.hatenablog.com

俺様SoCでは、FPGAの中に、Arm Cortex-A53とComputer Systemを組み込んだもの。

今回は、FPGAそのものを開発するという俺様FPGAのお話。。。俺様FPGAって、なんだー。

俺様FPGAとは?

俺様FPGAとは、FPGAそのものを開発するというもの。え、FPGAって自分で開発できるの?と思うでしょうが、実はできるんです。 ただし、Siliconにするにはお金がかかるのでシミュレーションまでしか無償ではできませんが。。。

どうやって、作ればいいのか?

オープンソースFPGA開発ツール、SymbiFlow

最近、FPGAベンダーの開発ツールではなく、オープンソースFPGA開発ツールを使って、FPGAのbitstreamが生成できるようになりました。その代表が、SymbiFlow です。

symbiflow.github.io

このSymbiFlowは、FrontendのSynthesisのYosysとBackendのFPGA tools (nextpnrとVerilog to Routing)で構成されています。

bitstream が生成できるのは、

  • Project IceStorm : Lattice iCE40
  • Project X-Ray : Xilinx 7-Series
  • Project Trellis : Lattice ECP5
  • QuickLogic : EOS S3/QLFK4N8

の4種類です。あたしは、Lattice 専用のツールだと思っていましたが、Xilinx 7-Series (Zynqも)やQuickLogicもサポートしていたですね。

Project Icestorm, Project Trellis, QuickLogic に関しては、DSP や Hard Block もサポートしているようです。

サポートしているボードは、

  • Digilent Arty A7-35T (XC7A35T)
  • Digilent Basys 3 Artix-7 (XC7A35T)
  • QuickFeather Develpment Kit (EOS-S3)
  • Digilent Zybo Z7 (XC7Z2010)
  • Alphamax NeTV2 (XC7A35T)
  • ECP5-5G Versa (LFE5UM5G-45F)
  • UL3S :(LFE5U-12F/25F/45F/85F)
  • TinyFPGA Ex (LFE5U-85F/LFE5UM5G-85F)
  • iCE40-HX8K Breakout Board (ICE40HX8K-B-EVN)
  • iCEblink40LP1K Evaluation Kit (ICE40LP1K-BLNK-EVN
  • iCEstick Evaluation Kit (ICE40HX1K-STICK-EVN
  • Digilent Nexsys Video Artix-7 FPGA (XC7A200T-1SBG484C)
  • DPControl iCEVision Board (iCE40UP5K)

です。結構ありますね。

俺様FPGAを作るには、

俺様FPGAを作るには、SymbiFlow Architecture Definitions に書いてある内容に従う必要があります。

特に、Development Practices に書いてある Strucure の

  • Directories
  • Files
  • Names
  • Notes

のルールを守って、俺様FPGAを定義する必要があります。また、Verilog to Routing Notes についても守る必要があります。

iCE40についてみてみる

Project IceStorm の Lattice iCE40 の SymbiFlow Architecture Definitions を見てみましょう! SymbiFlow の symbiflow-arch-defs の ice40 にあります。

  • cells
  • device
  • docs
  • primitives
  • tiles
  • tests
  • utils
  • yosys

があります。devices の下には、

  • layouts
  • tile-routing-virt
  • top-routing-virt

があります。layouts/N4k ディレクトリには、

  • CMakeLists.txt
  • ntemplate.N4k.fixed_layout.xml

があります。CMakeLists.txt は、

add_file_target(FILE ntemplate.N4k.fixed_layout.xml)
n_template(
  NAME N4k.fixed_layout.xml
  PREFIXES lp;hx
  SRCS ntemplate.N4k.fixed_layout.xml
)

になっています。ntemplate.N4k.fixed_layout.xml ファイルは、下記のようになっていて、16 x 20 のレイアウトになっているっぽいです。

<!-- set: ai sw=1 ts=1 sta et -->
<fixed_layout name="{N}4K" width="16" height="20">
 <!-- FIXME -->
</fixed_layout>

primitives の下には、

  • mux2
  • mux4
  • sb_carry
  • sb_ff
  • sbio
  • sb_lut
  • sb_ram

があります。mux2 を見てみたら、下記のような CMakeLists.txt だけでした。

mux_gen(
  NAME ice_mux2
  INPUTS LT,FF
  MUX_NAME ICE_MUX2
  SPLIT_INPUTS 1
  TYPE logic
  WIDTH 2
)

上記の mux_gen は、common/cmake/gen.cmake の中で定義されていました。

まとめ

オープンソースFPGA開発ツール SymbiFlow では、Lattice/Xilinx/QuickLogic のFPGAをサポートしていることはわかりました。 Latticeの iCE40 の Symbiflow Architecture Definitions のファイルをちょこっと覗いてみました。

このことから、俺様FPGAを作ることはできそうです。

どのような俺様FPGAを作ればいいのかを考えないと。。。

Groqは、学習用チップを開発している?

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

はじめに

Groqは、Google TPU v1 の開発メンバーが立ち上げた会社。TSPという外部にDRAMを持たないASICを開発しています。 プロセスは、14nm (たぶん、Global Foundries) です。Tenstorrent も Global Foundriesの 14 nm を使って推論用の Grayskull、学習用の Wormhole を開発しています。 どうやら、Global Foundries の 14nm って、SRAMの消費電力が少ないので、SRAMをいっぱい載せている推論チップはこのプロセスを使うようです。

現在は、PCIe Board ベースのシステムで、4Uサーバーに8枚のPCIe Board を刺したもので、4枚のPCIe Board 間をケーブルで接続した 4チップ構成を1つの塊としたシステムを単位としたRackシステムを提供しています。

TSPは内部SRAMだけなので、学習用には利用できないようです。

HBM付のASICを開発しているっぽい

Groq の Careers の ASIC Design Engineer - IO に、なんと、HBMという文字があります。 たぶん、このページは無くなってしますので、記録のために引用します。

ESSENTIAL DUTIES AND RESPONSIBILITIES:

  • Responsible for the architecture, micro-architecture and design of the input/output units of our Machine Learning ASICs
  • Ownership of some of the IO modules including CXL (controller/PHY), HBM memory interface (controller/PHY)
  • Ownership of block RTL design, vendor selection and integration of IPs.
  • Collaborate with PD team to optimize PPA
  • Architect and implement error handling solutions of the blocks owned
  • Guide and review verification of blocks owned
  • Guide and review system testing of blocks owned
  • Participate in silicon bring-up for blocks owned
  • Coordinate with other designers to own end-to-end feature design and verification
  • Contribute to architecture design and product road map for blocks owned

QUALIFICATIONS:

  • BS in Electrical Engineering or Computer Engineer or related degree required; advanced degrees (MS, PhD) a plus.
  • Expert level knowledge in IO subsystems of complex, high performance processors, GPU’s or application processors
  • Expert in designing HBM memory interface (controller/PHY), or CXL (controller/PHY)
  • 6+ years of meaningful industry experience and a background in high­ speed complex ASIC/SOC design
  • Proficient coding skills in Verilog or SystemVerilog
  • Proficient in RTL debugging with VCS/DVE.
  • Experience with all stages in the ASIC design flow including synthesis, physical design.
  • Experience working with PD team to fix power/area/timing violations, ECO, DFT, and ATE test development
  • Have knowledge of UPF and multi-voltage rule checking
  • Experience in designing tools and scripts for creating control and status register maps a plus

この中には、HBM (controller/PHY) だけでなく、CXL (controller/PHY) もあるので、PCIe Gen5 だけでなく、CXLも搭載するのかと。 また、VCS/DVEとあるのでシミュレーションは、Synopsysのツールを使うのだと。。。言語は、Verilog HDL/SystemVerilogということに。 CXLまでとなると、IPはやっぱり Synopsys なのかな?

DesignWare CXL Controller IP では、CXL 2.0 をサポート。

DesignWare PHY IP for PCI Express 5.0 and CXL では、 - 32G PHY G2, TSMC N7 x4, - 32G PHY, TSMC N7 x4 - 32G PHY, TSMC N5 x4 - 32G PHY, SS 5LPE x4 で利用できるようです。

2020年4月にGroqは、SynopsysのZebuを使っていると、プレスをうっていますね

おわりに

Groq は、TSPという推論用チップを開発して、現在システムを提供していますが、学習用チップへの参入をする感じですかね。。。 TSPの時は、Marvell が開発していたんですが、今回はどうなるんでしょうどうなるんでしょうか?

システムを売るためだけじゃなくて、学習用チップを開発するために、トータルとして、$367M, (2021.04.16)も集めたのでしょうかね。

追記)、2021.07.14

GriqChip 2 を発表。

  • Advanced process
  • Energy proportionality
  • Memory bandwidth and capacity
  • Cost of deployment

youtu.be

関連ブログ:

vengineer.hatenablog.com