Help us understand the problem. What is going on with this article?

MyHDL との違い

More than 1 year has passed since last update.

「山が高いからといって、戻ってはならない」という諺があるらしい。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 と連携するなりして補完していくことになる。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away