minitests: Add PLLE4_BASE minitest Signed-off-by: Tomasz Michalak <tmichalak@antmicro.com>
diff --git a/minitests/pll/Makefile b/minitests/pll/Makefile new file mode 100644 index 0000000..1d13e21 --- /dev/null +++ b/minitests/pll/Makefile
@@ -0,0 +1 @@ +include ../util/common.mk
diff --git a/minitests/pll/top.v b/minitests/pll/top.v new file mode 100644 index 0000000..69365e9 --- /dev/null +++ b/minitests/pll/top.v
@@ -0,0 +1,80 @@ +module top(input clk, stb, di, output do); + localparam integer DIN_N = 160; + localparam integer DOUT_N = 160; + + reg [DIN_N-1:0] din; + wire [DOUT_N-1:0] dout; + + reg [DIN_N-1:0] din_shr; + reg [DOUT_N-1:0] dout_shr; + + always @(posedge clk) begin + din_shr <= {din_shr, di}; + dout_shr <= {dout_shr, din_shr[DIN_N-1]}; + if (stb) begin + din <= din_shr; + dout_shr <= dout; + end + end + + assign do = dout_shr[DOUT_N-1]; + + roi roi ( + .clk(clk), + .din(din), + .dout(dout) + ); +endmodule + +module roi(input clk, input [159:0] din, output [159:0] dout); + my_PLL + #( + .LOC("PLL_X0Y10") + ) + inst_0 ( + .clk(clk), + .din(din[ 0 +: 7]), + .dout(dout[ 0 +: 2]) + ); +endmodule + +// --------------------------------------------------------------------- +module my_PLL (input clk, input [6:0] din, output [1:0] dout); + + parameter LOC = ""; + + (* LOC=LOC *) + PLLE4_BASE #( + .CLKFBOUT_MULT(8), // Multiply value for all CLKOUT + .CLKFBOUT_PHASE(0.0), // Phase offset in degrees of CLKFB + .CLKIN_PERIOD(10.0), // Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz). + .CLKOUT0_DIVIDE(1), // Divide amount for CLKOUT0 + .CLKOUT0_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT0 + .CLKOUT0_PHASE(0.0), // Phase offset for CLKOUT0 + .CLKOUT1_DIVIDE(1), // Divide amount for CLKOUT1 + .CLKOUT1_DUTY_CYCLE(0.5), // Duty cycle for CLKOUT1 + .CLKOUT1_PHASE(0.0), // Phase offset for CLKOUT1 + .CLKOUTPHY_MODE("VCO_2X"), // Frequency of the CLKOUTPHY + .DIVCLK_DIVIDE(1), // Master division value + .IS_CLKFBIN_INVERTED(1'b0), // Optional inversion for CLKFBIN + .IS_CLKIN_INVERTED(1'b0), // Optional inversion for CLKIN + .IS_PWRDWN_INVERTED(1'b0), // Optional inversion for PWRDWN + .IS_RST_INVERTED(1'b0), // Optional inversion for RST + .REF_JITTER(0.0), // Reference input jitter in UI + .STARTUP_WAIT("FALSE") // Delays DONE until PLL is locked + ) + PLLE4_BASE_inst ( + .CLKFBOUT(dout[0]), // 1-bit output: Feedback clock + .CLKOUT0(dout[1]), // 1-bit output: General Clock output + .CLKOUT0B(dout[2]), // 1-bit output: Inverted CLKOUT0 + .CLKOUT1(dout[3]), // 1-bit output: General Clock output + .CLKOUT1B(dout[4]), // 1-bit output: Inverted CLKOUT1 + .CLKOUTPHY(dout[5]), // 1-bit output: Bitslice clock + .LOCKED(dout[6]), // 1-bit output: LOCK + .CLKFBIN(), // 1-bit input: Feedback clock + .CLKIN(clk), // 1-bit input: Input clock + .CLKOUTPHYEN(1'b1), // 1-bit input: CLKOUTPHY enable + .PWRDWN(din[0]), // 1-bit input: Power-down + .RST(din[1]) // 1-bit input: Reset + ); +endmodule