2012-09-09 2201 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世界的网站,问号是Z字符的Verilog替代品。但我不明白为什么在这种情况下使用它。

亲切的问候

回答

4

覆盖写作,如的另一种方式下面的Verilog:

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

在VHDL是:

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

这就是为什么声明在问题如此重要。条件必须评估为布尔值。如果音调是BOOLEAN_VECTOR,音调[23]将符合该标准的唯一方法。 – user1155120