Skip to content
This repository was archived by the owner on Nov 27, 2025. It is now read-only.

OsawaKousei/Basys3-Hack-PC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Basys3-Hack-PC

Basys3 FPGA上で動作するHackコンピュータの実装

本プロジェクトは、「コンピュータシステムの理論と実装(通称: Nand2Tetris)」で定義される Hackコンピュータアーキテクチャ をXilinx Basys3 FPGAボード上に実装したものです。SystemVerilog (IEEE 1800) で記述され、Vivado Design Suite向けに最適化されています。


📋 目次


概要

Hackコンピュータは、16ビットのハーバード・アーキテクチャを採用した教育用プロセッサです。本実装では、以下の特徴を持ちます:

  • 16ビット CPU: カスタムALU、Dレジスタ、Aレジスタ、プログラムカウンタを搭載
  • メモリマップドI/O: スイッチ、ボタン、LED、7セグメントディスプレイを統合
  • FPGA最適化設計:
    • ROM → Distributed RAM (LUTRAM) として推論
    • RAM → Block RAM (BRAM) として推論
    • クロック分周回路による12.5MHz動作 (100MHz入力クロックから生成)

主な機能

✅ 実装済み機能

  1. Hack CPU完全実装

    • A命令 (即値ロード)
    • C命令 (ALU演算 + 条件分岐)
    • 7種類のジャンプ条件サポート
  2. メモリシステム

    • ROM: 4K words (12-bit アドレス空間) - 命令メモリ
    • RAM: 16K words (14-bit アドレス空間) - データメモリ
  3. ペリフェラルI/O

    アドレス デバイス 方向 説明
    0x6000 SW[15:0] 読取 16個のスライドスイッチ
    0x6001 BTN[4:0] 読取 5個のプッシュボタン (C/U/L/R/D)
    0x6002 7-Segment 書込 4桁7セグメントディスプレイ (BCD変換自動)
    0x6003 LED[15:0] 書込 16個のLED
  4. 信号調整機能

    • デバウンス回路 (約10ms安定化)
    • CDC同期回路 (2段FFシンクロナイザ)

ハードウェア構成

ターゲットデバイス

  • FPGA: Xilinx Artix-7 (XC7A35T-1CPG236C)
  • 評価ボード: Digilent Basys3

クロック設計

  • 入力クロック: 100MHz (XDCで制約定義済み)
  • システムクロック: 12.5MHz (1/8分周)
    • タイミング余裕を確保するため低速動作

ソフトウェア仕様

プロジェクトには3種類のサンプルプログラム (.hack バイナリ) が含まれています:

ファイル名 説明
calculator.hack 加減乗算対応の電卓アプリケーション (メイン成果物)
math.hack 乗算テストプログラム
io_test.hack I/Oペリフェラル動作確認用

電卓アプリケーション (calculator.hack)

ユーザーインターフェース

デバイス 役割 詳細
SW[13:0] 数値入力 0 ~ 16383 までの即値を14ビットバイナリで指定
SW[15:14] モード選択 00: 加算 / 01: 減算 / 10: 乗算 / 11: (未使用)
BTN_U Load A SW値を Val_A にロード
BTN_D Load B SW値を Val_B にロード
BTN_R Execute 現在のモード設定に従い演算を実行
BTN_L (予約) 将来の機能拡張用
BTN_C Reset システムリセット (CPU初期化)

操作手順例: 123 + 456 を計算

  1. 値Aの入力

    • SW[13:0] に 123 (バイナリ: 00000001111011) をセット
    • SW[15:14] を 00 (加算モード) に設定
    • BTN_U を押下 → Val_A に 123 が格納
  2. 値Bの入力

    • SW[13:0] を 456 (バイナリ: 00000111001000) に変更
    • BTN_D を押下 → Val_B に 456 が格納
  3. 演算実行

    • BTN_R を押下 → 123 + 456 = 579 が計算される
    • 7セグメントディスプレイに 0579 と表示

乗算アルゴリズムの実装

Hack ALUは乗算命令を持たないため、シフト加算アルゴリズム (Shift-and-Add) をソフトウェアで実装しました。


ディレクトリ構成

Basys3-Hack-PC/
├── rtl/                          # RTL設計ファイル (SystemVerilog)
│   ├── basys3_hack_pc_top.sv    # トップレベルモジュール
│   ├── hack_cpu.sv              # Hack CPU実装
│   ├── hack_alu.sv              # 16ビットALU
│   ├── hack_ram.sv              # データメモリ (16K × 16bit)
│   ├── hack_rom.sv              # 命令メモリ (4K × 16bit)
│   ├── memory_io_bridge.sv      # アドレスデコーダ & I/Oブリッジ
│   ├── seven_seg_driver.sv      # 7セグメントディスプレイドライバ
│   └── debouncer.sv             # ボタンデバウンス回路
│
├── tb/                           # テストベンチ (Simulation)
│   ├── system_tb.sv             # システム統合テスト
│   ├── hack_cpu_tb.sv           # CPU単体テスト
│   └── io_test_tb.sv            # I/O検証テスト
│
├── sw/                           # ソフトウェア (Hack Assembly)
│   ├── calculator.hack          # 電卓アプリケーション
│   ├── math.hack                # 乗算テストプログラム
│   └── io_test.hack             # I/Oテストプログラム
│
├── xdc/                          # 制約ファイル (Vivado XDC)
│   └── Basys3_Hack_PC.xdc       # ピン配置 & タイミング制約
│
├── Basys3-Hack-PC.xpr           # Vivado プロジェクトファイル
├── Basys3-Hack-PC.runs/         # ビルド出力ディレクトリ
├── Basys3-Hack-PC.sim/          # シミュレーション作業ディレクトリ
└── README.md                     # このファイル

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors