From Python to silicon
Depois de uma longa história 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 descrição de hardware. Além disso você pode converter seu código Pyhton em Verilog ou VHDL, automaticamente, para gravar numa CPLD ou FPGA. Para quem quiser aprender, o tutorial mais completo está na documentação oficial do projeto. Há também uma introdução muito boa em português feito pela UFPE.
Não 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 exercícios 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 funções toVHDL() e toVerilog() produzem arquivos Mux.vhd ou Mux.v respectivamente (o nome é o mesmo da função definida).
Aguardem os próximos posts onde vou apresentar o test case para este e os novos exercícios que forem sugeridos em sala.