aboutsummaryrefslogtreecommitdiff
path: root/notes/memory.txt
diff options
context:
space:
mode:
Diffstat (limited to 'notes/memory.txt')
-rw-r--r--notes/memory.txt40
1 files changed, 40 insertions, 0 deletions
diff --git a/notes/memory.txt b/notes/memory.txt
new file mode 100644
index 00000000..22fb95dc
--- /dev/null
+++ b/notes/memory.txt
@@ -0,0 +1,40 @@
+Whats resonable to express, how this relates to hardware
+
+Catch-all? Can always use black boxes
+
+Read/write ports? explicitly call it out in front end, and have a r/w accessor
+ Can infer from enables that they are mutually exclusive in some cases, in general need SAT solver
+ Writer often wants a r/w port to always be generated
+ r/w ports are always synchronous because writes always synchronous
+ Example of read/write to same address, can handle differently in BRAM's on FPGA, but is undefined for SRAMs. (Specifically for Synchronous).
+ In this case, it is backend speciifc, so should not be in chisel code.
+
+Don't have both synchronous and asynchronous reads on the same memory
+Declaring the memory itself to have delay? - have node for seq, and node for combinational. Could have >1 delay, but not often used. Boolean for now (0 or 1)
+
+Absorbing registers should stop - register the address input, and chisel is allowed to retime the register into the address
+
+Not firrtl's job to autotune - that is the library writer (ASIC backend? FIRRTL library?)
+ e.g. FPGA backend is an executable that iterates and does DSE
+
+Masks?
+ Front-end generates mem's of type bundles or vec for enable granularity.
+ Lowering does not expand these.
+ Backends treat these differently.
+ How do we do this? Try not expanding mems, but expanding accessors.
+ e.g.
+
+mem m : { tag : UInt<10> data : UInt<128> }
+accessor r = m[i]
+accessor w = m[i]
+
+==>
+
+mem m : { tag : UInt<10> data : UInt<128> }
+accessor r#tag = m.tag[i]
+accessor r#data = m.data[i]
+accessor w#tag = m.tag[i]
+accessor w#data = m.data[i]
+
+
+Eliminate flips from bundles in mems, must error.