MyHDL trazendo o Python para o mundo das FPGAs
[Warning: This post is a backup recovery from my previous Wordpress blog. All content was automatically converted accessing a MySQL database using a Python script (details). Mostly are in Portuguese but if you are interest I can translate to English. If you found any problem dont’t hesitate to contact me in comments.]
From Python to silicon
Depois de uma longa histria estou participando de dois um curso aberto sobre hardware: um abordando VHDL e outro Verilog. At a nada de novo, quando... descobri algo interessante. Algo que realmente motivou a mudar minha rotina de trabalho para (durante alguns dias) levantar as 7h. a escrever sobre o assunto aqui no blog. :p
MyHDL
Em poucas palavras, um pacote para o Python que permite utiliz-lo para descrever e verificar uma linguagem de descrio de hardware. Alm disso voc pode converter seu cdigo Pyhton em Verilog ou VHDL, automaticamente, para gravar numa CPLD ou FPGA. Para quem quiser aprender, o tutorial mais completo est na documentao oficial do projeto. H tambm uma introduo muito boa em portugus feito pela UFPE.
No vou fazer um tutorial, apenas transcreverei os exemplos utilizados em sala de aula para Pythom, produzir os testes e os equivalentes em VHDL e Verilog. Um dos primeiros exerccios era descrever um multiplexador de 4 entradas.
from myhdl import *
def Mux(dout, din_1, din_2, din_3, din_4, sel):
@always_comb
def muxLogic():
if sel == 0x0:
dout.next = din_1
if sel == 0x1:
dout.next = din_2
if sel == 0x2:
dout.next = din_3
if sel == 0x3:
dout.next = din_4
return muxLogic
def convert():
dout, din_1, din_2, din_3, din_4 = [Signal(intbv(0)[8:]) for i in range(5)]
sel = Signal(intbv(0)[2:])
toVHDL(Mux, din_1, din_2, din_3, din_4, dout, sel)
toVerilog(Mux, din_1, din_2, din_3, din_4, dout, sel)
convert()
As funes toVHDL() e toVerilog() produzem arquivos Mux.vhd ou Mux.v respectivamente (o nome o mesmo da funo definida).
Aguardem os prximos posts onde vou apresentar o test case para este e os novos exerccios que forem sugeridos em sala.