|
|
@ -19,6 +19,7 @@ type Module struct { |
|
|
|
|
|
|
|
|
|
|
|
isStopped bool |
|
|
|
isStopped bool |
|
|
|
debugEnabled bool |
|
|
|
debugEnabled bool |
|
|
|
|
|
|
|
name string // Used to print the module name when debugging
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (h *Module) programCounter() int64 { |
|
|
|
func (h *Module) programCounter() int64 { |
|
|
@ -40,7 +41,8 @@ func (h *Module) debug(format string, args ...interface{}) { |
|
|
|
if !h.debugEnabled { |
|
|
|
if !h.debugEnabled { |
|
|
|
return |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
fmt.Printf("[DEBUG] "+format+"\n", args...) |
|
|
|
|
|
|
|
|
|
|
|
fmt.Printf("[DEBUG] ["+h.name+"] "+format+"\n", args...) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func (h *Module) Step() error { |
|
|
|
func (h *Module) Step() error { |
|
|
@ -72,6 +74,10 @@ func (h *Module) Run() error { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func NewHALModule(program Program, registerSize uint64, ioSize int64, debug bool) (*Module, error) { |
|
|
|
func NewHALModule(program Program, registerSize uint64, ioSize int64, debug bool) (*Module, error) { |
|
|
|
|
|
|
|
return NewNamedHALModule(program, registerSize, ioSize, debug, "") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func NewNamedHALModule(program Program, registerSize uint64, ioSize int64, debug bool, name string) (*Module, error) { |
|
|
|
if registerSize <= 10 { |
|
|
|
if registerSize <= 10 { |
|
|
|
return nil, fmt.Errorf("register size must be greater then 10 [ registerSize = %d ]", registerSize) |
|
|
|
return nil, fmt.Errorf("register size must be greater then 10 [ registerSize = %d ]", registerSize) |
|
|
|
} |
|
|
|
} |
|
|
@ -80,12 +86,13 @@ func NewHALModule(program Program, registerSize uint64, ioSize int64, debug bool |
|
|
|
return nil, fmt.Errorf("io size must positive") |
|
|
|
return nil, fmt.Errorf("io size must positive") |
|
|
|
} |
|
|
|
} |
|
|
|
for i := int64(0); i <= ioSize; i++ { |
|
|
|
for i := int64(0); i <= ioSize; i++ { |
|
|
|
ios[i] = NewCommandLineIO(i) |
|
|
|
ios[i] = NewCommandLineIO(i, name) |
|
|
|
} |
|
|
|
} |
|
|
|
return &Module{ |
|
|
|
return &Module{ |
|
|
|
programStorage: program, |
|
|
|
programStorage: program, |
|
|
|
register: make([]float64, registerSize), |
|
|
|
register: make([]float64, registerSize), |
|
|
|
IO: ios, |
|
|
|
IO: ios, |
|
|
|
debugEnabled: debug, |
|
|
|
debugEnabled: debug, |
|
|
|
|
|
|
|
name: name, |
|
|
|
}, nil |
|
|
|
}, nil |
|
|
|
} |
|
|
|
} |
|
|
|