FPGA学習メモ

自分用メモ

Verilog HDLにおけるassign文の左辺と右辺に関するメモ

このブログを始めたきっかけ

ここの最初に記載。
darushino.hatenablog.jp

つまづいたこと(ではない)

実際つまづいてはいないのだけど、将来慣れてきたころにハマりそうなポイントと思ったのでメモしておく。何が気になったかというと、assign 文の左辺と右辺には明確な意味があるということ。

気に留めたこと

shop.cqpub.co.jp
のP.63リスト2について。

module led_func(input inp, output outp);
    assign outp = inp;
endmodule

module TopModule(input sw, output led);
    wire wsw, wled;

    assign wsw = sw;
    assign led = wled;
    led_func u1(wsw, wled);
endmodule

とある。assign 文は、「右辺を左辺に割り当てる」とのこと。なので、左辺と右辺をうっかり入れ替えるとデバイスが動かなくなってしまう。

たとえば、「led = wled」は「FPGAの出力ピンledを内部配線wledに割り当てますよ」という意味となる。これを「wled = led」としてしまうと、「内部配線wledをFPGAの出力ピンledに割り当てますよ」となり、出力ピンとして機能しなくなる(信号の流れる方向がおかしなことになると感覚的に理解)。入力ピンに関してはその逆のことが起こりそうな気がする(信号衝突して、最悪デバイス壊れるとか?)。

いまのところの結論

FPGAから見た入力ピンは右辺に、出力ピンは左辺に書く」と理解しておく。勉強進めていったらこの理解で不整合が発生するかも。そのときは考え方を改めよう。