Skip to content

m-rajaee/RiskV

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RISC-V Architecture Simulator and Assembler

توسعه دهندگان

علیرضا مختاری - سید محمد امین رجائی - محمد جواد عباسی

🧠 درباره پروژه

این پروژه یک اسمبلر و شبیه‌ساز ساده برای معماری RISC-V (سطح RV32I) است. برنامه قادر است فایل اسمبلی (program.asm) را در چهار مرحله به صورت کامل پردازش و اجرا کند:

  1. پاس اول: تحلیل لیبل‌ها و راهنماها (directives)
  2. پاس دوم: رمزگذاری (Encoding) دستورها
  3. تولید فایل خروجی باینری (output.txt)
  4. اجرای مرحله‌به‌مرحله دستورات با شبیه‌سازی دقیق سخت‌افزار (Simulator)
        [program.asm]
             ↓
         ┌────────┐
         │ Parser │ ← پاس اول: تحلیل لیبل‌ها
         └────────┘
             ↓
     ┌────────────────┐
     │ Instruction    │ ← پاس دوم: تبدیل دستورها به باینری
     │  Encoder       │
     └────────────────┘
             ↓
    ┌────────────────────┐
    │ File Output Writer │ ← تولید output.txt
    └────────────────────┘
             ↓
    ┌────────────────────┐
    │ 	  Simulator      │ ← خواندن و اجرای output.txt
    └────────────────────┘

📁 ساختار فایل‌ها

/project-root
│
├── input.asm             ← فایل اسمبلی نمونه
├── output.txt            ← فایل باینری خروجی 
│
├── main.cpp              ← فایل اصلی برنامه: اجرای کل مراحل
├── encoder.cpp/.h        ← رمزگذار دستورات RISC-V به باینری
├── simulator.cpp/.h      ← پیاده‌سازی شبیه‌ساز معماری RV32I
│

⚙️ پیش‌نیازها

  • کامپایلر C++ استاندارد (مثلاً g++)
  • سیستم عامل Windows/Linux/Mac
  • فایل اسمبلی ورودی (input.asm)

🛠️ نحوه بیلد (Build) پروژه

اگر فایل‌ها جدا هستند:

g++ -std=c++11 -o riscv main.cpp encoder.cpp simulator.cpp symbol_table.cpp

اگر از Makefile استفاده می‌کنید:

make

▶️ نحوه اجرای پروژه

پس از کامپایل، تنها کافی است دستور زیر را اجرا کنید:

./riscv

در اجرای برنامه:

  • فایل input.asm خوانده می‌شود.
  • فایل output.txt تولید می‌شود.
  • شبیه‌ساز دستورها را گام‌به‌گام اجرا می‌کند و وضعیت رجیسترها و حافظه را نشان می‌دهد.

📝 مثال input.asm

.org 0x1000

start:
  addi x1, x0, 10
  addi x2, x0, 5
  add  x3, x1, x2
  sub  x4, x3, x2
  beq  x4, x1, match
  addi x5, x0, 1

match:
  lw x6, 0(x10)
  addi x7, x0, 99

halt:
  jal x0, halt

.org 0x2000
.word 1234
.word 5678

🔍 پشتیبانی از راهنماها (Directives)

راهنما عملکرد
.org تنظیم آدرس شروع
.word قرار دادن مقدار 32 بیتی در حافظه
.half قرار دادن مقدار 16 بیتی در حافظه
.byte قرار دادن مقدار 8 بیتی در حافظه
.align n تراز کردن آدرس به توان ۲ از n
i rd, imm بارگذاری مقدار imm به rd با استفاده از lui+addi یا addi

🧪 فایل خروجی

فایل output.txt در مرحلهٔ سوم به‌صورت هگزادسیمال (hex mode) ایجاد می‌شود و شامل دستورات رمزگذاری‌شده RISC-V است. این فایل به عنوان ورودی برای شبیه‌ساز استفاده می‌شود.


✅ خروجی شبیه‌ساز

در هر چرخه کلاک، وضعیت سیستم و رجیستر ها به این شکل نمایش داده می‌شود:

clock: 4
 x0: 00000000  x1: 0000000A  x2: 00000005 ...
 PC: 00001010  MAR: 00001000  MDR: 00A00093 ...

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors