web-dev-qa-db-ja.com

Verilog疑問符(?)演算子

VerilogプログラムをVHDLに変換しようとしていますが、疑問符(?)演算子はVerilogプログラムで使用されます。

以下は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のWebサイトで、疑問符はZ文字のVerilog代替であると読みました。しかし、なぜそれがこの文脈で使用されているのか理解できません。

敬具

6
Triple777er

それは 三項演算子 です。 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

ifステートメントと三項演算子を使用した2対1のMUX の2つの例を次に示します。

Asic-world Webサイトでは、 条件演算子 でカバーされています。

13
sachleen

別の書き方、例えば次のVerilog:

q <= tone[23] ? clkdivider-1 : clkdivider/2-1;

vHDLでは次のようになります。

q <= clkdivider-1 when tone[23] else clkdivider/2-1;
5
Daniel Kho