在 Quartus 中,有一个被公认的宏定义 “ALTERA_RESERVED_QIS”,其中 QIS 的全称为 Quartus Integrate Synthesis,它的功能就是区别综合与仿真,在综合时可以例化一套端口,在仿真时又可以例化另外一套信号。
`ifdef ALTERA_RESERVED_QIS
// 综合所用的代码
`else
// 仿真所用的代码
`endif
以 F-Tile PMA/FEC Direct PHY FPGA IP 为例,该 IP 所提供的 example 中有:
`ifndef ALTERA_RESERVED_QIS
input wire [initial_number_system_copies-1:0] tx_reset,
input wire [initial_number_system_copies-1:0] rx_reset,
`endif
以及:
`ifdef ALTERA_RESERVED_QIS
wire [initial_number_system_copies-1:0] tx_reset;
wire [initial_number_system_copies-1:0] rx_reset;
`endif
上述第一个代码块指明了在仿真时定义 tx_reset 和 rx_reset 为 I/O 端口,而第二个代码块指明了在综合时定义 tx_reset 和 rx_reset 为内部的 wire 信号。这是因为在这个 example 中,综合时采用了 In-system Sources & Probes Intel FPGA IP,将 tx_reset 和 rx_reset 接到这个 IP 的 source 端口,从而可以通过软件控制 tx_reset 和 rx_reset 的值。而仿真时没有采用这个 IP,需要引入到 I/O 端口,通过 testbench 对 tx_reset 和 rx_reset 进行赋值。