ans <= (others => '0'), assuming 'ans' is a vector
it's an array of record (structured signals)
type bus_mm_out_t is
record
data : bus_mm_data_t;
device_sel : bus_mm_device_sel_t;
...
end record;
bus_mm_data_t is a vector, with a size of 32bit
type bus_mm_pool_out_t is array (0 to bus_mm_device_n-1) of bus_mm_out_t;
this type represents the whole backplane as a collection of devices (excluding their physical signals, which are handled and propagated through another dedicated record-type)
-- [CPU] ==== core_bus ==== [adapter] ==== bus_mm
--
-- bus_mm
-- +-- mux
-- +-- device0
-- +-- device1
-- ...
-- +-- devicen-1
the core_bus is a simple cpu_bus which doesn't care about misalignment, dtack, wait-cycles, and other details, it simply passes the IO_request{rw,size,data,address} to the adapter which uses the multiplexer in order to *select* the proper device (16 devices are available at the moment), also the adapter handles all the low level detail (misalignment, dtack, wait-cycles, physical size-cycles e.g. a NVRAM of 8bit attached to a 32bit data bus, etc), and back propagates a feedback to the core_bus: { success, failure&cause }
the cpu doesn't care about those details, it's not like on a MIPS processor where you have to physically handle the misaligned access with a specific pair of instructions, it's more like the 68000 cpu
in case of failure an exception is also raised and the cop0 (exception handler) will look at the cause- register in order to issue the right ISR-vector to the cpu: bus error exception

not yet completed, it's based on an old working project I done 3 years ago, it's the first on the left in the picture, whereas the last one on the right is the current project, completely rewritten from the scratch, you can see a few progress
