J'utilise un outil appelé veriloggen qui peut assembler des descriptions HDL (Hardware Description Language) en utilisant Python, mais j'ai eu du mal à ne pas savoir comment écrire une déclaration de cas comme un décodeur, alors je vais le laisser comme un mémo. Je vais.
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)
"Lorsque (0) out (0b000000001)" signifie "lorsque la valeur est 0, 00000001 est affecté en binaire à la variable (signal) appelée". Enregistrez la combinaison d'une telle valeur et de l'expression d'affectation dans la liste decCond. J'ai commenté cette fois, mais vous pouvez ajouter une instruction par défaut en définissant When () uniquement à la fin de cette liste. Après cela, l'instruction case dans l'instruction always spécifie le nom de la variable à utiliser comme entrée.
Recommended Posts