onbmotorsのメモ

onbmotorsのメモ

電子工作とかマイクロマウス関連のメモ書き。

「CPUの創りかた」を読んで実際に4bitCPUをつくってみた

CPUの創り方ってどんな本

10個のICで4bitのCPU(4bit)を作ってCPUの原理を理解しようというのが主旨の本です。発売日が2003年なので多くの方が製作に取り組んでいて、製作者のサイトも結構あります。今更感も満載ですが、ただただ自己満足のためにブログに書きます。

4bitCPUのスペック

以下の仕様のCPUを作ることになります。

本の中ではTD4と呼ばれています。

 

汎用レジスタ 4bit×2
アドレス空間 4bit(16バイト)
プログラムカウンタ 4bit
フラグレジスタ 1bit
算術演算 4bitの加算のみ
動作クロック 3Mhz程度
トランジスタ数 約1500

 

命令とかの具体的な内容は本よみましょー。

製作期間

〇2020年3月中旬から5月のGWにかけて実施

 (半年くらいたったので内容は結構忘れてしまいました)
〇本の読み込み
 ⇒1週間(平日夜+土日)
〇KiCADでのプリント基板設計期間
 ⇒KiCAD初心者でしたが2週間程度で完成(土日6~8時間、平日1,2時間)
〇部品選定
 ⇒1週間(平日夜)
〇実装 (はんだづけ)
 ⇒休日5日ほぼ掛かり切り

 

頑張れば社会人でもつくれますがそれなりの時間は使います。

コロナで緊急事態宣言もあり、家にこもってひたすら作ってました。

電子工作慣れてる人ならもっと早そう。

ハードウェア製作の指針

〇プリント基板とユニバーサル基板の両方を使って製作する
⇒どちらも体験したかったので。
 プリント基板はマイクロマウスでも使う
 ユニバーサル基板もやっておいて損はないと思った(プリント基板がどれだけ便利か知るためには、原点を知っておいた方がいいかな~という考え)
〇プリント基板は外注で作る
⇒Elecrowを利用した。プリント基板は頑張れば自宅で作ることもできるらしいが、道具の購入が面倒くさい。
〇表面実装をやってみる
⇒3216サイズのチップ抵抗を実装した
 ロジックICも16本足のものを4個表面実装した
 この技術もマイクロマウスの設計で必要
〇機能の拡張はやらない
碌に電子工作やったことないので、へたに手を出してデバッグに時間がかかり、投げ出すことになるのが一番いやだった
ネットを見ていると命令を変更(拡張?)している人もいる。

使った部品と道具

基本的には、以下のサイト様に書いてあった部品と道具をそのまま使っています。すごく参考にしました。 

fumimaker.net

完成品

3つの基板に分割し、それをコネクタでつなぐ形にして実装した
メイン回路:CPUのメイン部分。クロック、リセット、ROM以外の部分がここに集約されている。
クロック&リセット回路:クロックの生成、クロックの切り替え、リセットボタンなどを実装した基盤
ROM:DIP SWを16個とりつけた基板、ここはプリント基板で実装した。

f:id:nantakosu5656:20200916203103p:plain

ハーネス長いですが、他の既製品探したり自分で作るのが面倒だったので妥協です。

ROM

f:id:nantakosu5656:20200916203206p:plain

途中でショートしてダイオードアレイ1つから煙出た!

クロック&リセット回路

以下の写真のとおり

 

f:id:nantakosu5656:20200916203307p:plain

KiCADである程度配線パターンを考えておいて実装した

f:id:nantakosu5656:20200916203333p:plain

 

この回路で使う無極性コンデンサは一応アノードとカソードがある
今回の回路であればたぶんどっちでも正しく動作する

メイン回路

以下の写真の通り

f:id:nantakosu5656:20200916203514p:plain

ショートしてコンデンサ 一つから煙出た!

裏面もひどいありさまです。

f:id:nantakosu5656:20200916204249p:plain

プリント基板製作

製作は回路CADで回路図を書いて、部品配置や配線を実施後にプリント基板製作業者(今回はelecrow)にお願いしました。

回路CADは初めて使いました。KiCADというフリーソフトのVer5.1ですが、無料なのに機能が豊富でよいです。

使い方は以下のURLの資料を購入して勉強しました。

make.kosakalab.com

