Vai al contenuto

MyHDL

Da Wikipedia, l'enciclopedia libera.

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[1].
  • 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[2].
  • Co-simulazione di modelli MyHDL e modelli basati su altri linguaggi HDL, come Verilog o VHDL[3].
  • Conversione dei modelli MyHDL in modelli HDL tradizionali, tramite generazione automatica di codice Verilog o VHDL[4].

MyHDL è sviluppato da Jan Decaluwe[5].

Esempi di conversione

[modifica | modifica wikitesto]

Di seguito sono riportati alcuni esempi di conversioni da progetti MyHDL a VHDL e/o Verilog[6].

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;


  1. (EN) Conversion of lists of signals, su The MyHDL Manual. URL consultato il 30 Novembre 2024.
  2. (EN) Conversion of test benches, su The MyHDL Manual. URL consultato il 30 Novembre 2024.
  3. (EN) Co-simulation with Verilog, su The MyHDL Manual. URL consultato il 30 Novembre 2024.
  4. (EN) Conversion to Verilog and VHDL, su The MyHDL Manual. URL consultato il 30 Novembre 2024.
  5. (EN) Jan Decaluwe, MyHDL: a Python-Based Hardware Description Language, su linuxjournal.com. URL consultato il 30 Novembre 2024.
  6. (EN) Conversion Examples, su The MyHDL Manual. URL consultato il 30 Novembre 2024.

Collegamenti esterni

[modifica | modifica wikitesto]