From bac750fb9979e4faa7b2925106b58eeddb570a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcelina=20Ko=C5=9Bcielnicka?= Date: Thu, 27 Jan 2022 23:26:56 +0100 Subject: kernel/mem: Add read-first semantic emulation code. --- kernel/mem.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'kernel/mem.h') diff --git a/kernel/mem.h b/kernel/mem.h index 4d0a1d702..ae87b1285 100644 --- a/kernel/mem.h +++ b/kernel/mem.h @@ -74,6 +74,9 @@ struct MemWr : RTLIL::AttrObject { res[i] = State(sub >> i & 1); return res; } + + std::pair> compress_en(); + SigSpec decompress_en(const std::vector &swizzle, SigSpec sig); }; struct MemInit : RTLIL::AttrObject { @@ -209,6 +212,15 @@ struct Mem : RTLIL::AttrObject { // emulation logic. void emulate_rd_srst_over_ce(int idx); + // Returns true iff emulate_read_first makes sense to call. + bool emulate_read_first_ok(); + + // Emulates all read-first read-write port relationships in terms of + // all-transparent ports, by delaying all write ports by one cycle. + // This can only be used when all read ports and all write ports are + // in the same clock domain. + void emulate_read_first(FfInitVals *initvals); + Mem(Module *module, IdString memid, int width, int start_offset, int size) : module(module), memid(memid), packed(false), mem(nullptr), cell(nullptr), width(width), start_offset(start_offset), size(size) {} }; -- cgit v1.2.3