Documentation
¶
Index ¶
- type AddressMapping
- func (m *AddressMapping) BankGroups() uint32
- func (m *AddressMapping) Banks() uint32
- func (m *AddressMapping) Channels() uint32
- func (m *AddressMapping) Columns() uint32
- func (m *AddressMapping) GetBank(addr uint64) uint64
- func (m *AddressMapping) GetBankGroup(addr uint64) uint64
- func (m *AddressMapping) GetBankGroupIndex(addr uint64) uint64
- func (m *AddressMapping) GetBankIndex(addr uint64) uint64
- func (m *AddressMapping) GetChannel(addr uint64) uint64
- func (m *AddressMapping) GetColumn(addr uint64) uint64
- func (m *AddressMapping) GetRank(addr uint64) uint64
- func (m *AddressMapping) GetRow(addr uint64) uint64
- func (m *AddressMapping) Ranks() uint32
- func (m *AddressMapping) Rows() uint32
- func (m *AddressMapping) TotalBankGroups() uint32
- func (m *AddressMapping) TotalBanks() uint32
- type BankRequest
- type DRAMChannel
- type DRAMConfig
- type DRAMPacket
- type DRAMStats
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) 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) 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: 是否成功添加
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 ¶
RowBufferHitRate 计算Row Buffer命中率
func (*DRAMStats) WriteRowBufferHitRate ¶
WriteRowBufferHitRate 计算写Row Buffer命中率