PYMTL3快速入门指南

快速入门指南

本指南演示了如何在PyMTL3上执行算术运算比特对象,以及如何模拟简单的硬件组件,如一个全加法器和一个寄存器增量器。所有内容guide可以在Python >= 3.6交互式REPL中完成。

位算法

让我们从两个4位数字的简单加法开始。的
下面的代码片段导入了基本的PyMTL3功能
并创建两个4位对象 ab:

python

>>> from pymtl3 import *
>>> a = Bits4(4)
Bits4(0x4)
>>> b = Bits4(3)
Bits4(0x3)

Bits对象支持通用的算术和比较:

>>> a + b
Bits4(0x7)
>>> a - b
Bits4(0x1)
>>> a * b
Bits4(0xC)
>>> a & b
Bits4(0x0)
>>> a | b
Bits4(0x7)
>>> a > b
Bits1(0x1)
>>> a < b
Bits1(0x0)

全加器的例子

接下来,我们将使用全加法器进行实验。它已经是包含在PyMTL3代码库中,我们可以简单地导入它在REPL中使用它。

>>> from pymtl3.examples.ex00_quickstart import FullAdder

由于Python的检查特性,我们可以很容易地打印
输出全加法器的源代码。你可以看到
全加法器逻辑是在更新块upblk中实现的

>>> import inspect
>>> print(inspect.getsource(FullAdder))
class FullAdder( Component ):
  def construct( s ):
    s.a    = InPort()
    s.b    = InPort()
    s.cin  = InPort()
    s.sum  = OutPort()
    s.cout = OutPort()

    @update
    def upblk():
      s.sum  @= s.cin ^ s.a ^ s.b
      s.cout @= ( ( s.a ^ s.b ) & s.cin ) | ( s.a & s.b )

为了模拟完整的加法器,我们需要应用 DefaultPassGroup,PyMTL通过。然后我们可以设置输入端口的值并进行模拟,通过调用fa.sim_tick来实现完整的加法器:

>>> fa = FullAdder()
>>> fa.apply( DefaultPassGroup() )
>>> fa.sim_reset()
>>> fa.a @= 0
>>> fa.b @= 1
>>> fa.cin @= 0
>>> fa.sim_tick()

验证全加法器是否产生了正确的结果:

>>> assert fa.sum == 1
>>> assert fa.cout == 0

寄存器递增操作示例

与全加法器类似,我们可以执行以下操作来导入
注册增量器组件并打印其源代码:

>>> from pymtl3.examples.ex00_quickstart import RegIncr
>>> print(inspect.getsource(RegIncr))

模拟一个8位寄存器增量器:

>>> regincr = RegIncr( 8 )
>>> regincr.apply( DefaultPassGroup() )
>>> regincr.sim_reset()
>>> regincr.in_ @= 42
>>> regincr.sim_tick()

验证注册的输出确实是递增的:

>>> assert regincr.out == 43

本文是对PYMTL3说明文档入门部分的翻译,原文:
https://github.com/pymtl/pymtl3/tree/master/scripts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值