トランジスタ技術のバックナンバーとかを購入してもいいかもです。

ネットにもいろいろ情報ありますが、まとまった情報がサッと欲しかったのでマネーパワーで解決です。

2層基板で以下のように部品配置と配線を実施しました。気楽に動けばいいやで作っているので、正直なところ良い配線なのか悪い配線なのか検討もついてませんでした。

素人なりのノイズ対策として直角配線はしないようにしたり、ベタグランドを試してみたりしました。

f:id:nantakosu5656:20200916204424p:plain

KiCADの機能として3Dビューもあります。3Dデータはネットで拾ってきたり、最初から用意されてるものを使えばいいので難しいことは無いです。

ちなみに、ピン幅を間違えたので無理くり部品を取り付けられるように頑張りました。

f:id:nantakosu5656:20200916205555p:plain

金額は輸送費込みで4000円くらいだった記憶です。

電子工作的なノウハウ

〇基本的なはんだ付けの方法は村田製作所のサイトを見て勉強した
 

article.murata.com


〇表面実装に関して
・ KiCADのフットプリントは手半田用フットプリントのほうがよさそう ??
  (通常のものだと、幅が狭くて実装が難しかった)
・ 2.54mmピッチのスルーホールを置いたとき、間に線1本くらいなら通せる。
     市場の製品とかだと、2本くらい通していたりするらしい?
UEWに関して
・ ちょっと使いにくかった
毎回熱で被覆を溶かすのがかなり面倒で、一番時間がかかったところかもしれない。
被覆を溶かすためのいいやり方を模索して、効率を上げる必要がある
ただ、被覆部分は絶縁はしっかりしてくれるので、データ線とかにはつかえる
注意する点としては、配線し終わったUEWに小手先があたらないように気を付けないと、気づかないうちに被覆がはがれれてショートする原因になる。
・ 使い方について。
被覆を溶かすときは、こて先にはんだを少しつける
こて先の半田にUEWを接触させると被覆を溶かすことができる
UEWは少しはんだをはじくようで、こての上で半田がはじかれて移動してしまう。
頑張ってはんだを追いかけまわして、被覆をはがす必要がありここに時間がかかった
半田ポットがあれば、被覆を剥ぐのは楽になるかも。

終わりに

・しんどいけど面白い。動けば感動するのは間違いない。時間があれば製作するのをおすすめ。

・電子工作初心者がいきなり製作は難しい気はするが、2,3作品目くらいにちょうどいいかもしれない。個人的には知らないことがたくさん書いてあったので、電子工作をする上での勉強になったし回路図も読めるようになってきた。CPUの動作の勉強にもなると思う。

・ショートには注意

 メイン回路の配線材はUEWをつかったが、はんだごての熱で意図しない部分の被覆がやぶれてしまっていたのが原因でショートした。

・今後FPGAで32bitCPU作って、C言語で書いたプログラムを実装できるようにするのもありかなと思った。CPUの作り方10講という本も購入した。こちらはFPGAでcpu回路を作るようなもの。半分くらい読んで、fpgaのシミュレータのところで積んでしまっているのでどっかで続きやりたい。

 

マイコン動作チェック2

SW4STM32でプログラミングとLEDの点滅まで

前回の続き、cubemxで生成したコードに対してユーザがプログラミングをおこない、LED点滅させるところまでをおこなう。

手順

1.SW4STM32にプロジェクトをインポートする
 SW4STM32で Fileタブ ⇒ Import ⇒ General ⇒ Existing Projects into Workspace" を選択する。 次に、前回cubemxで生成したプロジェクトのフォルダー を選択し、Finishを選択する。

2.ユーザープログラムを書き込む
 Project Explorerで  プロジェクト名 ⇒ Src ⇒ main.cと選択してmain.cを編集する。main関数にUSER CODE BEGIN WHILEとUSER CODE END WHILEと書かれている箇所があるので、その間に下記コードを書きこむ(下図参照)。
    HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_SET);
    HAL_Delay(1000);
    HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_RESET);
    HAL_Delay(1000);

 

f:id:nantakosu5656:20190219222750p:plain

 コードを書き込んだのち、ctlr+Bでコンパイルする。マイコンにつないでツールバーのrunボタンを選択するとプログラムが書き込まれてLEDが1000[ms]ごとに点滅する。 

 ちなみに関数の詳細はctlr+左クリックで見ることができる。コード内のLD4はcubemxでstm32f4discoveryのLEDが接続されたピンの名称として初期設定されているものである。

