Merge pull request #354 from ucb-bar/async_register_crossing
crossing: Remove reset from the logic in Register Crossing
This commit is contained in:
commit
7d93fd3bfc
@ -33,8 +33,8 @@ class RegisterWriteIO[T <: Data](gen: T) extends Bundle {
|
|||||||
// To turn on/off a domain:
|
// To turn on/off a domain:
|
||||||
// 1. lower allow on the other side
|
// 1. lower allow on the other side
|
||||||
// 2. wait for inflight traffic to resolve
|
// 2. wait for inflight traffic to resolve
|
||||||
// 3. turn off the domain
|
// 3. assert reset in the domain
|
||||||
// 4. assert reset in the domain
|
// 4. turn off the domain
|
||||||
// 5. turn on the domain
|
// 5. turn on the domain
|
||||||
// 6. deassert reset in the domain
|
// 6. deassert reset in the domain
|
||||||
// 7. raise allow on the other side
|
// 7. raise allow on the other side
|
||||||
@ -62,9 +62,9 @@ class RegisterWriteCrossing[T <: Data](gen: T, sync: Int = 3) extends Module {
|
|||||||
// If the enq side is reset, at worst deq.bits is reassigned from mem(0), which stays fixed.
|
// If the enq side is reset, at worst deq.bits is reassigned from mem(0), which stays fixed.
|
||||||
// If the deq side is reset, at worst the master rewrites mem(0) once, deq.bits stays fixed.
|
// If the deq side is reset, at worst the master rewrites mem(0) once, deq.bits stays fixed.
|
||||||
crossing.io.enq_clock := io.master_clock
|
crossing.io.enq_clock := io.master_clock
|
||||||
crossing.io.enq_reset := io.master_reset || !io.master_allow
|
crossing.io.enq_reset := io.master_reset
|
||||||
crossing.io.deq_clock := io.slave_clock
|
crossing.io.deq_clock := io.slave_clock
|
||||||
crossing.io.deq_reset := io.slave_reset || !io.slave_allow
|
crossing.io.deq_reset := io.slave_reset
|
||||||
|
|
||||||
crossing.io.enq.bits := io.master_port.request.bits
|
crossing.io.enq.bits := io.master_port.request.bits
|
||||||
io.slave_register := crossing.io.deq.bits
|
io.slave_register := crossing.io.deq.bits
|
||||||
@ -112,9 +112,9 @@ class RegisterReadCrossing[T <: Data](gen: T, sync: Int = 3) extends Module {
|
|||||||
// If the enq side is reset, at worst deq.bits is reassigned from mem(0), which stays fixed.
|
// If the enq side is reset, at worst deq.bits is reassigned from mem(0), which stays fixed.
|
||||||
// If the deq side is reset, at worst the slave rewrites mem(0) once, deq.bits stays fixed.
|
// If the deq side is reset, at worst the slave rewrites mem(0) once, deq.bits stays fixed.
|
||||||
crossing.io.enq_clock := io.slave_clock
|
crossing.io.enq_clock := io.slave_clock
|
||||||
crossing.io.enq_reset := io.slave_reset || !io.slave_allow
|
crossing.io.enq_reset := io.slave_reset
|
||||||
crossing.io.deq_clock := io.master_clock
|
crossing.io.deq_clock := io.master_clock
|
||||||
crossing.io.deq_reset := io.master_reset || !io.master_allow
|
crossing.io.deq_reset := io.master_reset
|
||||||
|
|
||||||
crossing.io.enq.bits := io.slave_register
|
crossing.io.enq.bits := io.slave_register
|
||||||
io.master_port.response.bits := crossing.io.deq.bits
|
io.master_port.response.bits := crossing.io.deq.bits
|
||||||
@ -134,11 +134,12 @@ class RegisterReadCrossing[T <: Data](gen: T, sync: Int = 3) extends Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Wrapper to create an
|
/** Wrapper to create an
|
||||||
* asynchronously reset
|
* asynchronously reset slave register which can be
|
||||||
* slave register which
|
* both read and written
|
||||||
* can be both read
|
* using crossing FIFOs.
|
||||||
* and written using
|
* The reset and allow assertion & de-assertion
|
||||||
* crossing FIFOs.
|
* should be synchronous to their respective
|
||||||
|
* domains.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
object AsyncRWSlaveRegField {
|
object AsyncRWSlaveRegField {
|
||||||
@ -181,7 +182,5 @@ object AsyncRWSlaveRegField {
|
|||||||
rd_crossing.io.slave_register := async_slave_reg.io.q
|
rd_crossing.io.slave_register := async_slave_reg.io.q
|
||||||
|
|
||||||
(async_slave_reg.io.q, RegField(width, rd_crossing.io.master_port, wr_crossing.io.master_port))
|
(async_slave_reg.io.q, RegField(width, rd_crossing.io.master_port, wr_crossing.io.master_port))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user