Skip to content

Instantly share code, notes, and snippets.

@tzechienchu
Created July 13, 2021 08:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tzechienchu/9558a2ebfa59d035411c6922e2dde75c to your computer and use it in GitHub Desktop.
Save tzechienchu/9558a2ebfa59d035411c6922e2dde75c to your computer and use it in GitHub Desktop.
SevenSegment Chisel
import chisel3._
import chisel3.util._
class SevenSegment extends Module {
val io = IO(new Bundle {
val sw = Input(UInt(4.W))
val seg = Output(UInt(8.W))
val dp = Input(Bool())
})
val sevSeg = WireInit(0.U)
val sw = io.sw
val dp = io.dp
switch (sw) {
is (0.U) {sevSeg := "b0111111".U}
is (1.U) {sevSeg := "b0000110".U}
is (2.U) {sevSeg := "b1011011".U}
is (3.U) {sevSeg := "b1001111".U}
is (4.U) {sevSeg := "b1100110".U}
is (5.U) {sevSeg := "b1101101".U}
is (6.U) {sevSeg := "b1111101".U}
is (7.U) {sevSeg := "b0000111".U}
is (8.U) {sevSeg := "b1111111".U}
is (9.U) {sevSeg := "b1101111".U}
is (10.U) {sevSeg := "b1110111".U}
is (11.U) {sevSeg := "b1111100".U}
is (12.U) {sevSeg := "b0111001".U}
is (13.U) {sevSeg := "b1011110".U}
is (14.U) {sevSeg := "b1111001".U}
is (15.U) {sevSeg := "b1110001".U}
}
io.seg := Cat(~dp,~sevSeg)
}
object SevenSegment extends App {
(new chisel3.stage.ChiselStage).emitVerilog(new SevenSegment())
}
//Test
import chisel3.iotesters.PeekPokeTester
import org.scalatest._
class SevenSegmentTester(dut: SevenSegment) extends PeekPokeTester(dut) {
def printOut(x:BigInt, y:Int) {
println(y.toHexString)
println(if((~x & 0x01) != 0) " _" else " ")
var tempStr = ""
tempStr += (if((~x & 0x20) != 0) "|" else " ")
tempStr += (if((~x & 0x40) != 0) "_" else " ")
tempStr += (if((~x & 0x2) != 0) "|" else " ")
println(tempStr)
tempStr = (if((~x & 0x10) != 0) "|" else " ")
tempStr += (if((~x & 0x8) != 0) "_" else " ")
tempStr += (if((~x & 0x4) != 0) "|" else " ")
println(tempStr)
println()
}
for (value <-0 until 16) {
poke(dut.io.sw, value)
println(peek(dut.io.seg).toString(2).reverse.padTo(7,'0').reverse)
printOut(peek(dut.io.seg), value)
}
}
class SevenSegmentSpec extends FlatSpec with Matchers {
"SevenSegment" should "pass" in {
chisel3.iotesters.Driver(() => new SevenSegment) {
c => new SevenSegmentTester(c)
} should be (true)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment