2012-09-09 17 views
5

私はVerilogプログラムをvhdlに変換しようとしていますが、Verilogプログラムで疑問符(?)演算子が使用されているステートメントを見つけました。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のウェブサイトで、疑問符がVerilogのZ文字の代替語であることを読んだ。しかし、私はこの文脈でなぜそれが使われているのか理解していません。

種類はternary operator

答えて

12

について。

condition ? if true : if false 

例:

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

のようなものに変換します(ない正しい構文が、私はあなたがそれを得ると思います):これは、if文

フォーマットの省略形だ

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

ここには、2 to 1 MUX using if statement and ternary operatorという2つの例があります。それは例えば、Conditional Operators

4

の下で執筆する別の方法を覆われているASIC世界のウェブサイトに

、次のVerilog:VHDLで

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

は次のようになります。

q <= clkdivider-1 when tone[23] else clkdivider/2-1; 
+0

宣言が質問にとても必要不可欠である理由です。条件はブール値に評価する必要があります。トーン[23]がその基準を満たす唯一の方法は、トーンがBOOLEAN_VECTORであるかどうかです。 – user1155120