dram

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 3, 2026 License: MIT Imports: 2 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AddressMapping

type AddressMapping struct {
	// contains filtered or unexported fields
}

AddressMapping DRAM地址映射

对应 ChampSim 的 DRAM_ADDRESS_MAPPING

地址分解: ┌────────┬──────────┬───────────┬──────┬────────┬──────┬────────┐ │ Row │ Rank │ Column │ Bank │ BkGrp │ Chan │ Offset │ └────────┴──────────┴───────────┴──────┴────────┴──────┴────────┘

注意:与Cache地址分解不同,DRAM的地址分解更复杂, 需要考虑Channel、Rank、BankGroup、Bank、Row、Column等

func NewAddressMapping

func NewAddressMapping(config DRAMConfig) (*AddressMapping, error)

NewAddressMapping 创建地址映射

对应 ChampSim 的 DRAM_ADDRESS_MAPPING 构造函数

func (*AddressMapping) BankGroups

func (m *AddressMapping) BankGroups() uint32

BankGroups 返回BankGroup数量

func (*AddressMapping) Banks

func (m *AddressMapping) Banks() uint32

Banks 返回Bank数量

func (*AddressMapping) Channels

func (m *AddressMapping) Channels() uint32

Channels 返回Channel数量

func (*AddressMapping) Columns

func (m *AddressMapping) Columns() uint32

Columns 返回Column数量

func (*AddressMapping) GetBank

func (m *AddressMapping) GetBank(addr uint64) uint64

GetBank 获取Bank索引

func (*AddressMapping) GetBankGroup

func (m *AddressMapping) GetBankGroup(addr uint64) uint64

GetBankGroup 获取BankGroup索引

func (*AddressMapping) GetBankGroupIndex

func (m *AddressMapping) GetBankGroupIndex(addr uint64) uint64

GetBankGroupIndex 计算BankGroup在数组中的索引

对应 ChampSim 的 bankgroup_request_index()

Index = Rank * BankGroups + BankGroup

func (*AddressMapping) GetBankIndex

func (m *AddressMapping) GetBankIndex(addr uint64) uint64

GetBankIndex 计算Bank在BankRequest数组中的索引

对应 ChampSim 的 bank_request_index()

Index = Rank * BankGroups * Banks + BankGroup * Banks + Bank

func (*AddressMapping) GetChannel

func (m *AddressMapping) GetChannel(addr uint64) uint64

GetChannel 获取Channel索引

Address Layout (from LSB to MSB): [Offset | Channel | BankGroup | Bank | Column | Rank | Row]

func (*AddressMapping) GetColumn

func (m *AddressMapping) GetColumn(addr uint64) uint64

GetColumn 获取Column地址

func (*AddressMapping) GetRank

func (m *AddressMapping) GetRank(addr uint64) uint64

GetRank 获取Rank索引

func (*AddressMapping) GetRow

func (m *AddressMapping) GetRow(addr uint64) uint64

GetRow 获取Row地址

func (*AddressMapping) Ranks

func (m *AddressMapping) Ranks() uint32

Ranks 返回Rank数量

func (*AddressMapping) Rows

func (m *AddressMapping) Rows() uint32

Rows 返回Row数量

func (*AddressMapping) TotalBankGroups

func (m *AddressMapping) TotalBankGroups() uint32

TotalBankGroups 返回总BankGroup数量

func (*AddressMapping) TotalBanks

func (m *AddressMapping) TotalBanks() uint32

TotalBanks 返回总Bank数量

type BankRequest

type BankRequest struct {
	// Valid 是否有有效的请求正在处理
	Valid bool

	// RowBufferHit 是否为Row Buffer命中
	RowBufferHit bool

	// NeedRefresh 是否需要refresh
	NeedRefresh bool

	// UnderRefresh 是否正在refresh
	UnderRefresh bool

	// OpenRow 当前打开的行号
	// nil表示没有打开的行
	OpenRow *uint64

	// ReadyTime 就绪时间 (请求完成时间)
	ReadyTime uint64

	// Pkt 关联的请求包
	Pkt *DRAMPacket
}

BankRequest Bank请求状态

对应 ChampSim 的 DRAM_CHANNEL::BANK_REQUEST

type DRAMChannel

type DRAMChannel struct {

	// RQ Read Queue
	RQ []*DRAMPacket

	// WQ Write Queue
	WQ []*DRAMPacket
	// contains filtered or unexported fields
}

DRAMChannel DRAM通道

对应 ChampSim 的 DRAM_CHANNEL

负责管理一个DRAM通道的所有请求和Bank状态

func NewDRAMChannel

func NewDRAMChannel(config DRAMConfig) (*DRAMChannel, error)

NewDRAMChannel 创建新的DRAM通道

对应 ChampSim 的 DRAM_CHANNEL 构造函数

func (*DRAMChannel) AddRequest

func (dc *DRAMChannel) AddRequest(pkt *DRAMPacket) bool