補足1
 Project Explorerが見つからない場合は、以下図のように右上のC/C++ボタンを選択するとレイアウトが整い、左側のウィンドウに表示される模様。
 C/C++を右クリックし、customizeを選択すると、ToolBarに表示するアイテムを選ぶことができる。ツールにはgitやsvnがあり、ソースコードのバージョン管理等ができるかもしれない。

f:id:nantakosu5656:20190219222746p:plain

補足2
 cubemxで生成したコードには"USER CODE ~ BEGIN","USER CODE ~ END"と書かれた箇所が存在する。beginからendの間に書いておけば、cubemxのプロジェクトの設定をいじって再度ソースコードを生成した際でもユーザーが書いたプログラムは残っている。

今後記事にしたいこと
HAL(Hardware Abstraction Layer)の関数について

SW4STM32のレイアウトやツールについて

マイコンへのプログラム書き込み機能(ST-LINK?)について

 

マイコン動作チェック

STM32CubeMXとSW4STM32によるマイコン動作チェック1

まずは、LED点滅プログラムを作成しマイコンを動かせることを確認する。

手順

1.STM32CubeMXの設定とソースコードの生成

 ソフトを立ち上げ、start my project from mcuを選択する。

f:id:nantakosu5656:20190218232345p:plain

 選択するとmcuのリストが表示されるので、STMf407VGを探しboardからSTMf4Discoveryを選択する。下記画面が現れたら、右上のstart projectを選択する。f:id:nantakosu5656:20190218232348p:plain

 start projectを選択すると、メッセージが出るのでyesを選択する(initialize all peripherals with their default mode?)。これにより、ピン配置をstmf4discoveryの設定で初期化するすることができる。

 yesの選択後に、stmf4discoveryのピン配置が設定された画像が表示される。この画面では各ピンの機能やタイマー等の設定をいじることが可能だが、今回は特に変更しない。

 

f:id:nantakosu5656:20190218232351p:plain

 project managerタブを選択し、プロジェクト名と保存場所を適当に決め、toolchain/IDESW4STM32に設定する。

 最後に右上のGENERATE CODEをクリックすると設定したピン配置と各機能の設定でソースコードが生成される。

f:id:nantakosu5656:20190218232853p:plain

 

 

 

 

STM32f4Discoveryの開発環境を整える

STM32f4Discoveryの開発環境を整える

上記の評価ボードを扱うにあたり、SW4STM32とSTM32CubeMXで環境を構築することにした。手順についてメモしておく。

内容はMAC OSメインで書いているが、Windowsでも各ツールをダウンロードしたファイルに含まれるexeファイルを実行すれば同様の環境を構築可能である。

手順

1.SW4STM32のダウンロード

OpenSTM32 Community Site OpenSTM32 Community Site | HomePageよりダウンロードする。
ダウンロードするにはユーザ登録が必要。

