Commit 071ef18c authored by Antoine Kaufmann's avatar Antoine Kaufmann
Browse files

condrum: checkpoint fix for memreader

parent d8f4300b
...@@ -24,9 +24,7 @@ void MemWriter::step() ...@@ -24,9 +24,7 @@ void MemWriter::step()
cur->engine->mem_op_complete(cur); cur->engine->mem_op_complete(cur);
cur = 0; cur = 0;
} } else if (!cur && !pending.empty()) {
if (!cur && !pending.empty()) {
cur = pending.front(); cur = pending.front();
pending.pop_front(); pending.pop_front();
...@@ -88,27 +86,26 @@ void MemReader::step() ...@@ -88,27 +86,26 @@ void MemReader::step()
size_t data_byte_width = DATA_WIDTH / 8; size_t data_byte_width = DATA_WIDTH / 8;
if (cur && p.mem_resvalid) { if (cur && p.mem_resvalid) {
std::cerr << "completed read from: " << cur->ram_addr << std::endl; std::cerr << "completed read from: " << std::hex << cur->ram_addr << std::endl;
p.mem_valid = 0; p.mem_valid = 0;
p.mem_resready = 0; /*for (size_t i = 0; i < 32; i++)
std::cerr << " val = " << p.mem_data[i] << std::endl;*/
size_t off = cur->ram_addr % data_byte_width; size_t off = cur->ram_addr % data_byte_width;
for (size_t i = 0; i < cur->len; i++, off++) { for (size_t i = 0; i < cur->len; i++, off++) {
size_t byte_off = off % 4; size_t byte_off = (off % 4);
cur->data[i] = (p.mem_data[off / 4] >> (byte_off * 8)) & 0xff; cur->data[i] = (p.mem_data[off / 4] >> (byte_off * 8)) & 0xff;
} }
cur->engine->mem_op_complete(cur); cur->engine->mem_op_complete(cur);
cur = 0; cur = 0;
} } else if (!cur && !pending.empty()) {
if (!cur && !pending.empty()) {
cur = pending.front(); cur = pending.front();
pending.pop_front(); pending.pop_front();
std::cerr << "issuing read from " << cur->ram_addr << std::endl; std::cerr << "issuing read from " << std::hex << cur->ram_addr << std::endl;
size_t data_offset = cur->ram_addr % data_byte_width; size_t data_offset = cur->ram_addr % data_byte_width;
std::cerr << " off=" << data_offset << std::endl;
if (cur->len > data_byte_width - data_offset) { if (cur->len > data_byte_width - data_offset) {
std::cerr << "MemReader::step: cannot be written in one cycle TODO" << std::endl; std::cerr << "MemReader::step: cannot be written in one cycle TODO" << std::endl;
...@@ -127,6 +124,7 @@ void MemReader::step() ...@@ -127,6 +124,7 @@ void MemReader::step()
size_t byte_off = off % 4; size_t byte_off = off % 4;
p.mem_valid |= (1 << (off / (SEG_WIDTH / 8))); p.mem_valid |= (1 << (off / (SEG_WIDTH / 8)));
} }
p.mem_resready = p.mem_valid;
uint64_t seg_addr = cur->ram_addr / data_byte_width; uint64_t seg_addr = cur->ram_addr / data_byte_width;
size_t seg_addr_bits = 12; size_t seg_addr_bits = 12;
...@@ -141,7 +139,9 @@ void MemReader::step() ...@@ -141,7 +139,9 @@ void MemReader::step()
} }
} }
p.mem_resready = 1; /*for (size_t i = 0; i < 3; i++)
std::cerr << " addr = " << p.mem_addr[i] << std::endl;
std::cerr << " mem_valid = " << (unsigned) p.mem_valid << std::endl;*/
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment