C
Choudhary
Guest
Hi Group,
This is a question related to custom memory array implementaion.
I need to implement two memory array which alternate for read and
write according to the following:
Writing input into Array:
Every clock cycle a module produces a 256 bit wide data. At the end of
128 clock cycles, this data fills the memory array and no read takes
places till that point. R127 has to hold the value in first clock
cycle, Rn has to hold the value in 128-n clock cycle,R0 has to hold
the value in 128 th clock cycle.I can use a 1 to 128 (256 bit wide)
DeMux which select address decreases from 127 to 0.
Reading: Basically two arrays alternate for read and write.
A 128 to 1 (256 bit wide) MUX reads one of the data items in the array
(which was written 128 clock cycles earlier) based on MUX select
signal which is produced some where else. Reading is not in any
particular order.
Input ---------------
--/-- |DeMux| | R0 |
256 ---------------
---------------
| R1 |
---------------
:
:
---------------
| R127 |
--------------- ---|MUX| --/--
256
Now my question is :
I can steer the input into array using a 128 to 1 demux (256 bit
wide). However since I know the order in which the data goes, I don't
necessairly need to use a demux. Every clock cycle I write into R0
only.I will have shift bit associated with each data location except
at R127 called 's' in the below figure. 's' in R0 is always set to 1,
enabling that R0 can be shifted down in the next clock cycle. 's' in
the remaining locations will be set sequentailly and will be reset at
the end of 128 clock cycles to prevent unnecessary shifts.
(In the each clock cycle following, a new value will be written into
R0 and the old value in R0 will be shifted to R1; and at the same time
's' in R0 will be shifted down from 's' in R1 so that R1 can be shited
in the next clock cycle. Like wise in third clock cycle 's' in R2 is
automatically set from the 's' in R1.)
Input ---------------
--/------------| R0 |
256 ---------------
|
---------------
| R1 |
---------------
:
:
|
---------------
| R127 |
--------------- ---|MUX| --/--
200
The switching switching activity is now 127*(127+1)/2 [=n*(n+1)/2]=
127*64 ==>
64 times higher than the usual switching activity in the array.
So is this worth for saving some wires (127*256) and few gates in the
form of 1 to 128 (256 bit wide)Demux ?
Thanks for your time.
Regards,
Choudhary
This is a question related to custom memory array implementaion.
I need to implement two memory array which alternate for read and
write according to the following:
Writing input into Array:
Every clock cycle a module produces a 256 bit wide data. At the end of
128 clock cycles, this data fills the memory array and no read takes
places till that point. R127 has to hold the value in first clock
cycle, Rn has to hold the value in 128-n clock cycle,R0 has to hold
the value in 128 th clock cycle.I can use a 1 to 128 (256 bit wide)
DeMux which select address decreases from 127 to 0.
Reading: Basically two arrays alternate for read and write.
A 128 to 1 (256 bit wide) MUX reads one of the data items in the array
(which was written 128 clock cycles earlier) based on MUX select
signal which is produced some where else. Reading is not in any
particular order.
Input ---------------
--/-- |DeMux| | R0 |
256 ---------------
---------------
| R1 |
---------------
:
:
---------------
| R127 |
--------------- ---|MUX| --/--
256
Now my question is :
I can steer the input into array using a 128 to 1 demux (256 bit
wide). However since I know the order in which the data goes, I don't
necessairly need to use a demux. Every clock cycle I write into R0
only.I will have shift bit associated with each data location except
at R127 called 's' in the below figure. 's' in R0 is always set to 1,
enabling that R0 can be shifted down in the next clock cycle. 's' in
the remaining locations will be set sequentailly and will be reset at
the end of 128 clock cycles to prevent unnecessary shifts.
(In the each clock cycle following, a new value will be written into
R0 and the old value in R0 will be shifted to R1; and at the same time
's' in R0 will be shifted down from 's' in R1 so that R1 can be shited
in the next clock cycle. Like wise in third clock cycle 's' in R2 is
automatically set from the 's' in R1.)
Input ---------------
--/------------| R0 |
256 ---------------
|
---------------
| R1 |
---------------
:
:
|
---------------
| R127 |
--------------- ---|MUX| --/--
200
The switching switching activity is now 127*(127+1)/2 [=n*(n+1)/2]=
127*64 ==>
64 times higher than the usual switching activity in the array.
So is this worth for saving some wires (127*256) and few gates in the
form of 1 to 128 (256 bit wide)Demux ?
Thanks for your time.
Regards,
Choudhary