Step1[Exploreのdownload areaリンクからダウンロードページに移動する
今回はMacOSのためinstall_sw4stm32_macos_64bits-v2.7.runをダウンロード

f:id:nantakosu5656:20190218225640p:plain

f:id:nantakosu5656:20190218225727p:plain

2.SW4STM32のインストール

上記でダウンロードしたファイルがあるディレクトリで以下のコマンドを実行するとインストーラーが開きインストールが始まる
$ chmod 755 install_sw4stm32_macos_64bits-v2.7.run
$ ./install_sw4stm32_macos_64bits-v2.7.run
すべてデフォルト状態でNextをクリック(ライセンスはすべてAgrreする)
また、インストール中にターミナル上でパスワードを求められるので注意

3.SW4STM32の起動とアップデート

2.SW4STM32においてすべてデフォルトでインストールした場合、Application/Ac6/にあるSystemWorkbenchで起動することができる

f:id:nantakosu5656:20190218225858p:plain

SW4STM32起動画面

また、アップデートは“Help”にある“Check for Updates”からおこなうことができる。

f:id:nantakosu5656:20190218225902p:plain

SW4STM32アップデート画面
4.STM32CubeMXのダウンロード

http://www.st.com/en/development-tools/stm32cubemx.html?sc=stm32cubemxの下部からダウンロードを行うダウンロードを行うにはメールアドレスを入力する必要がある

5.STM32CubeMXのインストール

ここでは、
$ brew cask install java
でOpenJDK11をインストールした
STM32CubeMXは下記コマンドでインストールできる
$ ./[解凍したディレクトリ]/SetupSTM32CubeMX-5.0.0.app/Contents/MacOs/SetupSTM32CubeMX-5_
0_0_macos

f:id:nantakosu5656:20190218225727p:plain

STM32CubeMXインストール画面

 補足

SW4STM32について

https://www.st.com/ja/development-tools/sw4stm32.html#getsoftware-scroll
The System Workbench toolchain, called SW4STM32, is a free multi-OS software development
environment based on Eclipse, which supports the full range of STM32 microcontrollers and associated
boards.
The SW4STM32 toolchain may be obtained from the website www.openstm32.org, which includes forums,
blogs, and trainings for technical support. Once registered to this site, users will get installation
instructions at the Documentation > System Workbench page to proceed with the download of the free
toolchain.
The System Workbench toolchain and its collaborative website have been built by AC6, a service company
providing training and consultancy on embedded systems.
This product is supplied by a third party not affiliated to ST. For the latest information on the specification,
refer to the third party’s website: www.ac6.fr.
Key Features
Comprehensive support for STM32 microcontrollers, STM32 Nucleo boards, Discovery kits and
Evaluation boards, as well as STM32 firmware (Standard Peripheral library or STM32Cube HAL)
GCC C/C++ compiler
GDB-based debugger
Eclipse IDE with team-work management
Compatible with Eclipse plug-ins
ST-LINK support
No code size limit
Multiple OS support: Windows®, Linux and OS X®

 

STM32CubeMXについて

http://www.st.com/en/development-tools/stm32cubemx.html?sc=stm32cubemx
STM32CubeMX is part of STMicroelectronics STM32Cube original initiative to make developers’ lives
easier by reducing development effort, time and cost. STM32Cube covers the whole STM32 portfolio.
STM32Cube includes STM32CubeMX, a graphical software configuration tool that allows the generation of
C initialization code using graphical wizards.
STM32Cube also embeds comprehensive STM32Cube MCU Packages, delivered per STM32
microcontroller Series (such as STM32CubeF4 for STM32F4 Series). All packages are composed of the
hardware abstraction layer (HAL) and the low-layer (LL) APIs, plus a consistent set of middleware
components (such as RTOS, USB, TCP/IP and graphics). All embedded software utilities are delivered with
a full set of examples running on STMicroelectronics boards.
The STM32Cube HAL is an STM32 embedded software layer that ensures maximized portability across
the STM32 portfolio, while the LL APIs make up a fast, light-weight, expert-oriented layer which is closer to
the hardware that the HAL.
STM32CubeMX is a graphical tool that allows a very easy configuration of STM32 microcontrollers and the
generation of the corresponding initialization C code through a step-by-step process.
Step one consists in selecting the STMicroelectronics STM32 microcontroller that matches the required
set of peripherals.
The user must then configure each required embedded software thanks to a pinout-conflict solver, a
clock-tree setting helper, a power-consumption calculator, and an utility performing MCU peripheral
configuration (GPIO, USART, ..) and middleware stacks (USB, TCP/IP, …).
Finally, the user launches the generation of the initialization C code based on the selected configuration.
This code is ready to be used within several development environments. The user code is kept at the next
code generation.
In addition to STM32CubeMX, other software development tools are available within STM32Cube, such as
STM32CubeProgrammer (STM32CubeProg) and STM32CubeMonitor-Power
(http://www.st.com/en/product/stm32cubemonpwr).
Key Features
Intuitive STM32 microcontroller selection
Rich easy-to-use graphical user interface allowing to configure:
Pinout with automatic conflict resolution
Peripherals and middleware functional modes and initialization with dynamic validation of parameter
constraints
Clock tree with dynamic validation of the configuration
Power sequence with estimate of consumption results
C code project generation covering STM32 microcontroller initialization compliant with IAR, Keil,
SW4STM32 and GCC compilers
Available as a standalone software running on Windows, Linux and macOS (macOS is a trademark of
Apple Inc. registered in the U.S. and other countries.) operating systems, or through Eclipse plug-in