LoginSignup
2
1

More than 5 years have passed since last update.

veriloggenでデコーダの記述(case文のサンプル記述)

Posted at

Pythonを使ってHDL(Hardware Description Language)記述を組み立てることができるveriloggenというツールを使っているのですが,デコーダのようにcase文をどのように書くのか分からなくて苦労したため,メモとして残しておきます.

decoder.py
from __future__ import absolute_import
from __future__ import print_function
import sys
import os
from veriloggen import *

def mkDecoder():

    m = Module('decoder')
    indata = m.Input('in', 3)
    out = m.OutputReg('out',8)

    decCond = []
    decCond.append( When(0)(out(0b00000001)) )
    decCond.append( When(1)(out(0b00000010)) )
    decCond.append( When(2)(out(0b00000100)) )
    decCond.append( When(3)(out(0b00001000)) )
    decCond.append( When(4)(out(0b00010000)) )
    decCond.append( When(5)(out(0b00100000)) )
    decCond.append( When(6)(out(0b01000000)) )
    decCond.append( When(7)(out(0b10000000)) )
    #decCond.append( When()(out(0b10000000)) )

    m.Always() (
        Case(indata)(
            *decCond
            )
        )

    return m

if __name__ == '__main__':
    dut = mkDecoder()
    verilog = dut.to_verilog(filename='dut.v')
    print(verilog)

    sim = simulation.Simulator(dut)
    rslt = sim.run()
    print(rslt)

'When(0)out(0b000000001)'で,「値が0の場合,outという変数(信号)に2進数で00000001を割り当てる」という意味になります.そのような値と代入式の組み合わせをリストdecCondに登録します.今回はコメントアウトしていますが,このリストの最後にのみWhen()とすることで,default文が追加できます.そのあとで,always文の中のCase文で,入力として用いる変数名を指定しています.

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1