Verilog_MyHDL的使用

Verilog用得非常少,这里对MyHDL做个简单介绍。

这个工具的作用就是使用Python写verilog代码。当然首先你要安装 Python,然后要安装其扩展MYHDL(pip install myhdl),还有一个工具叫gtkWave也是必须的。

官网上有很多例子,随便选一个来介绍,地址在:
http://www.myhdl.org/docs/examples/flipflops.html

做一个简单快速的入门介绍,其他的都是类似的操作,源码(文件名称为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()

简单来说,simulate就是做一个模拟,看看波形是否正确,运行时会在目录下生成一个名称叫
test_dff.vcd
的波形文件。

查看波形很简单,你用命令模式也好,用图形界面也好,结果都一样,我用的命令模式:

gtkwave test_dff.vcd,

这时会打开波形,缩小放大调整后,可以看到如下结果,

convert则是把dff的定义转换成verilog代码,运行完后会生成一个叫dff.v的文件,其内容如下

// 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

猜你喜欢

转载自blog.csdn.net/tanmx219/article/details/109051262