MyHDL è un linguaggio di descrizione hardware (HDL) basato su Python.

MyHDL supporta le seguenti caratteristiche principali:

Un sistema di tipi di dati orientati all'hardware che semplificano la definizione di modelli hardware. Il supporto per tecniche di modellazione di alto livello (bus functional modeling, modellazione di memorie con tipi di dato nativi, modellazione con approccio orientato agli oggetti). La capacità di raggruppare più segnali in un'interfaccia e di convertire un elenco di segnali. La possibilità di usare tecniche di verifica software moderne, come ad esempio i test unitari, su progetti hardware. La capacità di convertire testbench MyHDL in testbench basati su linguaggi HDL tradizionali, come Verilog o VHDL. Co-simulazione di modelli MyHDL e modelli basati su altri linguaggi HDL, come Verilog o VHDL. Conversione dei modelli MyHDL in modelli HDL tradizionali, tramite generazione automatica di codice Verilog o VHDL.

MyHDL è sviluppato da Jan Decaluwe.

Esempi di conversione Di seguito sono riportati alcuni esempi di conversioni da progetti MyHDL a VHDL e/o Verilog.

Un semplice modulo combinatorio

L'esempio è un semplice modulo combinatorio, più specificatamente un convertitore da codice binario a codice Gray:

def bin2gray(B, G, width: int): """Gray encoder.

B -- input intbv signal, binary encoded G -- output intbv signal, gray encoded width -- bit width """

@always_comb def logic(): Bext = intbv(0)[width + 1 :] Bext[:] = B for i in range(width): G.next[i] = Bext[i + 1] ^ Bext[i]

return logic

È possibile definire un'istanza e convertirla in Verilog e VHDL come segue:

width = 8

B = Signal(intbv(0)[width:]) G = Signal(intbv(0)[width:])

bin2gray_inst = toVerilog(bin2gray, B, G, width) bin2gray_inst = toVHDL(bin2gray, B, G, width)

Il codice Verilog generato appare come segue:

module bin2gray ( B, G );

input [7:0] B; output [7:0] G; reg [7:0] G;

always @(B) begin: BIN2GRAY_LOGIC integer i; reg [9-1:0] Bext; Bext = 9'h0; Bext = B; for (i=0; i<8; i=i+1) begin G[i] <= (Bext[(i + 1)] ^ Bext[i]); end end

endmodule

Il codice VHDL generato si presenta come segue:

library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; use std.textio.all;

use work.pck_myhdl_06.all;

entity bin2gray is port ( B: in unsigned(7 downto 0); G: out unsigned(7 downto 0) ); end entity bin2gray;

architecture MyHDL of bin2gray is

begin

BIN2GRAY_LOGIC: process (B) is variable Bext: unsigned(8 downto 0); begin Bext := to_unsigned(0, 9); Bext := resize(B, 9); for i in 0 to 8-1 loop G(i) <= (Bext((i + 1)) xor Bext(i)); end loop; end process BIN2GRAY_LOGIC;

end architecture MyHDL;

Riferimenti

Collegamenti esterni

Categoria:Circuiti elettronici configurabili Categoria:Linguaggi di descrizione hardware Categoria:Elettronica digitale