Verilog HDL 能实现 C 中“#if ... #else ...”的功能吗?

Can Verilog HDL realize what “#if ... #else ...” do in C?

我想编写一个带有参数的模块,该参数决定使用哪个时钟边沿。而且我知道我可以使用选择器来获取时钟或反向时钟,然后使用 posedge。我只是对如何在预编译中实现它感兴趣。

通过使用 Verilog 编译器指令(一种预处理器命令):

`define EDGE posedge

always @(`EDGE clk) begin
  ... stuff...
end

或者这样:

`define POSITIVE 0
`define NEGATIVE 1

`define EDGE `POSITIVE

`if (`EDGE==`POSITIVE)
always @(posedge clk) begin
`else
always @(negedge clk) begin
`endif
  ... stuff...
end

尚未测试参数和指令,但这也可能有效:

module #(parameter whichedge=0) ( // 0=posedge, 1=negedge
  input wire clk,
  input wire rst,
  ...
  ...
  )

`if (whichedge==0)
always @(posedge clk) begin
`else
always @(negedge clk) begin
`endif
  ... stuff ...
end

`module myD #(参数 whichedge=0) (输入线时钟, 输入线a, 输出 reg b);

生成 如果(whichedge == 0) 开始 总是@(posedge clk) b <= a; 结尾 别的 开始 总是@(否定时钟) b <= a; 结尾 结束生成

结束模块`