class RegisterBase {
public:
RegisterBase(BusBase* _in_, BusBase* _out_, BusBase* _control_,
unsigned long _d_width, unsigned long _ins_active_bits_);
~RegisterBase();
void operator()();
void named(string _name);
void debug(string prefix="");
string name();
private:
BusBase* _input_bus_;
BusBase* _output_bus_;
BusBase* _control_bus_;
unsigned long _register_;
unsigned long _data_width_;
unsigned long _instruction_active_bits_;
string _name_;
};
基础寄存器类控制指令工两位,控制读写状态以及sleep状态
#define REGISTER_NOT_ENABLE 0b00 //sleep状态,寄存器不执行任何指令
#define REGISTER_CONTAIN 0b01 //保留
#define REGISTER_WRITE 0b10 //向输出总线写数据
#define REGISTER_READ 0b11 //从输入总线读数据
RegisterBase(BusBase* _in_, BusBase* _out_, BusBase* _control_, unsigned long _d_width, unsigned long _ins_active_bits_);描述
构造寄存器对象。
输入
- (BusBase*) _in_ 数据输入总线
- (BusBase*) _out_ 数据输出总线
- (BusBase*) _control_ 控制总线
- (unsigned long) _d_width 数据宽度
- (unsigned long) _ins_active_bits_ 指令有效位,多个寄存器�和多个组件共用一条总线,不同组件使用不同�位。
输出
None
例子
#include "register.h"
#include "bus.h"
int main() {
unsigned long _data_width = 16;
unsigned long _ins_width = 8;
base::BusBase _in_(_data_width);
base::BusBase _out_(_data_width);
unsigned long _active_bits = 0b00001100;
base::BusBase _control_(_ins_width);
base::RegisterBase _reg(&_in_, &_out_, &_control_, _data_width, _active_bits);
}边界
- 寄存器构造的输入总线和输出总线可以是一根总线,这表示寄存器从一根线进行�数据传递,不过需要注意的是,读和写的指令周期必须严格隔开,这对指令执行逻辑的设计会有更高的要求。
~RegisterBase();描述
析构寄存器对象
输入
None
输出
None
例子
当寄存器对象生命周期结束时自动调用。
边界
None
void operator()();描述
重载()运算符,使对象成为一个伪函数,调用该方法后,寄存器从控制总线上取出指令,并根据有效位取得指令后,执行该指令。
如果是REGISTER_WRITE则把寄存器的数据写到输出总线上,如果是REGISTER_READ则从输入总线上把数据读进来。
输入
None
输出
None
例子
#include "register.h"
#include "bus.h"
#include "bits.h"
int main() {
unsigned long _data_width = 16;
unsigned long _ins_width = 8;
base::BusBase _in_(_data_width);
base::BusBase _out_(_data_width);
unsigned long _active_bits = 0b00001100;
base::BusBase _control_(_ins_width);
base::RegisterBase _reg(&_in_, &_out_, &_control_, _data_width, _active_bits);
//使用bits下的函数根据有效位生产有效指令并写入控制总线
_control_.in(base::_generate_instruction(REGISTER_READ, _active_bits));
_in_.in(0b0011111111000000);
//执行指令
_reg();
}边界
None
void named(string _name);同bus.h命名函数。
string name();同bus.h的name函数。
void debug(string prefix="");同bus.h的调试函数。