improve emulator output

This commit is contained in:
2026-11-07 22:10:11 +02:00
parent f43a16d1b2
commit 81deb637c0
+31 -8
View File
@@ -4,11 +4,31 @@
namespace DynamicPipeline { namespace DynamicPipeline {
int weight_op(DynamicPipeline::CommandType o) static int weight_op(DynamicPipeline::CommandType o)
{ {
return Expression::Token::weight_op(static_cast<Expression::Token::Operator>(o + 2)); return Expression::Token::weight_op(static_cast<Expression::Token::Operator>(o + 2));
} }
static const char *op_to_str(DynamicPipeline::CommandType o)
{
switch (o)
{
case ADD:
return "ADD";
case SUB:
return "SUB";
case MUL:
return "MUL";
case DIV:
return "DIV";
case POW:
return "POW";
default:
pr_warn("Impossible token - this is a bug!");
return "Impossible token";
}
}
void System::init(const std::vector<Command> * const prg, const std::array<double, DYN_PIPELINE_MEM_SIZE>& mem, const int init_mem_size) void System::init(const std::vector<Command> * const prg, const std::array<double, DYN_PIPELINE_MEM_SIZE>& mem, const int init_mem_size)
{ {
pr_info("Dynamic Pipeline System initialized with:\n" pr_info("Dynamic Pipeline System initialized with:\n"
@@ -40,21 +60,22 @@ void System::print_pipeline(void) const
{ {
if (layer_cmd[i] != -1) if (layer_cmd[i] != -1)
{ {
pri_info(std::setw(3) << layer_cmd[i] << " | "); pri_info(std::setw(3) << layer_cmd[i] << " (" << op_to_str((*program_memory)[layer_cmd[i]].t) << ") | ");
} }
else else
{ {
pri_info("IDL | "); pri_info("--- (---) | ");
} }
} }
if (layer_cmd[DYN_PIPELINE_LAYERS - 1] != -1) if (layer_cmd[DYN_PIPELINE_LAYERS - 1] != -1)
{ {
pri_info(std::setw(3) << layer_cmd[DYN_PIPELINE_LAYERS - 1] << "\n"); int addr = layer_cmd[DYN_PIPELINE_LAYERS - 1];
pri_info(std::setw(3) << addr << " (" << op_to_str((*program_memory)[addr].t) << ")\n");
} }
else else
{ {
pri_info("IDL\n"); pri_info("--- (---)\n");
} }
} }
@@ -123,7 +144,7 @@ void System::step(void)
if (int prg_mem_addr = layer_cmd[DYN_PIPELINE_LAYERS - 1]; prg_mem_addr != -1) if (int prg_mem_addr = layer_cmd[DYN_PIPELINE_LAYERS - 1]; prg_mem_addr != -1)
{ {
Command &cmd = (*program_memory)[prg_mem_addr]; Command &cmd = (*program_memory)[prg_mem_addr];
pr_info("Instruction " << prg_mem_addr << " completes, writes output to " << cmd.res); pr_info("Instruction " << prg_mem_addr << " (" << op_to_str(cmd.t) << ") completes, writes output to " << cmd.res);
data_memory[cmd.res].ready = 1; data_memory[cmd.res].ready = 1;
} }
@@ -140,14 +161,14 @@ void System::step(void)
if (instruction_ready()) if (instruction_ready())
{ {
Command &cmd = (*program_memory)[pc]; Command &cmd = (*program_memory)[pc];
pr_info("Instruction " << pc << " reads " << cmd.op1 << " and " << cmd.op2 << " and enters the pipeline"); pr_info("Instruction " << pc << " (" << op_to_str(cmd.t) << ") reads " << cmd.op1 << " and " << cmd.op2 << " and enters the pipeline");
layer_cmd[0] = pc; layer_cmd[0] = pc;
pc++; pc++;
} }
pr_info("Pipeline step took " << time_taken << " ticks"); pr_info("Step took " << time_taken << " ticks");
} }
void System::run(void) void System::run(void)
@@ -155,6 +176,8 @@ void System::run(void)
while (next_instruction() || !pipeline_empty()) while (next_instruction() || !pipeline_empty())
{ {
print_pipeline(); print_pipeline();
pri_info("\n");
step(); step();
pri_info("\n"); pri_info("\n");
} }