Skip to content

Commit

Permalink
baremetal updated
Browse files Browse the repository at this point in the history
  • Loading branch information
ryomuk committed Jul 7, 2024
1 parent 7d5896f commit 596a732
Show file tree
Hide file tree
Showing 72 changed files with 32,926 additions and 14 deletions.
29 changes: 16 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ This document is written mostly in Japanese. If necessary, please use a translat
- PDP-11の命令セットを持つCPU「DEC DCJ11」のメモリシステムとUARTをFPGA(TangNano20K)上に実装する試みです。信号のインターフェース部分に[tangNano-5V](https://github.com/ryomuk/tangnano-5V)を使用しています。
- FPGAに実装するのはメモリやUARTなどの周辺回路部分だけで、CPU自体は本物を使用します。ソフトウェアやFPGAによるシミュレータやエミュレータではなく、本物のCPUを動かします。
- "TangNanoDCJ11"だとTangNano上にDCJ11を実装したみたいな名前になってしまうので、"MEM"を付けて"TangNanoDCJ11MEM"という名前になっています。
- とりあえずベアメタルで動いています
- とりあえずベアメタルでは安定して動いています
- PC-11(Paper-Tape Reader/Punch)エミュレータでPaper-Tape BASICをロードして実行することができました.
- UNIXを動かすためのディスクI/Oは現在作成中です
- ディスク(RF11, RK11)エミュレータを実装したところ,UNIX-V1が不安定ながら動いています

# ハードウェア
## FPGAに実装した機能
Expand All @@ -19,6 +19,7 @@ This document is written mostly in Japanese. If necessary, please use a translat
- BS0, BS1は見ていません.TangNano20Kではピンが足りなかったのと,DAL[15:0]とAIO[3:0]を見ればとりあえず十分だったので.
- DAL[21:16]も見ていません.
- PC-11(Paper-Tape Reader/Punch)エミュレータを実装しました.(2024/5/22)
- ディスクドライブ(RF11, RK11)エミュレータを実装しました.まだ不安定です.(2024/6/24)

## PCB rev.1.1
- rev.1.0はいくつか修正箇所があったので修正しました.
Expand Down Expand Up @@ -109,14 +110,16 @@ This document is written mostly in Japanese. If necessary, please use a translat
- [jserv/unix-v1](https://github.com/jserv/unix-v1)

# 更新履歴
- 2024/4/25: 初版公開
- 2024/4/25: README修正(BOM追加)
- 2024/5/5: 基板rev.1.1の写真追加.project更新.
- 2024/5/5: README.md修正(開発環境関連の情報を追加)
- 2024/5/5: samplesにasciiart を追加
- 2024/5/22: PC-11(紙テープリーダ/パンチャ)エミュレータを実装
- 2024/6/19: SDHCの初期化部分にバグがあったので修正
- 2024/6/21: tapebasicのtop.vにバグがあったので修正
- 2024/6/21: baremetalとtapebasicを別フォルダに分離.READMEも分離.
- 2024/6/24: unix-v1用の開発中HDLを公開(かなり不安定です)
- 2024/6/28: tapebasicのtapeimage.datの作成方法を修正
- 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公開)
11 changes: 10 additions & 1 deletion applications/baremetal/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,20 @@
- クロス環境でコンパイルできます.
- a.outからrom.vへの変換はtools/out2rom.pl を使用.かなり適当に変換してます.
- makeしてできるrom.asciiart.v をrom.vにリネームしてTangNano用プロジェクトに持って行ってビルドします。
- console ODTから,1000g で実行.UART関連がまだ不安定なので文字化けすることがあります.
- console ODTから,1000g で実行.~~UART関連がまだ不安定なので文字化けすることがあります.~~ (sys_clkに同期化したら安定しました.)
- 起動時にconsole ODTを起動するか,ユーザプログラムを起動するかは,top.vのPUP_CONFで設定可能です.

## シミュレータ
実機で動かす前の動作確認に使えます.後から気がついたのですが,ubuntuだと古いバージョンならapt install simhでインストールできるようでした.
- [SimH (History Simulator)](http://simh.trailing-edge.com/)
- simhv312-4.zipをとってきてmake
- PDP11/pdp11_defs.hの「uint32 uc15_memsize;」 がリンク時にmultiple definitionのエラーになるのでextern uint32に変更したらコンパイルできました.

## GUI開発環境
シリアルポート経由でconsole ODTをGUI操作できるようになるツールです.こんなものがあるとは驚きました.
- [j-hoppe/PDP11GUI](https://github.com/j-hoppe/PDP11GUI)

## 更新履歴
- 2024/06/24: 初版公開(20240624)
- 2024/07/07: UART安定化(20240707)

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1" encoding="UTF-8"?>
<!DOCTYPE gowin-fpga-project>
<Project>
<Template>FPGA</Template>
<Version>5</Version>
<Device name="GW2AR-18C" pn="GW2AR-LV18QN88C8/I7">gw2ar18c-000</Device>
<FileList>
<File path="src/top.v" type="file.verilog" enable="1"/>
<File path="src/uart.v" type="file.verilog" enable="1"/>
<File path="src/ws2812.v" type="file.verilog" enable="1"/>
<File path="src/tn20k.cst" type="file.cst" enable="1"/>
<File path="src/TangNanoDCJ11MEM_project.sdc" type="file.sdc" enable="1"/>
</FileList>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1" encoding="UTF-8"?>
<!DOCTYPE ProjectUserData>
<UserConfig>
<Version>1.0</Version>
<FlowState>
<Process ID="Synthesis" State="2"/>
<Process ID="Pnr" State="2"/>
<Process ID="Gao" State="2"/>
<Process ID="Rtl_Gao" State="2"/>
</FlowState>
<ResultFileList>
<ResultFile ResultFileType="RES.netlist" ResultFilePath="impl/gwsynthesis/TangNanoDCJ11MEM_project.vg"/>
<ResultFile ResultFileType="RES.pnr.bitstream" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.fs"/>
<ResultFile ResultFileType="RES.pnr.pin.rpt" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.pin.html"/>
<ResultFile ResultFileType="RES.pnr.posp.bin" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.db"/>
<ResultFile ResultFileType="RES.pnr.pwr.rpt" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.power.html"/>
<ResultFile ResultFileType="RES.pnr.report" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.rpt.html"/>
<ResultFile ResultFileType="RES.pnr.timing.paths" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.timing_paths"/>
<ResultFile ResultFileType="RES.pnr.timing.rpt" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.tr.html"/>
<ResultFile ResultFileType="RES.syn.report" ResultFilePath="impl/gwsynthesis/TangNanoDCJ11MEM_project_syn.rpt.html"/>
<ResultFile ResultFileType="RES.syn.resource" ResultFilePath="impl/gwsynthesis/TangNanoDCJ11MEM_project_syn_rsc.xml"/>
</ResultFileList>
<Ui>000000ff00000001fd0000000200000000000001000000018cfc0200000001fc000000370000018c0000009301000016fa000000010200000003fb00000030004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00440065007300690067006e0100000000ffffffff0000006200fffffffb00000032004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00500072006f00630065007300730100000000ffffffff0000005e00fffffffb00000036004600700067006100500072006f006a006500630074002e00500061006e0065006c002e0048006900650072006100720063006800790100000000ffffffff0000007c00ffffff00000003000006aa00000139fc0100000001fc00000000000006aa0000009b00fffffffa000000000100000002fb00000032004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00470065006e006500720061006c0100000000ffffffff0000005100fffffffb0000002e004600700067006100500072006f006a006500630074002e00500061006e0065006c002e004900730073007500650100000000ffffffff0000009b00ffffff000005a60000018c00000004000000040000000800000008fc000000010000000200000004000000220043006f00720065002e0054006f006f006c006200610072002e00460069006c00650100000000ffffffff0000000000000000000000220043006f00720065002e0054006f006f006c006200610072002e004500640069007401000000adffffffff0000000000000000000000240043006f00720065002e0054006f006f006c006200610072002e0054006f006f006c0073010000017fffffffff0000000000000000ffffffff0100000245ffffffff0000000000000000</Ui>
</UserConfig>
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
GowinSynthesis start
Running parser ...
Analyzing Verilog file 'C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\top.v'
Analyzing included file 'C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\rom.v'("C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\top.v":56)
Back to file 'C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\top.v'("C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\top.v":56)
Analyzing Verilog file 'C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\uart.v'
Analyzing Verilog file 'C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\ws2812.v'
Compiling module 'top'("C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\top.v":12)
Extracting RAM for identifier 'mem_hi'("C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\top.v":40)
Extracting RAM for identifier 'mem_lo'("C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\top.v":41)
Compiling module 'uart_rx(CLK_FRQ=27000000,BAUD_RATE=115200)'("C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\uart.v":75)
Compiling module 'uart_tx(CLK_FRQ=27000000,BAUD_RATE=115200)'("C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\uart.v":14)
Compiling module 'ws2812'("C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\ws2812.v":5)
NOTE (EX0101) : Current top module is "top"
[5%] Running netlist conversion ...
Running device independent optimization ...
[10%] Optimizing Phase 0 completed
[15%] Optimizing Phase 1 completed
[25%] Optimizing Phase 2 completed
Running inference ...
[30%] Inferring Phase 0 completed
[40%] Inferring Phase 1 completed
[50%] Inferring Phase 2 completed
[55%] Inferring Phase 3 completed
Running technical mapping ...
[60%] Tech-Mapping Phase 0 completed
[65%] Tech-Mapping Phase 1 completed
[75%] Tech-Mapping Phase 2 completed
[80%] Tech-Mapping Phase 3 completed
[90%] Tech-Mapping Phase 4 completed
[95%] Generate netlist file "C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\impl\gwsynthesis\TangNanoDCJ11MEM_project.vg" completed
[100%] Generate report file "C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\impl\gwsynthesis\TangNanoDCJ11MEM_project_syn.rpt.html" completed
GowinSynthesis finish
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE gowin-synthesis-project>
<Project>
<Version>beta</Version>
<Device id="GW2AR-18C" package="QFN88" speed="8" partNumber="GW2AR-LV18QN88C8/I7"/>
<FileList>
<File path="C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\top.v" type="verilog"/>
<File path="C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\uart.v" type="verilog"/>
<File path="C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\src\ws2812.v" type="verilog"/>
</FileList>
<OptionList>
<Option type="disable_insert_pad" value="0"/>
<Option type="global_freq" value="100.000"/>
<Option type="looplimit" value="2000"/>
<Option type="output_file" value="C:\wks\ework\FPGA\TangNano\20k\TangNanoDCJ11MEM\TangNanoDCJ11MEM_project_baremetal\impl\gwsynthesis\TangNanoDCJ11MEM_project.vg"/>
<Option type="print_all_synthesis_warning" value="0"/>
<Option type="ram_rw_check" value="0"/>
<Option type="top_module" value="top"/>
<Option type="verilog_language" value="verilog-2001"/>
<Option type="vhdl_language" value="vhdl-1993"/>
</OptionList>
</Project>
Loading

0 comments on commit 596a732

Please sign in to comment.