Uso de Verilog_MyHDL

Verilog se usa muy poco, aquí hay una breve introducción a MyHDL.

El propósito de esta herramienta es escribir código Verilog en Python. Por supuesto, primero debe instalar Python y luego instalar su extensión MYHDL (pip install myhdl), y también es necesaria una herramienta llamada gtkWave.

Hay muchos ejemplos en el sitio web oficial, solo elija uno para presentar, la dirección es:
http://www.myhdl.org/docs/examples/flipflops.html

Haga una introducción simple y rápida, las otras son operaciones similares, código fuente (el nombre del archivo es flip-flop_tb.py)

from myhdl import *
from random import randrange

def dff(q, d, clk):

    @always(clk.posedge)
    def logic():
        q.next = d

    return logic


def test_dff():

    q, d, clk = [Signal(bool(0)) for i in range(3)]

    dff_inst = dff(q, d, clk)

    @always(delay(10))
    def clkgen():
        clk.next = not clk

    @always(clk.negedge)
    def stimulus():
        d.next = randrange(2)

    return dff_inst, clkgen, stimulus


def simulate(timesteps):
    tb = traceSignals(test_dff)
    sim = Simulation(tb)
    sim.run(timesteps)

def convert():
    q, d, clk = [Signal(bool(0)) for i in range(3)]
    toVerilog(dff, q, d, clk)

simulate(2000)

convert()

En pocas palabras, simular es hacer una simulación para ver si la forma de onda es correcta, y se generará un archivo de forma de onda llamado
test_dff.vcd en el directorio cuando se ejecute
.

Ver la forma de onda es muy simple. Ya sea que use el modo de comando o la interfaz gráfica, el resultado es el mismo. El modo de comando que utilicé:

gtkwave test_dff.vcd ,

En este momento, se abrirá la forma de onda y, después de alejar y ajustar, podrá ver los siguientes resultados:

 

Convertir es convertir la definición de dff en código verilog. Después de ejecutar, generará un archivo llamado dff.v, su contenido es el siguiente

// File: dff.v
// Generated by MyHDL 0.11
// Date: Tue Oct 13 14:52:37 2020

`timescale 1ns/10ps

module dff (
    q,
    d,
    clk
);

output q;
reg q;
input d;
input clk;

always @(posedge clk) begin: DFF_LOGIC
    q <= d;
end

endmodule

 

 

 

Supongo que te gusta

Origin blog.csdn.net/tanmx219/article/details/109051262
Recomendado
Clasificación