Professional Documents
Culture Documents
Agile Implementation of A Fully Parameterizable Funnel Shifter
Agile Implementation of A Fully Parameterizable Funnel Shifter
Test 2 - test_funnel_shifter_full
➢ When FIFO gets full, it must be correctly detected and full output of funnel_shifter must be
asserted.
➢ Fifo should not get full, if there is space in the buffer for a complete entry.
➢ Buffer full must be detected correctly and asserted.
Verification/ Results
Test 3 - test_funnel_shifter_1
➢ Funnel shifter must deassert empty correctly once data is available.
➢ Circular buffer manager for FIFO memory must work correctly at wraparound for both
write pointer as well as read pointer
➢ If FIFO is not empty, and either there is enough space in buffer to store one word from
FIFO, or there will be enough space after the active pull, then pull must be asserted to FIFO
to bring a word from FIFO into buffer, to effectively save 1CC.
Verification/ Results
Test 4 - test_funnel_shifter_0
➢ Funnel shifter must return bit/ range selections of written data correctly on every pull
➢ Funnel shifter must be able to concatenate ranges from different written words correctly at
crossover of written words
➢ Funnel shifter must be able to concatenate ranges from different written words correctly at
buffer wraparound.
➢ When all data has been read, funnel shifter must finally assert empty with data_out = 0.
Verification/ Results
Test 5 - test_funnel_shifter_input_narrower
➢ Funnel shifter must keep bringing written words from memory into buffer but must empty
asserted till enough data is available to be read in a single read word.
➢ Empty must also stay asserted while buffer has less data than reading word size
➢ Funnel shifter must join written words and return a read word correctly.
Incremental development
➢ For me, this was one digital module I did not have a clear idea how to do it, now I do.
➢ The design was the major learning and most of them are generic and transferable -
○ It’s easier if memory word size matches the writing width rather than the reading width
○ It is easier to store words read from memory into a buffer and then select bits than to
do it any other way.
○ buffer be a vector of bits rather than a memory or a vector of words.
○ In summary, a buffer of bits should be present at the boundary of bit width conversion
and there should be a memory before it to handle any mismatches in clock frequencies
or burst sizes.
➢ The project seems easier after having done it.
➢ A few of my doubts in Chisel syntax that had persisted, were cleared during the project
especially related to order of statements/ assignments to Reg.
➢ Now I also have ideas on what enhancements can be tried.
Future enhancements
➢ Clock crossing can be added to the present design/ implementation. This will just need
replacing of the synchronous fifo with an asynchronous fifo at the front end.