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代替であると読みました。しかし、なぜそれがこの文脈で使用されているのか理解できません。
敬具
それは 三項演算子 です。 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サイトでは、 条件演算子 でカバーされています。
別の書き方、例えば次のVerilog:
q <= tone[23] ? clkdivider-1 : clkdivider/2-1;
vHDLでは次のようになります。
q <= clkdivider-1 when tone[23] else clkdivider/2-1;