Verilog HDL能实现“#if..#else..”在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)(输入线clk,输入导线a,输出reg b);

生成if(which edge==0)开始始终@(posedge clk)b<=一终止其他的开始始终@(negedge clk)b<=一终止末端生成

结束模块`

最新更新