我想写一个带有参数的模块,该参数决定将使用哪个时钟边沿。我知道我可以用选择器来获取时钟或反转时钟,然后使用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<=一终止末端生成
结束模块`