アプリ版:「スタンプのみでお礼する」機能のリリースについて

Verilogの言語で書かれたソースを見ているのですがでわからないことがところが2つあります。

Q1.
`define DELAY 1

COUNTER1 <= #(`DELAY) 5'b00000;

という文ですが、#(`DELAY) がどのような作用をおこすのか教えてください。

Q2.
reg [4:0] COUNTER1; // Down counter1

assign SJ_TMP2 = (|COUNTER1) == 1'b0) ? 1'b1 : 1'b0;

という文ですが、|COUNTER1 の| の意味がよくわかりません。

A 回答 (1件)

A1.


 COUNTER1 <= #(`DELAY) 5'b00000; は、
 COUNTER1 <= #1 5'b00000; と書くのと同じです。
 つまり、`defineで定義した DELAY を 1 に自動的に置き換えてくれます。

 1箇所だけだと、`defineを使ってもあまり意味がないのですが、ソース内で何箇所も書き換えたいとき、例えば、以下のような場合、`defineの行だけ書き換えれば、各行を書き換えずに済みます。

 `define DELAY 100
 COUNTER1 <= #(`DELAY) 5'b00000;
 COUNTER2 <= #(`DELAY) 5'b00000;
 COUNTER3 <= #(`DELAY) 5'b00000;

Q2.
 「|」がorの演算子というのは、ご存知ですよね?
 演算子をビット幅のある信号の頭につけると、全ビットでその演算をすることになります。つまり、以下と同じことです。
 assign SJ_TMP2 = (COUNTER1[0] | COUNTER1[1] | COUNTER1[2]| COUNTER1[3]| COUNTER1[4]) == 1'b0) ? 1'b1 : 1'b0;
 はじめて見たときは、ん?という感じですが、とってもスマートな書き方で、便利だと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!