- 締切済み
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 の| の意味がよくわかりません。
- みんなの回答 (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; はじめて見たときは、ん?という感じですが、とってもスマートな書き方で、便利だと思います。