1
0

Merge pull request #366 from ucb-bar/slowio-change

Change the configuration interface of SlowIO
This commit is contained in:
Howard Mao 2016-09-29 23:19:53 -07:00 committed by GitHub
commit a1fa0733e5

View File

@ -11,20 +11,15 @@ class SlowIO[T <: Data](val divisor_max: Int)(data: => T) extends Module
val in_fast = Decoupled(data) val in_fast = Decoupled(data)
val in_slow = Decoupled(data).flip val in_slow = Decoupled(data).flip
val clk_slow = Bool(OUTPUT) val clk_slow = Bool(OUTPUT)
val set_divisor = Valid(Bits(width = 32)).flip
val divisor = Bits(OUTPUT, 32) val divisor = UInt(INPUT, log2Up(divisor_max))
val hold = UInt(INPUT, log2Up(divisor_max))
} }
require(divisor_max >= 8 && divisor_max <= 65536 && isPow2(divisor_max)) require(divisor_max >= 8 && divisor_max <= 65536 && isPow2(divisor_max))
val divisor = Reg(init=UInt(divisor_max-1)) val divisor = Reg(init=UInt(divisor_max-1))
val d_shadow = Reg(init=UInt(divisor_max-1))
val hold = Reg(init=UInt(divisor_max/4-1)) val hold = Reg(init=UInt(divisor_max/4-1))
val h_shadow = Reg(init=UInt(divisor_max/4-1))
when (io.set_divisor.valid) {
d_shadow := io.set_divisor.bits(log2Up(divisor_max)-1, 0)
h_shadow := io.set_divisor.bits(log2Up(divisor_max)-1+16, 16)
}
io.divisor := (hold << 16) | divisor
val count = Reg{UInt(width = log2Up(divisor_max))} val count = Reg{UInt(width = log2Up(divisor_max))}
val myclock = Reg{Bool()} val myclock = Reg{Bool()}
@ -35,8 +30,8 @@ class SlowIO[T <: Data](val divisor_max: Int)(data: => T) extends Module
val held = count === (divisor >> 1) + hold val held = count === (divisor >> 1) + hold
when (falling) { when (falling) {
divisor := d_shadow divisor := io.divisor
hold := h_shadow hold := io.hold
count := UInt(0) count := UInt(0)
myclock := Bool(false) myclock := Bool(false)
} }