tangnanodcj11mem

Public

@tangnano20k

Download board files

Files for version 1. Pick what you came for.

Share tangnanodcj11mem

Check access before sharing the link.

Who can open this board

Anyone can open this board. No sign-in is required.

This link opens the latest version. Copying it does not grant additional access.

Loading…

README

TangNanoDCJ11MEM

Memory system and UART implemented on Tang Nano 20K for DEC DCJ11 PDP-11 Processor

This document is written mostly in Japanese. If necessary, please use a translation service such as DeepL (I recommend this) or Google.

概要

  • PDP-11の命令セットを持つCPU「DEC DCJ11」のメモリシステムとUARTをFPGA(TangNano20K)上に実装する試みです.信号のインターフェース部分にtangNano-5Vを使用しています.
  • FPGAに実装するのはメモリやUARTなどの周辺回路部分だけで,CPU自体は本物を使用します.ソフトウェアやFPGAによるシミュレータやエミュレータではなく,本物のCPUを動かします.
  • "TangNanoDCJ11"だとTangNano上にDCJ11を実装したみたいな名前になってしまうので,"MEM"を付けて"TangNanoDCJ11MEM"という名前になっています.
  • まずベアメタルで動かしたところ安定して動きました.
  • 次に,PC-11(Paper-Tape Reader/Punch)エミュレータでPaper-Tape BASICをロードして実行することができました.
  • さらに,UNIX first edition (UNIX V1)を動かすために,ディスク(RF11, RK11)や外部演算装置(KE11)のエミュレータを実装したところ,それなりに動くようになりました.

ハードウェア

FPGAに実装した機能

  • Initialization Sequence時のPower-Up Configuration Register設定
  • メモリ 32K×16bit
  • UART.TangNanoのUSB経由およびGPIO経由の2系統.シリアルの設定は基本的には115200bps,8N1Nにしています.(UNIX V6だと7N1Nにしないと文字化けする現象あり.)
  • BS0, BS1は見ていません.TangNano20Kではピンが足りなかったのと,DAL[15:0]とAIO[3:0]を見ればとりあえず十分だったので.
  • DAL[21:16]も見ていません.
  • PC-11(Paper-Tape Reader/Punch)エミュレータを実装しました.(Paper tape BASICを実行する用で,UNIXでは動きません.)
  • ディスクドライブ(RF11, RK11),外部演算装置(KE11-A),クロック(KW11-L)等,UNIX V1の動作に必要な装置のエミュレータを実装しました.

PCB rev.1.1

  • rev.1.0はいくつか修正箇所があったので修正しました.
  • CPUが白いので基板も白くしてみました.
  • CPUおよびTangNanoの電源をどこから供給するかを2箇所のジャンパで切り替えられるようにしました.詳細は回路図と基板上のシルクを見て下さい.
  • プルダウン抵抗(R2〜R6)を100kから10kに変更しました.(rev1.1a)
  • UNIXを動かすにはJP1のパターンのカット,数本のジャンパ配線が必要です.詳細はUNIX V1参照.

BOM

ReferenceQtyValueSizeMemo
C1,C220.33uFDECのプロセッサボードで0.33uFを使っていたので.0.1uFでもいいかもしれない.
C3147uF
C4,C5268pF
D11LED
J11DC Jack例: https://akizukidenshi.com/catalog/g/g106568/
J21pin header1x02DC Jackからの5VをTangNanoに供給するとき用.(そのときはTangNanoのUSBは外すこと).
J31pin header1x03CPUへの5VをDC JackからにするかUSB(TangNano)からにするかの選択用.
J41IC socket40pin DIP 600milTangNano5V用.1x20のpin socket 2列でも可.
J5,J62pin header or socket1x20任意.テストや観測,実験用.
J71pin header1x06 L字UART用
J8,J92pin header or socket1x30任意.テストや観測,実験用.
JP1任意.sctl_nとcont_nを切断したときにpin headerを立てる用.実装する場合は先にパターンをカットして下さい.(unix-v1では切断して使います)
R11100k値はLEDに合わせて任意.
R2~R6510kプルダウン用.入力電流がmax10μAなので大きめでいいかと思ったら意外にノイズが大きいので100kから10kに変更しました.
R7~R1610100kプルアップ用.10k〜100kぐらいで任意.
R1711M
SW11toggle SW例: https://akizukidenshi.com/catalog/g/g100300/
SW2,SW32tactile SW6mmxH4.3mm例: https://akizukidenshi.com/catalog/g/g103647/
U11DCJ1160pin DIP 1300mil1x30 の丸ピンソケット2列
Y1118MHzHC49例: https://mou.sr/3WcWExh , 低速(2MHzで確認済み,もっと遅くても動きそう)でも動きます.周波数を変えられるようにソケットの使用をお勧めします.

