1
0

More than 5 years have passed since last update.

MyHDL との違い

Last updated at Posted at 2017-12-12

「山が高いからといって、戻ってはならない」という諺があるらしい。Polyphony が登ろうとしている山はどれくらいの高さなのだろう?

MyHDLは Python から HDL を生成するツールだ。歴史も長く、多くのライブラリを持っている。使ってみる。

まずは定番 HelloWorld。iverilog などなくてもシミュレーションできる。その上、Verilog にも VHDL にも変換できるようだ(こっちが本来の目的だろう)。

hello.py
from myhdl import Signal, delay, always, now, Simulation

def HelloWorld():

    interval = delay(10)

    @always(interval)
    def sayHello():
        print("%s Hello World!" % now())

    return sayHello


inst = HelloWorld()
sim = Simulation(inst)
sim.run(30)

LED strobe (いわゆるLチカ)の Tutorialもあるようなので参考にされたい。

Polyphony と大きな違いは何だろうか?変数の扱いはその一つだ。例えば Tutorial の MyHDL の記述の一部は次の通りだ。strobe という信号に注目する。

 @always_seq(clock.posedge, reset=reset)
    def beh_strobe():
        # Generate the strobe event, use the "greater
        # than" for initial condition cases.  Count the
        # number of clock ticks that equals the LED strobe rate
        if clk_cnt >= cnt_max-1:
            clk_cnt.next = 0
            strobe.next = True
        else:
            clk_cnt.next = clk_cnt + 1
            strobe.next = False

strobe というオブジェクトは next を持ち、そこに値を入れる。その値は次のクロックで更新される値であり、すぐに反映されるわけではない。

一方、Polyphony ではどうか?

 def main(self):
        led:bit = 1
        while is_worker_running():
            self.led(led)
            led = ~led
            self._wait()

led という 1bit の変数は代入後、すぐにその値が反映される(ように見える Verilog-HDL コードを生成する)。

MyHDL は従来の HDL を尊重した書き方を重視しており、クロックを考慮した細かい制御が可能だ。その代り、多くの HDL 的な考慮が必要だ。変数の更新タイミングはその一例である。

Polyphony が目指す世界は従来のソフトウェア・コードをハードウェアになじませるにある。クロックはソースコードの後ろに隠れて見えてこない。その分、かゆいところに手が届かない部分もある。そういった部分は直接 Verilog-HDL を書くなり、MyHDL と連携するなりして補完していくことになる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0