MyHDL 入门笔记

MyHDL是一个Python的库,使用Python来开发数字电路。

官网 MyHDL

在python3中,直接使用 pip3 install myhdl 即可安装。

使用python开发,最主要看中python使用比较灵活,最重要也想能否使用python的面向对象的特征,来写硬件模块。闲话少说,我们来看怎么使用myhdl实现一个模块。

MyHDL的文档,我也是看得一知半解,下面的例子,根据自己的感觉总结。

1.首先实现一个模块,模块有端口,在verilog中我们如下方式写一个模块

module mod_name (
        port0,
        port1,
        ....
);


endmodule

在MyHDL中定义模块

@block
def mod_name( port0, port1, ...):
    pass

使用block装饰器修饰这个函数,函数就是模块

2.在Verilog模块中,定义端口的属性:输入输出。在MyHDL中的模块函数中不需要定义

3.verilog中使用always和assign描述逻辑关系,在MyHDL中在模块中定义函数

如下图实现寄存器自加

reg [15:0]  cnter;
always @(posedge clk or negedge sys_reset_n)
    if(!sys_reset_n)
        cnter <= 16'h0;
    else
        cnter <= cnter + 1

在MyHDL中

cnter = myhdl.Signal(myhdl.modbv(0)[16:])
@myhdl.always_seq(clk.posedge, reset=sys_reset)
def logic():
    cnter.next = cnter + 1

接下来,使用MyHDL编写一个闪灯模块

import myhdl

@myhdl.block
def led_blinker(sys_clk, sys_reset, led):
    cnter = myhdl.Signal(myhdl.modbv(0)[10:])

    @myhdl.always_seq(sys_clk.posedge, reset=sys_reset)
    def logic():
        cnter.next = cnter + 1

    @myhdl.always_comb
    def logic_comb():
        led.next = cnter[9]

    return logic, logic_comb


if __name__ == '__main__':
    clk = myhdl.Signal(bool(0))
    reset = myhdl.ResetSignal(0,active=0,isasync=True)
    led = myhdl.Signal(bool(0))
    inst = led_blinker(clk, reset, led)
    inst.convert(hdl='Verilog')

运行后生成Verilog代码如下

// File: led_blinker.v
// Generated by MyHDL 0.11
// Date: Thu Feb 24 18:42:15 2022


`timescale 1ns/10ps

module led_blinker (
    sys_clk,
    sys_reset,
    led
);


input sys_clk;
input sys_reset;
output led;
wire led;

reg [9:0] cnter;



always @(posedge sys_clk, negedge sys_reset) begin: LED_BLINKER_LOGIC
    if (sys_reset == 0) begin
        cnter <= 0;
    end
    else begin
        cnter <= (cnter + 1);
    end
end



assign led = cnter[9];

endmodule

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jjinl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值