AddRequest 添加请求到DRAM

对应 ChampSim 的 add_rq/add_wq

返回: - success: 是否成功添加

func (*DRAMChannel) GetStats

func (dc *DRAMChannel) GetStats() DRAMStats

GetStats 获取统计信息

func (*DRAMChannel) ResetStats

func (dc *DRAMChannel) ResetStats()

ResetStats 重置统计信息

func (*DRAMChannel) SetCycle

func (dc *DRAMChannel) SetCycle(cycle uint64)

SetCycle 设置当前周期

func (*DRAMChannel) Tick

func (dc *DRAMChannel) Tick()

Tick 时钟推进

type DRAMConfig

type DRAMConfig struct {

	// Channels 通道数 (暂时固定为1)
	Channels uint32

	// Ranks Rank数量 (通常为1或2)
	Ranks uint32

	// BankGroups Bank组数量 (DDR4引入,通常为4)
	BankGroups uint32

	// Banks 每组的Bank数量 (通常为4)
	Banks uint32

	// Rows 行数 (32K或64K)
	Rows uint32

	// Columns 列数 (通常为1K)
	Columns uint32

	// RQSize Read Queue大小
	RQSize uint32

	// WQSize Write Queue大小
	WQSize uint32

	// TRP Row Precharge time (关闭行延迟)
	// DDR4-2400: 15ns ≈ 15 cycles
	TRP uint64

	// TRCD RAS to CAS Delay (激活到读写延迟)
	// DDR4-2400: 15ns ≈ 15 cycles
	TRCD uint64

	// TCAS CAS Latency (列访问延迟)
	// DDR4-2400: 15ns ≈ 15 cycles
	TCAS uint64

	// TRAS Row Active time (行激活时间)
	// DDR4-2400: 35ns ≈ 35 cycles
	TRAS uint64

	// ChannelWidth 通道宽度 (bytes)
	// 通常为8字节 (64位)
	ChannelWidth uint32

	// Name DRAM名称
	Name string
}

DRAMConfig DRAM配置

对应 ChampSim 的 DRAM_CHANNEL 构造函数参数

默认配置基于 DDR4-2400 标准

func DefaultDRAMConfig

func DefaultDRAMConfig() DRAMConfig

DefaultDRAMConfig 返回默认DRAM配置 (DDR4-2400)

参数说明: - 1 Channel - 1 Rank - 4 BankGroups × 4 Banks = 16 Banks - 32K Rows × 1K Columns - Total: ~2GB per channel

type DRAMPacket

type DRAMPacket struct {

	// Address 物理地址
	Address uint64

	// VAddress 虚拟地址
	VAddress uint64

	// Data 数据内容
	Data uint64

	// InstrID 指令ID
	InstrID uint64

	// IsWrite 是否为写请求
	IsWrite bool

	// Scheduled 是否已被调度
	Scheduled bool

	// ReadyTime 就绪时间 (最早可以被调度的时间)
	ReadyTime uint64

	// InstrDependOnMe 依赖这个请求的指令ID列表
	InstrDependOnMe []uint64

	// Callback 请求完成时的回调函数
	// 参数: (address, data, cycle)
	Callback func(addr uint64, data uint64, cycle uint64)
}

DRAMPacket DRAM请求包

对应 ChampSim 的 DRAM_CHANNEL::request_type

type DRAMStats

type DRAMStats struct {

	// RQAccesses Read Queue访问次数
	RQAccesses uint64

	// WQAccesses Write Queue访问次数
	WQAccesses uint64

	// RQRowBufferHit Read Queue Row Buffer命中次数
	RQRowBufferHit uint64

	// RQRowBufferMiss Read Queue Row Buffer未命中次数
	RQRowBufferMiss uint64

	// WQRowBufferHit Write Queue Row Buffer命中次数
	WQRowBufferHit uint64

	// WQRowBufferMiss Write Queue Row Buffer未命中次数
	WQRowBufferMiss uint64

	// RQFull Read Queue满的次数
	RQFull uint64

	// WQFull Write Queue满的次数
	WQFull uint64

	// DBusCongested 数据总线拥塞次数
	DBusCongested uint64

	// DBusCycles 数据总线拥塞周期数
	DBusCycles uint64

	// RefreshCycles Refresh周期数
	RefreshCycles uint64
}

DRAMStats DRAM统计信息

对应 ChampSim 的 dram_stats

func (*DRAMStats) RowBufferHitRate

func (s *DRAMStats) RowBufferHitRate() float64

RowBufferHitRate 计算Row Buffer命中率

func (*DRAMStats) TotalAccesses

func (s *DRAMStats) TotalAccesses() uint64

TotalAccesses 总访问次数

func (*DRAMStats) WriteRowBufferHitRate

func (s *DRAMStats) WriteRowBufferHitRate() float64

WriteRowBufferHitRate 计算写Row Buffer命中率

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL