abr
12
2010

MyHDL: trazendo o Python para o mundo das FPGAs

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.

tags: , , ,
posted in embarcado by Tiago Maluta

Follow comments via the RSS Feed | Deixe um comentário | Trackback URL

Leave Your Comment