応用例(applications/)

ベアメタル(applications/baremetal)

  • クロス環境で作成したプログラムを実行します.
  • HDLは小規模なので,いろいろ試すベースラインに最適です.

tape basic(applications/tapebasic)

  • 二次記憶をエミュレートするために手始めに作った習作です.
  • PC11(tape reader/pucnch)エミュレータで,tape BASICを読み込んで起動します.
  • SDメモリを使う練習用に作ったものなのでとりあえず動きます程度のものです.
  • PDP11GUIに,console ODT経由でpaper tape softwareをロードする機能があるようなので,いろいろなpaper tape softwareを試すという目的であればベアメタルでPDP11GUIを使うことをお勧めします.

UNIX V1(applications/unix-v1)

  • SDメモリを使ったdiskエミュレータを作成し,UNIX V1を動かしてみました.
  • 最初はかなり不安定でしたが,だいぶ安定して動くようになってきました.

UNIX V6(applications/unix-v6)(実験用)

  • unix-v1用をベースにUNIX V6に必要な機能を逐次追加中です.修正のたびにV1の動作確認をするのは面倒なのでV1用と分けることにしました.

動画

旧版

ブレッドボード版

  • console ODT(Octal Debug Technique)の動作確認をするところから始めて,豊四季タイニーBASICを軽微な修正で動かせるところまで確認しました.
  • クロックは18MHzで動きました.遅い方は2MHzでも動きました.

PCB版 rev.1.0

最初に作った基板です.とりあえず動きました.

関連情報

データシート等

bitsavers

先行事例,先駆者たち

開発環境関連

Paper Tape Software関連

UNIX関連

関連記事

更新履歴

  • 2024/04/25: 初版公開
  • 2024/04/25: README修正(BOM追加)
  • 2024/05/05: 基板rev.1.1の写真追加.project更新.
  • 2024/05/05: README.md修正(開発環境関連の情報を追加)
  • 2024/05/05: samplesにasciiart を追加
  • 2024/05/22: PC-11(紙テープリーダ/パンチャ)エミュレータを実装
  • 2024/06/19: SDHCの初期化部分にバグがあったので修正
  • 2024/06/21: tapebasicのtop.vにバグがあったので修正
  • 2024/06/21: baremetalとtapebasicを別フォルダに分離.READMEも分離.
  • 2024/06/24: unix-v1用の開発中HDLを公開(かなり不安定です)
  • 2024/06/28: tapebasicのtapeimage.datの作成方法を修正
  • 2024/06/28: tapebasicのtapeimage.datの作成方法を修正
  • 2024/07/07: baremetal版修正(UART安定化, 20240707公開)
  • 2024/07/12: unix-v1版修正(20240712.alpha公開)
  • 2024/07/13: unix-v1版修正(20240713.alpha公開).IRQのジャンパ変更.
  • 2024/07/14: unix-v1版修正(20240714.alpha公開).デバッグ用レジスタ変更.
  • 2024/07/15: プルダウン抵抗(R2〜R6)を100kから10kに変更.100kで問題が起きていなければ変える必要は無いです.
  • 2024/07/16: unix-v1版大規模修正(20240716.beta公開).JP1(SCTL_nとCONT_nを接続してるパターンをカットして下さい.)
  • 2024/07/19: unix-v1 20240719.beta 公開.これまでのバージョンと比較するとだいぶ安定しました.
  • 2024/07/27: unix-v1 20240727.beta 公開.
  • 2024/07/28: unix-v1 20240728.beta 公開.(UNIX V6実験用機能追加)
  • 2024/07/29: V6実験用とV1用を分離しました.
    • unix-v1 20240729.beta 公開.
    • unix-v6 20240729.v6.beta 公開.
Comments

No comments yet. Be the first to ask about this board.

Ask about this board

Sign in to BoardRepo

New here? Signing in creates your account; there is no separate sign-up.