1. ホーム
  2. operators

[解決済み] Verilogクエスチョンマーク(?)演算子

2022-02-19 08:05:24

質問

VerilogのプログラムをVHDLに変換しようとしているのですが、ある文にクエスチョンマーク( ? ) 演算子が使用されています。

以下は、Verilogのコードです。

1  module music(clk, speaker);
2  input clk;
3  output speaker;
4  parameter clkdivider = 25000000/440/2;

5  reg [23:0] tone;
6  always @(posedge clk) tone <= tone+1;

7  reg [14:0] counter;
8  always @(posedge clk) if(counter==0) counter <= (tone[23] ? clkdivider-1 : clkdivider/2-1); else counter <= counter-1;

9  reg speaker;
10  always @(posedge clk) if(counter==0) speaker <= ~speaker;
11  endmodule

8行目がよくわからないのですが、どなたか解説していただけませんか? asic-worldのサイトでは、クエスチョンマークはVerilogの代替で Z という文字があります。しかし、なぜこの文脈で使われているのか理解できません。

よろしくお願いします。

解決方法は?

それは 三項演算子 . これは、if文の省略形です。

形式です。

condition ? if true : if false

tone[23] ? clkdivider-1 : clkdivider/2-1

のようなものに翻訳されます(正しい構文ではありませんが、理解できると思います)。

if tone[23] is 1, counter = clkdivider-1
else counter = clkdivider/2-1

以下は、2つの例です。 if文と三項演算子を用いた2対1MUX .

asic-worldのサイトでは、以下のように取り上げられています。 条件付き演算子