11

我正在尝试将 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 网站上读到问号是该Z字符的 Verilog 替代项。但我不明白为什么在这种情况下使用它。

亲切的问候

4

3 回答 3

16

那是一个三元运算符。它是 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的两个示例。

在 asic-world 网站上,它包含在条件运算符中

于 2012-09-09T02:49:40.550 回答
6

另一种写法,例如下面的 Verilog:

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

在 VHDL 中将是:

q <= clkdivider-1 when tone[23] else clkdivider/2-1;
于 2013-03-28T08:53:48.453 回答
0

把它想象成一个 MUX,在 ? 是选择位,在 : 的两侧是输入

于 2021-03-22T07:09:17.870 回答