• 締切済み

Verilogの言語でわからないことが

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 の| の意味がよくわかりません。

みんなの回答

noname#26283
noname#26283
回答No.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;  はじめて見たときは、ん?という感じですが、とってもスマートな書き方で、便利だと思います。