Skip to content

Instantly share code, notes, and snippets.

@niw
Created February 14, 2020 07:08
Show Gist options
  • Save niw/d226230b12818de6e3e34e39eff35509 to your computer and use it in GitHub Desktop.
Save niw/d226230b12818de6e3e34e39eff35509 to your computer and use it in GitHub Desktop.
Learning Chisel: Flip Flop
import chisel3._
class SRLatch extends Module {
val io = IO(new Bundle {
val set = Input(Bool())
val reset = Input(Bool())
val q = Output(Bool())
val notQ = Output(Bool())
})
io.q := ~(io.reset | io.notQ)
io.notQ := ~(io.set | io.q)
}
// DLatch seems like reserved keyword for Quartus...
class MyDLatch extends Module {
val io = IO(new Bundle {
val data = Input(Bool())
val enable = Input(Bool())
val q = Output(Bool())
})
val srLatch = Module(new SRLatch)
srLatch.io.set := io.data & io.enable
srLatch.io.reset := ~io.data & io.enable
io.q := srLatch.io.q
}
class DFlipFlop extends Module {
val io = IO(new Bundle {
val clock = Input(Bool())
val data = Input(Bool())
val q = Output(Bool())
})
val dLatch1 = Module(new MyDLatch)
dLatch1.io.data := io.data
dLatch1.io.enable := ~io.clock
val dLatch2 = Module(new MyDLatch)
dLatch2.io.data := dLatch1.io.q
dLatch2.io.enable := io.clock
io.q := dLatch2.io.q
}
class FlipFlop extends Module {
val io = IO(new Bundle {
val clock = Input(Bool())
val reset = Input(Bool())
val enable = Input(Bool())
val data = Input(Bool())
val q = Output(Bool())
})
val dFlipFlop = Module(new DFlipFlop)
dFlipFlop.io.clock := io.clock
dFlipFlop.io.data := Mux(io.enable, io.data, dFlipFlop.io.q) & ~io.reset
io.q := dFlipFlop.io.q
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment