From cd7823e81d000db2382328738e67dfff8091b62b Mon Sep 17 00:00:00 2001 From: Jacob Lifshay Date: Wed, 25 Feb 2026 00:08:42 -0800 Subject: [PATCH] move MemoryInterface and related types to crate::main_memory_and_io --- crates/cpu/src/fetch.rs | 49 ++---------------------- crates/cpu/src/lib.rs | 1 + crates/cpu/src/main_memory_and_io.rs | 56 ++++++++++++++++++++++++++++ crates/cpu/tests/fetch.rs | 8 ++-- 4 files changed, 65 insertions(+), 49 deletions(-) create mode 100644 crates/cpu/src/main_memory_and_io.rs diff --git a/crates/cpu/src/fetch.rs b/crates/cpu/src/fetch.rs index 20035eb..eb766d9 100644 --- a/crates/cpu/src/fetch.rs +++ b/crates/cpu/src/fetch.rs @@ -8,6 +8,10 @@ use crate::{ CpuConfigLog2FetchWidthInBytes, CpuConfigLog2L1ICacheLineCount, CpuConfigMaxFetchesInFlight, PhantomConstCpuConfig, }, + main_memory_and_io::{ + MemoryInterface, MemoryOperationErrorKind, MemoryOperationFinish, + MemoryOperationFinishKind, MemoryOperationKind, MemoryOperationStart, + }, next_pc::{ FETCH_BLOCK_ID_WIDTH, NextPcToFetchInterface, NextPcToFetchInterfaceInner, ResetStatus, ResetSteps, SimValueDefault, @@ -22,51 +26,6 @@ use fayalite::{ }; use std::{collections::VecDeque, fmt}; -#[hdl] -pub enum MemoryOperationKind { - Read, - Write, -} - -#[hdl(no_static)] -pub struct MemoryOperationStart + PhantomConstCpuConfig> { - pub kind: MemoryOperationKind, - pub addr: UInt<64>, - pub write_data: ArrayType, CpuConfigFetchWidthInBytes>, - pub fetch_block_id: UInt<{ FETCH_BLOCK_ID_WIDTH }>, // for debugging - pub config: C, -} - -#[hdl] -pub enum MemoryOperationErrorKind { - Generic, -} - -#[hdl] -pub enum MemoryOperationFinishKind { - Success(MemoryOperationKind), - Error(MemoryOperationErrorKind), -} - -#[hdl(no_static)] -pub struct MemoryOperationFinish + PhantomConstCpuConfig> { - pub kind: MemoryOperationFinishKind, - pub read_data: ArrayType, CpuConfigFetchWidthInBytes>, - pub config: C, -} - -#[hdl(no_static)] -pub struct MemoryInterface + PhantomConstCpuConfig> { - pub start: ReadyValid>, - #[hdl(flip)] - pub finish: ReadyValid>, - /// for debugging - #[hdl(flip)] - pub next_fetch_block_ids: - HdlOption, CpuConfigMaxFetchesInFlight>>, - pub config: C, -} - #[hdl(no_static)] pub struct FetchToDecodeInterfaceInner + PhantomConstCpuConfig> { pub start_pc: UInt<64>, diff --git a/crates/cpu/src/lib.rs b/crates/cpu/src/lib.rs index 62936de..7131241 100644 --- a/crates/cpu/src/lib.rs +++ b/crates/cpu/src/lib.rs @@ -4,6 +4,7 @@ pub mod config; pub mod decoder; pub mod fetch; pub mod instruction; +pub mod main_memory_and_io; pub mod next_pc; pub mod powerisa_instructions_xml; pub mod reg_alloc; diff --git a/crates/cpu/src/main_memory_and_io.rs b/crates/cpu/src/main_memory_and_io.rs new file mode 100644 index 0000000..f5e8779 --- /dev/null +++ b/crates/cpu/src/main_memory_and_io.rs @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +// See Notices.txt for copyright information + +use crate::{ + config::{ + CpuConfig, CpuConfigFetchWidthInBytes, CpuConfigMaxFetchesInFlight, PhantomConstCpuConfig, + }, + next_pc::FETCH_BLOCK_ID_WIDTH, + util::array_vec::ArrayVec, +}; +use fayalite::{prelude::*, util::ready_valid::ReadyValid}; + +#[hdl] +pub enum MemoryOperationKind { + Read, + Write, +} + +#[hdl(no_static)] +pub struct MemoryOperationStart + PhantomConstCpuConfig> { + pub kind: MemoryOperationKind, + pub addr: UInt<64>, + pub write_data: ArrayType, CpuConfigFetchWidthInBytes>, + pub fetch_block_id: UInt<{ FETCH_BLOCK_ID_WIDTH }>, // for debugging + pub config: C, +} + +#[hdl] +pub enum MemoryOperationErrorKind { + Generic, +} + +#[hdl] +pub enum MemoryOperationFinishKind { + Success(MemoryOperationKind), + Error(MemoryOperationErrorKind), +} + +#[hdl(no_static)] +pub struct MemoryOperationFinish + PhantomConstCpuConfig> { + pub kind: MemoryOperationFinishKind, + pub read_data: ArrayType, CpuConfigFetchWidthInBytes>, + pub config: C, +} + +#[hdl(no_static)] +pub struct MemoryInterface + PhantomConstCpuConfig> { + pub start: ReadyValid>, + #[hdl(flip)] + pub finish: ReadyValid>, + /// for debugging + #[hdl(flip)] + pub next_fetch_block_ids: + HdlOption, CpuConfigMaxFetchesInFlight>>, + pub config: C, +} diff --git a/crates/cpu/tests/fetch.rs b/crates/cpu/tests/fetch.rs index 0a3cac5..30ef7f0 100644 --- a/crates/cpu/tests/fetch.rs +++ b/crates/cpu/tests/fetch.rs @@ -3,10 +3,10 @@ use cpu::{ config::{CpuConfig, UnitConfig}, - fetch::{ - FetchToDecodeInterface, FetchToDecodeInterfaceInner, MemoryInterface, - MemoryOperationErrorKind, MemoryOperationFinish, MemoryOperationFinishKind, - MemoryOperationKind, MemoryOperationStart, fetch, + fetch::{FetchToDecodeInterface, FetchToDecodeInterfaceInner, fetch}, + main_memory_and_io::{ + MemoryInterface, MemoryOperationErrorKind, MemoryOperationFinish, + MemoryOperationFinishKind, MemoryOperationKind, MemoryOperationStart, }, next_pc::{FETCH_BLOCK_ID_WIDTH, NextPcToFetchInterface, NextPcToFetchInterfaceInner}, unit::UnitKind,