fpga: Add X440/FBX support
Co-authored-by: Martin Braun <martin.braun@ettus.com> Co-authored-by: Wade Fife <wade.fife@ni.com> Co-authored-by: Ryan Marlow <ryan@lmarlow.com> Original-commit: 596760a12e4834e47589c12f8a4fd083aa2f7c25
This commit is contained in:
committed by
Aki Tomita
co-authored by
Martin Braun
Wade Fife
Ryan Marlow
parent
a405111ce7
commit
5cadf901c7
@@ -0,0 +1,222 @@
|
||||
//
|
||||
// Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
//
|
||||
// Module: led_control
|
||||
//
|
||||
// Description:
|
||||
// Implements control over LED state via CtrlPort. The default state
|
||||
// has the LEDs disabled.
|
||||
//
|
||||
|
||||
`default_nettype none
|
||||
|
||||
module led_control #(
|
||||
parameter BASE_ADDRESS = 0,
|
||||
parameter REGMAP_SIZE = 8'h1
|
||||
) (
|
||||
// Clock and reset
|
||||
input wire ctrlport_clk,
|
||||
input wire ctrlport_rst,
|
||||
|
||||
// Request
|
||||
input wire s_ctrlport_req_wr,
|
||||
input wire s_ctrlport_req_rd,
|
||||
input wire [19:0] s_ctrlport_req_addr,
|
||||
input wire [31:0] s_ctrlport_req_data,
|
||||
// Response
|
||||
output reg s_ctrlport_resp_ack,
|
||||
output reg [ 1:0] s_ctrlport_resp_status,
|
||||
output reg [31:0] s_ctrlport_resp_data,
|
||||
|
||||
// LED Control (domain: ctrlport_clk)
|
||||
output reg ch0_rx2_led,
|
||||
output reg ch0_tx_led,
|
||||
output reg ch0_rx_led,
|
||||
output reg ch1_rx2_led,
|
||||
output reg ch1_tx_led,
|
||||
output reg ch1_rx_led,
|
||||
output reg ch2_rx2_led,
|
||||
output reg ch2_tx_led,
|
||||
output reg ch2_rx_led,
|
||||
output reg ch3_rx2_led,
|
||||
output reg ch3_tx_led,
|
||||
output reg ch3_rx_led
|
||||
|
||||
);
|
||||
|
||||
`include "../regmap/x440/led_setup_regmap_utils.vh"
|
||||
`include "../../../../lib/rfnoc/core/ctrlport.vh"
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// ATR memory signals
|
||||
//---------------------------------------------------------------
|
||||
reg [31:0] led_ctrl_reg;
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Handling of CtrlPort
|
||||
//---------------------------------------------------------------
|
||||
// Check of request address is targeted for this module.
|
||||
wire address_in_range = (s_ctrlport_req_addr >= BASE_ADDRESS) && (s_ctrlport_req_addr < BASE_ADDRESS + REGMAP_SIZE);
|
||||
|
||||
always @(posedge ctrlport_clk) begin
|
||||
// reset internal registers and responses
|
||||
if (ctrlport_rst) begin
|
||||
s_ctrlport_resp_ack <= 1'b0;
|
||||
s_ctrlport_resp_status <= 2'b0;
|
||||
s_ctrlport_resp_data <= 32'b0;
|
||||
|
||||
end else begin
|
||||
// write requests
|
||||
if (s_ctrlport_req_wr) begin
|
||||
// always issue an ack and no data
|
||||
s_ctrlport_resp_ack <= 1'b1;
|
||||
s_ctrlport_resp_data <= {32{1'bx}};
|
||||
s_ctrlport_resp_status <= CTRL_STS_OKAY;
|
||||
|
||||
case (s_ctrlport_req_addr)
|
||||
BASE_ADDRESS + LED_CONTROL: begin
|
||||
led_ctrl_reg <= s_ctrlport_req_data;
|
||||
end
|
||||
|
||||
// error on undefined address
|
||||
default: begin
|
||||
if (address_in_range) begin
|
||||
s_ctrlport_resp_status <= CTRL_STS_CMDERR;
|
||||
|
||||
// no response if out of range
|
||||
end else begin
|
||||
s_ctrlport_resp_ack <= 1'b0;
|
||||
end
|
||||
end
|
||||
endcase
|
||||
|
||||
//req_rd not delayed
|
||||
end else if (s_ctrlport_req_rd) begin
|
||||
// default assumption: valid request
|
||||
s_ctrlport_resp_ack <= 1'b1;
|
||||
s_ctrlport_resp_status <= CTRL_STS_OKAY;
|
||||
s_ctrlport_resp_data <= {32{1'b0}};
|
||||
|
||||
case (s_ctrlport_req_addr)
|
||||
BASE_ADDRESS : begin
|
||||
s_ctrlport_resp_data <= led_ctrl_reg & LED_CONTROL_MASK;
|
||||
end
|
||||
|
||||
// error on undefined address
|
||||
default: begin
|
||||
if (address_in_range) begin
|
||||
s_ctrlport_resp_status <= CTRL_STS_CMDERR;
|
||||
|
||||
// no response if out of range
|
||||
end else begin
|
||||
s_ctrlport_resp_ack <= 1'b0;
|
||||
end
|
||||
end
|
||||
endcase
|
||||
|
||||
// no request
|
||||
end else begin
|
||||
s_ctrlport_resp_ack <= 1'b0;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge ctrlport_clk) begin
|
||||
//outputs
|
||||
ch0_rx2_led <= led_ctrl_reg[CH0_RX2_LED_EN];
|
||||
ch0_tx_led <= led_ctrl_reg[CH0_TRX1_LED_RED_EN];
|
||||
ch0_rx_led <= led_ctrl_reg[CH0_TRX1_LED_GR_EN];
|
||||
|
||||
ch1_rx2_led <= led_ctrl_reg[CH1_RX2_LED_EN];
|
||||
ch1_tx_led <= led_ctrl_reg[CH1_TRX1_LED_RED_EN];
|
||||
ch1_rx_led <= led_ctrl_reg[CH1_TRX1_LED_GR_EN];
|
||||
|
||||
ch2_rx2_led <= led_ctrl_reg[CH2_RX2_LED_EN];
|
||||
ch2_tx_led <= led_ctrl_reg[CH2_TRX1_LED_RED_EN];
|
||||
ch2_rx_led <= led_ctrl_reg[CH2_TRX1_LED_GR_EN];
|
||||
|
||||
ch3_rx2_led <= led_ctrl_reg[CH3_RX2_LED_EN];
|
||||
ch3_tx_led <= led_ctrl_reg[CH3_TRX1_LED_RED_EN];
|
||||
ch3_rx_led <= led_ctrl_reg[CH3_TRX1_LED_GR_EN];
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
`default_nettype wire
|
||||
|
||||
//XmlParse xml_on
|
||||
//<regmap name="LED_SETUP_REGMAP" readablestrobes="false" generatevhdl="true" ettusguidelines="true">
|
||||
// <group name="LED_SETUP_REGISTERS">
|
||||
// <info>
|
||||
// Contains registers that control the LEDs.
|
||||
// </info>
|
||||
// <register name="LED_CONTROL" size="32" offset="0x0" attributes="Readable|Writable">
|
||||
// <info>
|
||||
// This register configures RF Frontend LEDs.
|
||||
// </info>
|
||||
// <bitfield name="CH0_RX2_LED_EN" range="0" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch0 Rx2 Green LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH0_TRX1_LED_RED_EN" range="1" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch0 TRX (TX) Red LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH0_TRX1_LED_GR_EN" range="2" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch0 TRX (RX) Green LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH1_RX2_LED_EN" range="8" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch1 Rx2 Green LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH1_TRX1_LED_RED_EN" range="9" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch1 TRX (TX) Red LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH1_TRX1_LED_GR_EN" range="10" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch1 TRX (RX) Green LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH2_RX2_LED_EN" range="16" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch2 Rx2 Green LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH2_TRX1_LED_RED_EN" range="17" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch2 TRX (TX) Red LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH2_TRX1_LED_GR_EN" range="18" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch2 TRX (RX) Green LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH3_RX2_LED_EN" range="24" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch3 Rx2 Green LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH3_TRX1_LED_RED_EN" range="25" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch3 TRX (TX) Red LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// <bitfield name="CH3_TRX1_LED_GR_EN" range="26" initialvalue="0">
|
||||
// <info>
|
||||
// Enables the Ch3 TRX (RX) Green LED
|
||||
// </info>
|
||||
// </bitfield>
|
||||
// </register>
|
||||
// </group>
|
||||
//</regmap>
|
||||
//XmlParse xml_off
|
||||
@@ -0,0 +1,21 @@
|
||||
#
|
||||
# Copyright 2022 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# Timing constraints for the x440's motherboard CPLD.
|
||||
#
|
||||
|
||||
|
||||
#####################################################################
|
||||
# DB specific LED constraints
|
||||
#####################################################################
|
||||
|
||||
# LED signals
|
||||
set led_outputs [get_ports {QSFP0_LED_ACTIVE[*] QSFP0_LED_LINK[*] \
|
||||
QSFP1_LED_ACTIVE[*] QSFP1_LED_LINK[*] CH*_RX2_LED[*] CH*_TX_LED[*] CH*_RX_LED[*] } ]
|
||||
set_min_delay -to $led_outputs 0
|
||||
set_max_delay -to $led_outputs $prc_clock_period
|
||||
|
||||
@@ -0,0 +1,995 @@
|
||||
//
|
||||
// Copyright 2022 Ettus Research, A National Instruments Brand
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
//
|
||||
// Module: mb_cpld
|
||||
//
|
||||
// Description:
|
||||
//
|
||||
// Top level file for the X440 motherboard CPLD.
|
||||
//
|
||||
// Parameters:
|
||||
//
|
||||
// SIMULATION : Set to 1 to speed up simulation.
|
||||
//
|
||||
|
||||
`default_nettype none
|
||||
|
||||
|
||||
module mb_cpld #(
|
||||
parameter SIMULATION = 0
|
||||
) (
|
||||
//---------------------------------------------------------------------------
|
||||
// Clocking
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// CPLD's PLL reference clock (differential input; abbreviation: pclk)
|
||||
input wire PLL_REF_CLK,
|
||||
|
||||
// Reliable clock (100 MHz; differential input)
|
||||
input wire CLK_100,
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Power Supplies
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Power supply clocks
|
||||
output wire PWR_SUPPLY_CLK_CORE,
|
||||
output wire PWR_SUPPLY_CLK_DDR4_S,
|
||||
output wire PWR_SUPPLY_CLK_DDR4_N,
|
||||
output wire PWR_SUPPLY_CLK_0P9V,
|
||||
output wire PWR_SUPPLY_CLK_1P8V,
|
||||
output wire PWR_SUPPLY_CLK_2P5V,
|
||||
output wire PWR_SUPPLY_CLK_3P3V,
|
||||
output wire PWR_SUPPLY_CLK_3P6V,
|
||||
|
||||
// Power supply control
|
||||
output wire PWR_EN_5V_OSC_100,
|
||||
output wire PWR_EN_5V_OSC_122_88,
|
||||
output wire IPASS_POWER_DISABLE,
|
||||
input wire [1:0] IPASS_POWER_EN_FAULT,
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Interfaces from/to RFSoC
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// PL SPI slave interface
|
||||
input wire PL_CPLD_SCLK,
|
||||
input wire PL_CPLD_MOSI,
|
||||
output reg PL_CPLD_MISO,
|
||||
input wire [1:0] PL_CPLD_CS_N,
|
||||
|
||||
// IRQ to PL
|
||||
output wire PL_CPLD_IRQ,
|
||||
|
||||
// PS SPI slave interface
|
||||
// Chip Selects:
|
||||
// PS_CPLD_CS_N(2:0) -> binary encoded chip select
|
||||
// PS_CPLD_CS_N(3) -> chip select "enable"
|
||||
input wire PS_CPLD_SCLK,
|
||||
input wire PS_CPLD_MOSI,
|
||||
output wire PS_CPLD_MISO,
|
||||
input wire [3:0] PS_CPLD_CS_N,
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// PL Interfaces to/from Motherboard
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Clocking AUX board SPI master interface
|
||||
output wire CLK_DB_SCLK,
|
||||
output wire CLK_DB_MOSI,
|
||||
input wire CLK_DB_MISO,
|
||||
output wire CLK_DB_CS_N,
|
||||
|
||||
// QSFP LEDs
|
||||
// Port 0
|
||||
output wire [3:0] QSFP0_LED_ACTIVE,
|
||||
output wire [3:0] QSFP0_LED_LINK,
|
||||
// Port 1
|
||||
output wire [3:0] QSFP1_LED_ACTIVE,
|
||||
output wire [3:0] QSFP1_LED_LINK,
|
||||
|
||||
// Daughterboard LED GPIO
|
||||
// 1 -> DB1 / 0 -> DB0
|
||||
output wire [1:0] CH0_RX2_LED,
|
||||
output wire [1:0] CH0_TX_LED,
|
||||
output wire [1:0] CH0_RX_LED,
|
||||
output wire [1:0] CH1_RX2_LED,
|
||||
output wire [1:0] CH1_TX_LED,
|
||||
output wire [1:0] CH1_RX_LED,
|
||||
output wire [1:0] CH2_RX2_LED,
|
||||
output wire [1:0] CH2_TX_LED,
|
||||
output wire [1:0] CH2_RX_LED,
|
||||
output wire [1:0] CH3_RX2_LED,
|
||||
output wire [1:0] CH3_TX_LED,
|
||||
output wire [1:0] CH3_RX_LED,
|
||||
//---------------------------------------------------------------------------
|
||||
// PS Interfaces to/from Motherboard
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// LMK04832 SPI master interface
|
||||
output wire LMK32_SCLK,
|
||||
output wire LMK32_MOSI,
|
||||
input wire LMK32_MISO,
|
||||
output wire LMK32_CS_N,
|
||||
|
||||
// TPM 2.0 SPI master interface
|
||||
// Note: TPM is not currently supported
|
||||
output wire TPM_SCLK,
|
||||
output wire TPM_MOSI,
|
||||
input wire TPM_MISO,
|
||||
output wire TPM_CS_N,
|
||||
|
||||
// Phase DAC SPI master interface
|
||||
output wire PHASE_DAC_SCLK,
|
||||
output wire PHASE_DAC_MOSI,
|
||||
output wire PHASE_DAC_CS_N,
|
||||
|
||||
// DIO direction control
|
||||
output wire [11:0] DIO_DIRECTION_A,
|
||||
output wire [11:0] DIO_DIRECTION_B,
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Miscellaneous
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// This signal enables the 1.8 V and 3.3 V power supply clocks.
|
||||
output wire PS_CLK_ON_CPLD,
|
||||
|
||||
// iPASS control interface
|
||||
input wire [1:0] IPASS_PRESENT_N,
|
||||
inout wire [1:0] IPASS_SCL,
|
||||
inout wire [1:0] IPASS_SDA,
|
||||
|
||||
// PCIe reset to FPGA
|
||||
output wire PCIE_RESET,
|
||||
|
||||
// TPM reset
|
||||
output wire TPM_RESET_n
|
||||
);
|
||||
|
||||
// SPI masters (spi_top) are limited to 64 bit transmission length
|
||||
`define SPI_MAX_CHAR_64
|
||||
|
||||
`include "../../../../lib/rfnoc/core/ctrlport.vh"
|
||||
`include "../regmap/mb_cpld_ps_regmap_utils.vh"
|
||||
`include "../regmap/x440/mb_cpld_pl_regmap_utils.vh"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Clocks and Resets
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
wire clk40, clk50, clk250;
|
||||
wire pll_ref_clk_int;
|
||||
|
||||
wire reset_clk50;
|
||||
wire reset_clk40;
|
||||
wire power_on_reset_clk100;
|
||||
|
||||
wire [0:0] pll_locked_async;
|
||||
wire [0:0] pll_locked_clk50;
|
||||
wire [0:0] pll_locked_clk40;
|
||||
|
||||
wire pll_ref_clk_en_clk50;
|
||||
wire pll_ref_clk_en_pclk;
|
||||
|
||||
reset_generator reliable_reset_gen_inst (
|
||||
.clk (CLK_100),
|
||||
.power_on_reset (power_on_reset_clk100)
|
||||
);
|
||||
|
||||
// Divide reliable clock by 2 since the design is not capable of running at
|
||||
// 100 MHz. Multiple by 2.5 to get a fast clock to handle PS SPI chip select
|
||||
// decoding.
|
||||
pll pll_inst (
|
||||
.inclk0 (CLK_100),
|
||||
.c0 (clk50),
|
||||
.c1 (clk250),
|
||||
.c2 (clk40),
|
||||
.locked (pll_locked_async)
|
||||
);
|
||||
|
||||
// Bring pll_ref_clk enable signal to the same clock domain.
|
||||
synchronizer #(
|
||||
.WIDTH (1),
|
||||
.STAGES (2),
|
||||
.INITIAL_VAL (1'b0),
|
||||
.FALSE_PATH_TO_IN (1)
|
||||
) pll_ref_clk_en_sync (
|
||||
.clk (PLL_REF_CLK),
|
||||
.rst (1'b0),
|
||||
.in (pll_ref_clk_en_clk50),
|
||||
.out (pll_ref_clk_en_pclk)
|
||||
);
|
||||
|
||||
// Enable clock using ALTCLKCTRL IP.
|
||||
clkctrl pll_ref_clk_ctrl_inst (
|
||||
.inclk (PLL_REF_CLK),
|
||||
.ena (pll_ref_clk_en_pclk),
|
||||
.outclk (pll_ref_clk_int)
|
||||
);
|
||||
|
||||
// Use locked signal as reset for clk50 and clk40 clock domain
|
||||
synchronizer #(
|
||||
.WIDTH (1),
|
||||
.STAGES (2),
|
||||
.INITIAL_VAL (1'b0),
|
||||
.FALSE_PATH_TO_IN (1)
|
||||
) clk50_reset_sync (
|
||||
.clk (clk50),
|
||||
.rst (1'b0),
|
||||
.in (pll_locked_async),
|
||||
.out (pll_locked_clk50)
|
||||
);
|
||||
|
||||
assign reset_clk50 = ~pll_locked_clk50;
|
||||
|
||||
synchronizer #(
|
||||
.WIDTH (1),
|
||||
.STAGES (2),
|
||||
.INITIAL_VAL (1'b0),
|
||||
.FALSE_PATH_TO_IN (1)
|
||||
) clk40_reset_sync (
|
||||
.clk (clk40),
|
||||
.rst (1'b0),
|
||||
.in (pll_locked_async),
|
||||
.out (pll_locked_clk40)
|
||||
);
|
||||
|
||||
assign reset_clk40 = ~pll_locked_clk40;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Power Supply Clock
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
`ifdef MFG_SUPPORT
|
||||
|
||||
assign PWR_SUPPLY_CLK_CORE = 1'b0;
|
||||
assign PWR_SUPPLY_CLK_DDR4_S = 1'b0;
|
||||
assign PWR_SUPPLY_CLK_DDR4_N = 1'b0;
|
||||
assign PWR_SUPPLY_CLK_0P9V = 1'b0;
|
||||
assign PWR_SUPPLY_CLK_1P8V = 1'b0;
|
||||
assign PWR_SUPPLY_CLK_2P5V = 1'b0;
|
||||
assign PWR_SUPPLY_CLK_3P3V = 1'b0;
|
||||
assign PWR_SUPPLY_CLK_3P6V = 1'b0;
|
||||
|
||||
`else
|
||||
|
||||
// Frequency definitions
|
||||
localparam SOUCE_CLOCK_FREQUENCY = 100_000_000;
|
||||
localparam TARGET_FREQUENCY_350k = 350_000;
|
||||
localparam TARGET_FREQUENCY_450k = 450_000;
|
||||
localparam TARGET_FREQUENCY_500k = 500_000;
|
||||
localparam TARGET_FREQUENCY_600k = 600_000;
|
||||
localparam TARGET_FREQUENCY_800k = 800_000;
|
||||
localparam TARGET_FREQUENCY_1M = 1_000_000;
|
||||
|
||||
pwr_supply_clk_gen #(
|
||||
.SOURCE_CLK_FREQ (SOUCE_CLOCK_FREQUENCY),
|
||||
.TARGET_CLK_FREQ (TARGET_FREQUENCY_350k)
|
||||
) freq_gen_350k (
|
||||
.clk (CLK_100),
|
||||
.rst (power_on_reset_clk100),
|
||||
.pwr_supply_clk (PWR_SUPPLY_CLK_0P9V)
|
||||
);
|
||||
|
||||
wire pwr_supply_clk_450k;
|
||||
pwr_supply_clk_gen #(
|
||||
.SOURCE_CLK_FREQ (SOUCE_CLOCK_FREQUENCY),
|
||||
.TARGET_CLK_FREQ (TARGET_FREQUENCY_450k)
|
||||
) freq_gen_450k (
|
||||
.clk (CLK_100),
|
||||
.rst (power_on_reset_clk100),
|
||||
.pwr_supply_clk (pwr_supply_clk_450k)
|
||||
);
|
||||
|
||||
assign PWR_SUPPLY_CLK_DDR4_S = pwr_supply_clk_450k;
|
||||
assign PWR_SUPPLY_CLK_DDR4_N = pwr_supply_clk_450k;
|
||||
|
||||
pwr_supply_clk_gen #(
|
||||
.SOURCE_CLK_FREQ (SOUCE_CLOCK_FREQUENCY),
|
||||
.TARGET_CLK_FREQ (TARGET_FREQUENCY_500k)
|
||||
) freq_gen_500k (
|
||||
.clk (CLK_100),
|
||||
.rst (power_on_reset_clk100),
|
||||
.pwr_supply_clk (PWR_SUPPLY_CLK_CORE)
|
||||
);
|
||||
|
||||
pwr_supply_clk_gen #(
|
||||
.SOURCE_CLK_FREQ (SOUCE_CLOCK_FREQUENCY),
|
||||
.TARGET_CLK_FREQ (TARGET_FREQUENCY_600k)
|
||||
) freq_gen_600k (
|
||||
.clk (CLK_100),
|
||||
.rst (power_on_reset_clk100),
|
||||
.pwr_supply_clk (PWR_SUPPLY_CLK_1P8V)
|
||||
);
|
||||
|
||||
pwr_supply_clk_gen #(
|
||||
.SOURCE_CLK_FREQ (SOUCE_CLOCK_FREQUENCY),
|
||||
.TARGET_CLK_FREQ (TARGET_FREQUENCY_800k)
|
||||
) freq_gen_800k (
|
||||
.clk (CLK_100),
|
||||
.rst (power_on_reset_clk100),
|
||||
.pwr_supply_clk (PWR_SUPPLY_CLK_2P5V)
|
||||
);
|
||||
|
||||
wire pwr_supply_clk_1M;
|
||||
pwr_supply_clk_gen #(
|
||||
.SOURCE_CLK_FREQ (SOUCE_CLOCK_FREQUENCY),
|
||||
.TARGET_CLK_FREQ (TARGET_FREQUENCY_1M)
|
||||
) freq_gen_1M (
|
||||
.clk (CLK_100),
|
||||
.rst (power_on_reset_clk100),
|
||||
.pwr_supply_clk (pwr_supply_clk_1M)
|
||||
);
|
||||
|
||||
assign PWR_SUPPLY_CLK_3P3V = pwr_supply_clk_1M;
|
||||
assign PWR_SUPPLY_CLK_3P6V = pwr_supply_clk_1M;
|
||||
|
||||
`endif
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// PL Interfaces
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
wire [1:0] db_clk_enable;
|
||||
wire [1:0] db_reset;
|
||||
wire [1:0] ipass_cable_present;
|
||||
|
||||
// PL SPI FPGA -> DB CPLD
|
||||
reg mb_cpld_sclk, mb_cpld_mosi, mb_cpld_cs_n;
|
||||
wire mb_cpld_miso;
|
||||
|
||||
// PL SPI chip select decoding
|
||||
localparam PL_CS_MB_CPLD = 2'b00;
|
||||
localparam PL_CS_DB0 = 2'b10;
|
||||
localparam PL_CS_DB1 = 2'b01;
|
||||
localparam PL_CS_IDLE = 2'b11;
|
||||
|
||||
// PL SPI registers do not have a separate reset.
|
||||
// SW is expected to properly setup the DBs before issuing SPI transactions.
|
||||
always @(posedge pll_ref_clk_int) begin : to_db
|
||||
// Default chip selects
|
||||
mb_cpld_cs_n <= 1'b1;
|
||||
|
||||
// MB CPLD
|
||||
mb_cpld_sclk <= PL_CPLD_SCLK;
|
||||
mb_cpld_mosi <= PL_CPLD_MOSI;
|
||||
if (PL_CPLD_CS_N == PL_CS_MB_CPLD) begin
|
||||
mb_cpld_cs_n <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
// SPI DB CPLD -> FPGA
|
||||
always @(posedge pll_ref_clk_int) begin : from_db
|
||||
case (PL_CPLD_CS_N)
|
||||
PL_CS_MB_CPLD : PL_CPLD_MISO <= mb_cpld_miso; // MB CPLD
|
||||
PL_CS_IDLE : PL_CPLD_MISO <= 1'bz; // Inactive
|
||||
endcase
|
||||
end
|
||||
|
||||
// Local PL SPI target
|
||||
wire [19:0] pl_ctrlport_req_addr;
|
||||
wire [31:0] pl_ctrlport_req_data;
|
||||
wire pl_ctrlport_req_rd;
|
||||
wire pl_ctrlport_req_wr;
|
||||
wire pl_ctrlport_resp_ack;
|
||||
wire [31:0] pl_ctrlport_resp_data;
|
||||
wire [ 1:0] pl_ctrlport_resp_status;
|
||||
spi_slave_to_ctrlport_master #(
|
||||
.CLK_FREQUENCY (50_000_000),
|
||||
.SPI_FREQUENCY (10_666_667)
|
||||
) pl_spi_endpoint (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.m_ctrlport_req_wr (pl_ctrlport_req_wr),
|
||||
.m_ctrlport_req_rd (pl_ctrlport_req_rd),
|
||||
.m_ctrlport_req_addr (pl_ctrlport_req_addr),
|
||||
.m_ctrlport_req_data (pl_ctrlport_req_data),
|
||||
.m_ctrlport_resp_ack (pl_ctrlport_resp_ack),
|
||||
.m_ctrlport_resp_status (pl_ctrlport_resp_status),
|
||||
.m_ctrlport_resp_data (pl_ctrlport_resp_data),
|
||||
.sclk (mb_cpld_sclk),
|
||||
.cs_n (mb_cpld_cs_n),
|
||||
.mosi (mb_cpld_mosi),
|
||||
.miso (mb_cpld_miso)
|
||||
);
|
||||
|
||||
// Split up the PL control port
|
||||
wire [19:0] pl_regs_ctrlport_req_addr;
|
||||
wire [31:0] pl_regs_ctrlport_req_data;
|
||||
wire pl_regs_ctrlport_req_rd;
|
||||
wire pl_regs_ctrlport_req_wr;
|
||||
wire pl_regs_ctrlport_resp_ack;
|
||||
wire [31:0] pl_regs_ctrlport_resp_data;
|
||||
wire [ 1:0] pl_regs_ctrlport_resp_status;
|
||||
|
||||
wire [19:0] db0_led_ctrlport_req_addr;
|
||||
wire [31:0] db0_led_ctrlport_req_data;
|
||||
wire db0_led_ctrlport_req_rd;
|
||||
wire db0_led_ctrlport_req_wr;
|
||||
wire db0_led_ctrlport_resp_ack;
|
||||
wire [31:0] db0_led_ctrlport_resp_data;
|
||||
wire [ 1:0] db0_led_ctrlport_resp_status;
|
||||
|
||||
wire [19:0] db1_led_ctrlport_req_addr;
|
||||
wire [31:0] db1_led_ctrlport_req_data;
|
||||
wire db1_led_ctrlport_req_rd;
|
||||
wire db1_led_ctrlport_req_wr;
|
||||
wire db1_led_ctrlport_resp_ack;
|
||||
wire [31:0] db1_led_ctrlport_resp_data;
|
||||
wire [ 1:0] db1_led_ctrlport_resp_status;
|
||||
|
||||
wire [19:0] pl_term_ctrlport_req_addr;
|
||||
wire [31:0] pl_term_ctrlport_req_data;
|
||||
wire pl_term_ctrlport_req_rd;
|
||||
wire pl_term_ctrlport_req_wr;
|
||||
wire pl_term_ctrlport_resp_ack;
|
||||
wire [31:0] pl_term_ctrlport_resp_data;
|
||||
wire [ 1:0] pl_term_ctrlport_resp_status;
|
||||
|
||||
ctrlport_splitter #(
|
||||
.NUM_SLAVES (4)
|
||||
) pl_ctrlport_splitter (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (pl_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (pl_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (pl_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (pl_ctrlport_req_data),
|
||||
.s_ctrlport_req_byte_en (),
|
||||
.s_ctrlport_req_has_time (),
|
||||
.s_ctrlport_req_time (),
|
||||
.s_ctrlport_resp_ack (pl_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (pl_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (pl_ctrlport_resp_data),
|
||||
.m_ctrlport_req_wr ({pl_regs_ctrlport_req_wr, db0_led_ctrlport_req_wr, db1_led_ctrlport_req_wr, pl_term_ctrlport_req_wr}),
|
||||
.m_ctrlport_req_rd ({pl_regs_ctrlport_req_rd, db0_led_ctrlport_req_rd, db1_led_ctrlport_req_rd, pl_term_ctrlport_req_rd}),
|
||||
.m_ctrlport_req_addr ({pl_regs_ctrlport_req_addr, db0_led_ctrlport_req_addr, db1_led_ctrlport_req_addr, pl_term_ctrlport_req_addr}),
|
||||
.m_ctrlport_req_data ({pl_regs_ctrlport_req_data, db0_led_ctrlport_req_data, db1_led_ctrlport_req_data, pl_term_ctrlport_req_data}),
|
||||
.m_ctrlport_req_byte_en (),
|
||||
.m_ctrlport_req_has_time (),
|
||||
.m_ctrlport_req_time (),
|
||||
.m_ctrlport_resp_ack ({pl_regs_ctrlport_resp_ack, db0_led_ctrlport_resp_ack, db1_led_ctrlport_resp_ack, pl_term_ctrlport_resp_ack}),
|
||||
.m_ctrlport_resp_status ({pl_regs_ctrlport_resp_status, db0_led_ctrlport_resp_status, db1_led_ctrlport_resp_status, pl_term_ctrlport_resp_status}),
|
||||
.m_ctrlport_resp_data ({pl_regs_ctrlport_resp_data, db0_led_ctrlport_resp_data, db1_led_ctrlport_resp_data, pl_term_ctrlport_resp_data})
|
||||
);
|
||||
|
||||
pl_cpld_regs #(
|
||||
.BASE_ADDRESS (PL_REGISTERS)
|
||||
) pl_regs (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (pl_regs_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (pl_regs_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (pl_regs_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (pl_regs_ctrlport_req_data),
|
||||
.s_ctrlport_resp_ack (pl_regs_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (pl_regs_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (pl_regs_ctrlport_resp_data),
|
||||
.qsfp0_led_active (QSFP0_LED_ACTIVE),
|
||||
.qsfp0_led_link (QSFP0_LED_LINK),
|
||||
.qsfp1_led_active (QSFP1_LED_ACTIVE),
|
||||
.qsfp1_led_link (QSFP1_LED_LINK),
|
||||
.ipass_cable_present (ipass_cable_present)
|
||||
);
|
||||
|
||||
led_control #(
|
||||
.BASE_ADDRESS (PL_DB0_LED_REGISTERS),
|
||||
.REGMAP_SIZE (PL_DB0_LED_REGISTERS_SIZE)
|
||||
) led_control_db0 (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (db0_led_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (db0_led_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (db0_led_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (db0_led_ctrlport_req_data),
|
||||
.s_ctrlport_resp_ack (db0_led_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (db0_led_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (db0_led_ctrlport_resp_data),
|
||||
.ch0_rx2_led (CH0_RX2_LED[0]),
|
||||
.ch0_tx_led (CH0_TX_LED[0]),
|
||||
.ch0_rx_led (CH0_RX_LED[0]),
|
||||
.ch1_rx2_led (CH1_RX2_LED[0]),
|
||||
.ch1_tx_led (CH1_TX_LED[0]),
|
||||
.ch1_rx_led (CH1_RX_LED[0]),
|
||||
.ch2_rx2_led (CH2_RX2_LED[0]),
|
||||
.ch2_tx_led (CH2_TX_LED[0]),
|
||||
.ch2_rx_led (CH2_RX_LED[0]),
|
||||
.ch3_rx2_led (CH3_RX2_LED[0]),
|
||||
.ch3_tx_led (CH3_TX_LED[0]),
|
||||
.ch3_rx_led (CH3_RX_LED[0])
|
||||
);
|
||||
|
||||
led_control #(
|
||||
.BASE_ADDRESS (PL_DB1_LED_REGISTERS),
|
||||
.REGMAP_SIZE (PL_DB1_LED_REGISTERS_SIZE)
|
||||
) led_control_db1 (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (db1_led_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (db1_led_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (db1_led_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (db1_led_ctrlport_req_data),
|
||||
.s_ctrlport_resp_ack (db1_led_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (db1_led_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (db1_led_ctrlport_resp_data),
|
||||
.ch0_rx2_led (CH0_RX2_LED[1]),
|
||||
.ch0_tx_led (CH0_TX_LED[1]),
|
||||
.ch0_rx_led (CH0_RX_LED[1]),
|
||||
.ch1_rx2_led (CH1_RX2_LED[1]),
|
||||
.ch1_tx_led (CH1_TX_LED[1]),
|
||||
.ch1_rx_led (CH1_RX_LED[1]),
|
||||
.ch2_rx2_led (CH2_RX2_LED[1]),
|
||||
.ch2_tx_led (CH2_TX_LED[1]),
|
||||
.ch2_rx_led (CH2_RX_LED[1]),
|
||||
.ch3_rx2_led (CH3_RX2_LED[1]),
|
||||
.ch3_tx_led (CH3_TX_LED[1]),
|
||||
.ch3_rx_led (CH3_RX_LED[1])
|
||||
);
|
||||
|
||||
// Termination of ctrlport request
|
||||
ctrlport_terminator #(
|
||||
.START_ADDRESS (PL_DB1_LED_REGISTERS + PL_DB1_LED_REGISTERS_SIZE),
|
||||
.LAST_ADDRESS (2**CTRLPORT_ADDR_W-1)
|
||||
) pl_terminator (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (pl_term_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (pl_term_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (pl_term_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (pl_term_ctrlport_req_data),
|
||||
.s_ctrlport_resp_ack (pl_term_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (pl_term_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (pl_term_ctrlport_resp_data)
|
||||
);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// PS Interfaces
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Local PS SPI target
|
||||
wire [19:0] ps_ctrlport_req_addr;
|
||||
wire [31:0] ps_ctrlport_req_data;
|
||||
wire ps_ctrlport_req_rd;
|
||||
wire ps_ctrlport_req_wr;
|
||||
wire ps_ctrlport_resp_ack;
|
||||
wire [31:0] ps_ctrlport_resp_data;
|
||||
wire [ 1:0] ps_ctrlport_resp_status;
|
||||
|
||||
wire ps_spi_endpoint_sclk;
|
||||
wire ps_spi_endpoint_mosi;
|
||||
wire ps_spi_endpoint_miso;
|
||||
wire ps_spi_endpoint_cs_n;
|
||||
spi_slave_to_ctrlport_master #(
|
||||
.CLK_FREQUENCY (50_000_000),
|
||||
.SPI_FREQUENCY (5_000_000)
|
||||
) ps_spi_endpoint (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.m_ctrlport_req_wr (ps_ctrlport_req_wr),
|
||||
.m_ctrlport_req_rd (ps_ctrlport_req_rd),
|
||||
.m_ctrlport_req_addr (ps_ctrlport_req_addr),
|
||||
.m_ctrlport_req_data (ps_ctrlport_req_data),
|
||||
.m_ctrlport_resp_ack (ps_ctrlport_resp_ack),
|
||||
.m_ctrlport_resp_status (ps_ctrlport_resp_status),
|
||||
.m_ctrlport_resp_data (ps_ctrlport_resp_data),
|
||||
.sclk (ps_spi_endpoint_sclk),
|
||||
.cs_n (ps_spi_endpoint_cs_n),
|
||||
.mosi (ps_spi_endpoint_mosi),
|
||||
.miso (ps_spi_endpoint_miso)
|
||||
);
|
||||
|
||||
// The PS SPI chip select signals are binary encoded.
|
||||
//
|
||||
// The internal SPI slaves as well as external slaves like the LMK04832
|
||||
// trigger actions or resets based on edges of the chip select signal.
|
||||
// Therefore this implementation has to avoid glitches on the chip select
|
||||
// signal although the SPI protocol is synchronous.
|
||||
//
|
||||
// The chip signals are double synchronized to make sure there is no
|
||||
// meta-stability. Due to different traces lengths there is no guarantee for
|
||||
// the chip select signals to change at the same time. To overcome this issue
|
||||
// register stage 2 and 3 are compared. Only in case of matching values the
|
||||
// change is propagated to the slaves' chip select lines. Once the IDLE state
|
||||
// (all ones) is detected in register stage 2 the slaves' chip select lines
|
||||
// will be deasserted.
|
||||
|
||||
// Input sync registers (3 stages)
|
||||
wire [3:0] ps_cpld_cs_n_shift2; // Resolving meta-stability, reset on IDLE
|
||||
reg [3:0] ps_cpld_cs_n_shift3 = {4 {1'b1}}; // Stable state detection
|
||||
synchronizer #(
|
||||
.WIDTH (4),
|
||||
.STAGES (2),
|
||||
.INITIAL_VAL (4'b1111),
|
||||
.FALSE_PATH_TO_IN (0)
|
||||
) ps_spi_input_sync_inst (
|
||||
.clk (clk250),
|
||||
.rst (1'b0),
|
||||
.in (PS_CPLD_CS_N),
|
||||
.out (ps_cpld_cs_n_shift2)
|
||||
);
|
||||
always @(posedge clk250) begin
|
||||
ps_cpld_cs_n_shift3 <= ps_cpld_cs_n_shift2;
|
||||
end
|
||||
|
||||
// SPI binary decoding
|
||||
reg [SPI_ENDPOINT_SIZE-2:0] ps_spi_cs_n_decoded = {SPI_ENDPOINT_SIZE-1 {1'b1}};
|
||||
always @(posedge clk250) begin
|
||||
// reset in case of IDLE state
|
||||
if (ps_cpld_cs_n_shift2[2:0] == PS_CS_IDLE) begin
|
||||
ps_spi_cs_n_decoded <= {SPI_ENDPOINT_SIZE-1 {1'b1}};
|
||||
// only apply changes when stable state is detected
|
||||
end else if (ps_cpld_cs_n_shift3[2:0] == ps_cpld_cs_n_shift2[2:0]) begin
|
||||
ps_spi_cs_n_decoded[PS_CS_MB_CPLD] <= ps_cpld_cs_n_shift3[2:0] != PS_CS_MB_CPLD;
|
||||
ps_spi_cs_n_decoded[PS_CS_LMK32] <= ps_cpld_cs_n_shift3[2:0] != PS_CS_LMK32;
|
||||
ps_spi_cs_n_decoded[PS_CS_TPM] <= ps_cpld_cs_n_shift3[2:0] != PS_CS_TPM;
|
||||
ps_spi_cs_n_decoded[PS_CS_PHASE_DAC] <= ps_cpld_cs_n_shift3[2:0] != PS_CS_PHASE_DAC;
|
||||
ps_spi_cs_n_decoded[PS_CS_DB0_CAL_EEPROM] <= ps_cpld_cs_n_shift3[2:0] != PS_CS_DB0_CAL_EEPROM;
|
||||
ps_spi_cs_n_decoded[PS_CS_DB1_CAL_EEPROM] <= ps_cpld_cs_n_shift3[2:0] != PS_CS_DB1_CAL_EEPROM;
|
||||
ps_spi_cs_n_decoded[PS_CS_CLK_AUX_DB] <= ps_cpld_cs_n_shift3[2:0] != PS_CS_CLK_AUX_DB;
|
||||
end
|
||||
end
|
||||
|
||||
// Local SPI slave
|
||||
assign ps_spi_endpoint_sclk = PS_CPLD_SCLK;
|
||||
assign ps_spi_endpoint_mosi = PS_CPLD_MOSI;
|
||||
assign ps_spi_endpoint_cs_n = ps_spi_cs_n_decoded[PS_CS_MB_CPLD];
|
||||
|
||||
// LMK04832 SPI signals
|
||||
assign LMK32_SCLK = PS_CPLD_SCLK;
|
||||
assign LMK32_MOSI = PS_CPLD_MOSI;
|
||||
assign LMK32_CS_N = ps_spi_cs_n_decoded[PS_CS_LMK32];
|
||||
|
||||
// TPM SPI signals
|
||||
// Note: TPM is not currently supported
|
||||
assign TPM_SCLK = PS_CPLD_SCLK;
|
||||
assign TPM_MOSI = PS_CPLD_MOSI;
|
||||
assign TPM_CS_N = ps_spi_cs_n_decoded[PS_CS_TPM];
|
||||
|
||||
// Phase DAC SPI signals
|
||||
assign PHASE_DAC_SCLK = PS_CPLD_SCLK;
|
||||
assign PHASE_DAC_MOSI = PS_CPLD_MOSI;
|
||||
assign PHASE_DAC_CS_N = ps_spi_cs_n_decoded[PS_CS_PHASE_DAC];
|
||||
|
||||
// CLK AUX DB SPI signals
|
||||
assign CLK_DB_SCLK = PS_CPLD_SCLK;
|
||||
assign CLK_DB_MOSI = PS_CPLD_MOSI;
|
||||
assign CLK_DB_CS_N = ps_spi_cs_n_decoded[PS_CS_CLK_AUX_DB];
|
||||
|
||||
// Combine SPI responses based on inputs only as this path is captured
|
||||
// synchronously to PS_CPLD_SCLK by the SPI master.
|
||||
assign PS_CPLD_MISO = (PS_CPLD_CS_N[2:0] == PS_CS_MB_CPLD) ? ps_spi_endpoint_miso :
|
||||
(PS_CPLD_CS_N[2:0] == PS_CS_LMK32) ? LMK32_MISO :
|
||||
(PS_CPLD_CS_N[2:0] == PS_CS_TPM) ? TPM_MISO :
|
||||
(PS_CPLD_CS_N[2:0] == PS_CS_CLK_AUX_DB) ? CLK_DB_MISO :
|
||||
1'bz; // Default case and PHASE_DAC
|
||||
|
||||
// Split up the PS control port
|
||||
wire [19:0] ps_regs_ctrlport_req_addr;
|
||||
wire [31:0] ps_regs_ctrlport_req_data;
|
||||
wire ps_regs_ctrlport_req_rd;
|
||||
wire ps_regs_ctrlport_req_wr;
|
||||
wire ps_regs_ctrlport_resp_ack;
|
||||
wire [31:0] ps_regs_ctrlport_resp_data;
|
||||
wire [ 1:0] ps_regs_ctrlport_resp_status;
|
||||
|
||||
wire [19:0] ps_term_ctrlport_req_addr;
|
||||
wire [31:0] ps_term_ctrlport_req_data;
|
||||
wire ps_term_ctrlport_req_rd;
|
||||
wire ps_term_ctrlport_req_wr;
|
||||
wire ps_term_ctrlport_resp_ack;
|
||||
wire [31:0] ps_term_ctrlport_resp_data;
|
||||
wire [ 1:0] ps_term_ctrlport_resp_status;
|
||||
|
||||
wire [19:0] ps_reconfig_ctrlport_req_addr;
|
||||
wire [31:0] ps_reconfig_ctrlport_req_data;
|
||||
wire ps_reconfig_ctrlport_req_rd;
|
||||
wire ps_reconfig_ctrlport_req_wr;
|
||||
wire ps_reconfig_ctrlport_resp_ack;
|
||||
wire [31:0] ps_reconfig_ctrlport_resp_data;
|
||||
wire [ 1:0] ps_reconfig_ctrlport_resp_status;
|
||||
|
||||
wire [19:0] ps_power_ctrlport_req_addr;
|
||||
wire [31:0] ps_power_ctrlport_req_data;
|
||||
wire ps_power_ctrlport_req_rd;
|
||||
wire ps_power_ctrlport_req_wr;
|
||||
wire ps_power_ctrlport_resp_ack;
|
||||
wire [31:0] ps_power_ctrlport_resp_data;
|
||||
wire [ 1:0] ps_power_ctrlport_resp_status;
|
||||
|
||||
ctrlport_splitter #(
|
||||
.NUM_SLAVES (4)
|
||||
) ps_ctrlport_splitter (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (ps_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (ps_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (ps_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (ps_ctrlport_req_data),
|
||||
.s_ctrlport_req_byte_en (),
|
||||
.s_ctrlport_req_has_time (),
|
||||
.s_ctrlport_req_time (),
|
||||
.s_ctrlport_resp_ack (ps_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (ps_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (ps_ctrlport_resp_data),
|
||||
.m_ctrlport_req_wr ({ps_power_ctrlport_req_wr, ps_regs_ctrlport_req_wr, ps_term_ctrlport_req_wr, ps_reconfig_ctrlport_req_wr}),
|
||||
.m_ctrlport_req_rd ({ps_power_ctrlport_req_rd, ps_regs_ctrlport_req_rd, ps_term_ctrlport_req_rd, ps_reconfig_ctrlport_req_rd}),
|
||||
.m_ctrlport_req_addr ({ps_power_ctrlport_req_addr, ps_regs_ctrlport_req_addr, ps_term_ctrlport_req_addr, ps_reconfig_ctrlport_req_addr}),
|
||||
.m_ctrlport_req_data ({ps_power_ctrlport_req_data, ps_regs_ctrlport_req_data, ps_term_ctrlport_req_data, ps_reconfig_ctrlport_req_data}),
|
||||
.m_ctrlport_req_byte_en (),
|
||||
.m_ctrlport_req_has_time (),
|
||||
.m_ctrlport_req_time (),
|
||||
.m_ctrlport_resp_ack ({ps_power_ctrlport_resp_ack, ps_regs_ctrlport_resp_ack, ps_term_ctrlport_resp_ack, ps_reconfig_ctrlport_resp_ack}),
|
||||
.m_ctrlport_resp_status ({ps_power_ctrlport_resp_status, ps_regs_ctrlport_resp_status, ps_term_ctrlport_resp_status, ps_reconfig_ctrlport_resp_status}),
|
||||
.m_ctrlport_resp_data ({ps_power_ctrlport_resp_data, ps_regs_ctrlport_resp_data, ps_term_ctrlport_resp_data, ps_reconfig_ctrlport_resp_data})
|
||||
);
|
||||
|
||||
wire [39:0] serial_num_clk50;
|
||||
wire cmi_ready_clk50;
|
||||
wire cmi_other_side_detected_clk50;
|
||||
ps_cpld_regs #(
|
||||
.BASE_ADDRESS (PS_REGISTERS)
|
||||
) ps_regs (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (ps_regs_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (ps_regs_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (ps_regs_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (ps_regs_ctrlport_req_data),
|
||||
.s_ctrlport_resp_ack (ps_regs_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (ps_regs_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (ps_regs_ctrlport_resp_data),
|
||||
.db_clk_enable (db_clk_enable),
|
||||
.db_reset (db_reset),
|
||||
.pll_ref_clk_enable (pll_ref_clk_en_clk50),
|
||||
.dio_direction_a (DIO_DIRECTION_A),
|
||||
.dio_direction_b (DIO_DIRECTION_B),
|
||||
.serial_num (serial_num_clk50),
|
||||
.cmi_ready (cmi_ready_clk50),
|
||||
.cmi_other_side_detected (cmi_other_side_detected_clk50)
|
||||
);
|
||||
|
||||
ps_power_regs #(
|
||||
.BASE_ADDRESS (POWER_REGISTERS),
|
||||
.NUM_ADDRESSES (POWER_REGISTERS_SIZE)
|
||||
) ps_power_regs_inst (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (ps_power_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (ps_power_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (ps_power_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (ps_power_ctrlport_req_data),
|
||||
.s_ctrlport_resp_ack (ps_power_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (ps_power_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (ps_power_ctrlport_resp_data),
|
||||
.ipass_power_disable (IPASS_POWER_DISABLE),
|
||||
.ipass_power_fault_n (IPASS_POWER_EN_FAULT),
|
||||
.osc_100_en (PWR_EN_5V_OSC_100),
|
||||
.osc_122_88_en (PWR_EN_5V_OSC_122_88)
|
||||
);
|
||||
|
||||
// Termination of ctrlport request
|
||||
ctrlport_terminator #(
|
||||
.START_ADDRESS (POWER_REGISTERS + POWER_REGISTERS_SIZE),
|
||||
.LAST_ADDRESS (2**CTRLPORT_ADDR_W-1)
|
||||
) ps_terminator (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (ps_term_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (ps_term_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (ps_term_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (ps_term_ctrlport_req_data),
|
||||
.s_ctrlport_resp_ack (ps_term_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (ps_term_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (ps_term_ctrlport_resp_data)
|
||||
);
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Reconfiguration
|
||||
//---------------------------------------------------------------------------
|
||||
// On-chip flash interface
|
||||
//
|
||||
// Naming is according to Avalon Memory-Mapped Interfaces:
|
||||
// https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/mnl_avalon_spec.pdf
|
||||
|
||||
wire csr_addr;
|
||||
wire csr_read;
|
||||
wire [31:0] csr_readdata;
|
||||
wire csr_write;
|
||||
wire [31:0] csr_writedata;
|
||||
wire [16:0] data_addr;
|
||||
wire data_read;
|
||||
wire [31:0] data_readdata;
|
||||
wire data_readdatavalid;
|
||||
wire data_waitrequest;
|
||||
wire data_write;
|
||||
wire [31:0] data_writedata;
|
||||
wire reset_clk50_n;
|
||||
|
||||
assign reset_clk50_n = ~reset_clk50;
|
||||
on_chip_flash flash_inst (
|
||||
.clock (clk50),
|
||||
.avmm_csr_addr (csr_addr),
|
||||
.avmm_csr_read (csr_read),
|
||||
.avmm_csr_writedata (csr_writedata),
|
||||
.avmm_csr_write (csr_write),
|
||||
.avmm_csr_readdata (csr_readdata),
|
||||
.avmm_data_addr (data_addr),
|
||||
.avmm_data_read (data_read),
|
||||
.avmm_data_writedata (data_writedata),
|
||||
.avmm_data_write (data_write),
|
||||
.avmm_data_readdata (data_readdata),
|
||||
.avmm_data_waitrequest (data_waitrequest),
|
||||
.avmm_data_readdatavalid (data_readdatavalid),
|
||||
.avmm_data_burstcount (4'b0001),
|
||||
.reset_n (reset_clk50_n)
|
||||
);
|
||||
|
||||
reconfig_engine #(
|
||||
.BASE_ADDRESS (RECONFIG),
|
||||
.NUM_ADDRESSES (RECONFIG_SIZE),
|
||||
.MEM_INIT (0)
|
||||
) reconfig_engine_inst (
|
||||
.ctrlport_clk (clk50),
|
||||
.ctrlport_rst (reset_clk50),
|
||||
.s_ctrlport_req_wr (ps_reconfig_ctrlport_req_wr),
|
||||
.s_ctrlport_req_rd (ps_reconfig_ctrlport_req_rd),
|
||||
.s_ctrlport_req_addr (ps_reconfig_ctrlport_req_addr),
|
||||
.s_ctrlport_req_data (ps_reconfig_ctrlport_req_data),
|
||||
.s_ctrlport_resp_ack (ps_reconfig_ctrlport_resp_ack),
|
||||
.s_ctrlport_resp_status (ps_reconfig_ctrlport_resp_status),
|
||||
.s_ctrlport_resp_data (ps_reconfig_ctrlport_resp_data),
|
||||
.csr_addr (csr_addr),
|
||||
.csr_read (csr_read),
|
||||
.csr_writedata (csr_writedata),
|
||||
.csr_write (csr_write),
|
||||
.csr_readdata (csr_readdata),
|
||||
.data_addr (data_addr),
|
||||
.data_read (data_read),
|
||||
.data_writedata (data_writedata),
|
||||
.data_write (data_write),
|
||||
.data_readdata (data_readdata),
|
||||
.data_waitrequest (data_waitrequest),
|
||||
.data_readdatavalid (data_readdatavalid)
|
||||
);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// CMI Interface
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Control and status information clock transition
|
||||
wire [39:0] serial_num_clk40;
|
||||
wire cmi_ready_clk40;
|
||||
wire cmi_other_side_detected_clk40;
|
||||
|
||||
handshake #(
|
||||
.WIDTH (41)
|
||||
) cmi_control_hs (
|
||||
.clk_a (clk50),
|
||||
.rst_a (reset_clk50),
|
||||
.valid_a (1'b1),
|
||||
.data_a ({cmi_ready_clk50, serial_num_clk50}),
|
||||
.busy_a (),
|
||||
.clk_b (clk40),
|
||||
.valid_b (),
|
||||
.data_b ({cmi_ready_clk40, serial_num_clk40})
|
||||
);
|
||||
|
||||
synchronizer #(
|
||||
.WIDTH (1),
|
||||
.STAGES (2),
|
||||
.INITIAL_VAL (1'b0),
|
||||
.FALSE_PATH_TO_IN (1)
|
||||
) cmi_status_sync (
|
||||
.clk (clk50),
|
||||
.rst (reset_clk50),
|
||||
.in (cmi_other_side_detected_clk40),
|
||||
.out (cmi_other_side_detected_clk50)
|
||||
);
|
||||
|
||||
wire scl_out;
|
||||
wire sda_out;
|
||||
wire [1:0] ipass_cable_present_n = ~ipass_cable_present;
|
||||
|
||||
PcieCmiWrapper #(
|
||||
.kSimulation (SIMULATION)
|
||||
) pcie_cmi_inst (
|
||||
.Clk (clk40),
|
||||
.acReset (reset_clk40),
|
||||
.cSerialNumber (serial_num_clk40),
|
||||
.cBoardIsReady (cmi_ready_clk40),
|
||||
.cCmiReset (PCIE_RESET),
|
||||
.cOtherSideDetected (cmi_other_side_detected_clk40),
|
||||
.aCblPrsnt_n (ipass_cable_present_n[0]),
|
||||
.aSdaIn (IPASS_SDA[0]),
|
||||
.aSdaOut (sda_out),
|
||||
.aSclIn (IPASS_SCL[0]),
|
||||
.aSclOut (scl_out)
|
||||
);
|
||||
|
||||
// External pull-ups are used to drive the signal high
|
||||
assign IPASS_SDA[0] = sda_out ? 1'bz : 1'b0;
|
||||
assign IPASS_SCL[0] = scl_out ? 1'bz : 1'b0;
|
||||
|
||||
// No CMI controller for second interface
|
||||
assign IPASS_SCL[1] = 1'bz;
|
||||
assign IPASS_SDA[1] = 1'bz;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Miscellaneous
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Constants
|
||||
assign PS_CLK_ON_CPLD = 1'b0; // Active-low driving of PS clocks
|
||||
assign TPM_RESET_n = 1'b1;
|
||||
|
||||
// Currently unused ports
|
||||
assign PL_CPLD_IRQ = 1'b0;
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
`default_nettype wire
|
||||
|
||||
|
||||
//XmlParse xml_on
|
||||
//<top name="X440_MB_CPLD">
|
||||
// <regmapcfg readablestrobes="false">
|
||||
// <map name="MB_CPLD_PS_REGMAP"/>
|
||||
// <map name="MB_CPLD_PL_REGMAP"/>
|
||||
// </regmapcfg>
|
||||
//</top>
|
||||
//<regmap name="MB_CPLD_PS_REGMAP" readablestrobes="false" markdown="true" generatevhdl="true" ettusguidelines="true">
|
||||
// <info>
|
||||
// This register map is available using the PS CPLD SPI interface.
|
||||
// </info>
|
||||
// <group name="MB_CPLD_PS_WINDOWS">
|
||||
// <window name="PS_REGISTERS" offset="0x00" size="0x40" targetregmap="PS_CPLD_BASE_REGMAP"/>
|
||||
// <window name="RECONFIG" offset="0x40" size="0x20" targetregmap="RECONFIG_REGMAP"/>
|
||||
// <window name="POWER_REGISTERS" offset="0x60" size="0x20" targetregmap="PS_POWER_REGMAP"/>
|
||||
// </group>
|
||||
// <group name="PS_SPI_ENDPOINTS">
|
||||
// <enumeratedtype name="SPI_ENDPOINT">
|
||||
// <value name="PS_CS_MB_CPLD" integer="0"/>
|
||||
// <value name="PS_CS_LMK32" integer="1"/>
|
||||
// <value name="PS_CS_TPM" integer="2"/>
|
||||
// <value name="PS_CS_PHASE_DAC" integer="3"/>
|
||||
// <value name="PS_CS_DB0_CAL_EEPROM" integer="4"/>
|
||||
// <value name="PS_CS_DB1_CAL_EEPROM" integer="5"/>
|
||||
// <value name="PS_CS_CLK_AUX_DB" integer="6"/>
|
||||
// <value name="PS_CS_IDLE" integer="7"/>
|
||||
// </enumeratedtype>
|
||||
// </group>
|
||||
//</regmap>
|
||||
//<regmap name="MB_CPLD_PL_REGMAP" readablestrobes="false" markdown="true" generatevhdl="true" ettusguidelines="true">
|
||||
// <info>
|
||||
// This register map is available using the PL CPLD SPI interface.
|
||||
// All protocol masters controller by this register map are running with a clock frequency of 50 MHz.
|
||||
// </info>
|
||||
// <group name="MB_CPLD_PL_WINDOWS">
|
||||
// <window name="PL_REGISTERS" offset="0x0" size="0x40" targetregmap="PL_CPLD_BASE_REGMAP"/>
|
||||
// <window name="PL_DB0_LED_REGISTERS" offset="0x50" size="0x10" targetregmap="LED_SETUP_REGMAP"/>
|
||||
// <window name="PL_DB1_LED_REGISTERS" offset="0x60" size="0x10" targetregmap="LED_SETUP_REGMAP"/>
|
||||
// </group>
|
||||
//</regmap>
|
||||
//<regmap name="CONSTANTS_REGMAP" readablestrobes="false" generatevhdl="true" ettusguidelines="true">
|
||||
// <group name="CONSTANTS_GROUP">
|
||||
// <info>
|
||||
// Basic registers containing version and capabilities information.
|
||||
// </info>
|
||||
|
||||
// <enumeratedtype name="CONSTANTS_ENUM" showhexvalue="true">
|
||||
// <info>
|
||||
// This enumeration is used to create the constants held in the basic registers.
|
||||
// </info>
|
||||
// <value name="PS_CPLD_SIGNATURE" integer="0x0A522D28"/>
|
||||
// <value name="PL_CPLD_SIGNATURE" integer="0x3FDC5C47"/>
|
||||
// <value name="CPLD_REVISION" integer="0x22080414"/>
|
||||
// <value name="OLDEST_CPLD_REVISION" integer="0x22080414"/>
|
||||
// </enumeratedtype>
|
||||
// </group>
|
||||
//</regmap>
|
||||
//XmlParse xml_off
|
||||
@@ -0,0 +1,30 @@
|
||||
# -------------------------------------------------------------------------- #
|
||||
#
|
||||
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||
# Your use of Intel Corporation's design tools, logic functions
|
||||
# and other software and tools, and its AMPP partner logic
|
||||
# functions, and any output files from any of the foregoing
|
||||
# (including device programming or simulation files), and any
|
||||
# associated documentation or information are expressly subject
|
||||
# to the terms and conditions of the Intel Program License
|
||||
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||
# the Intel FPGA IP License Agreement, or other applicable license
|
||||
# agreement, including, without limitation, that your use is for
|
||||
# the sole purpose of programming logic devices manufactured by
|
||||
# Intel and sold by Intel or its authorized distributors. Please
|
||||
# refer to the applicable agreement for further details.
|
||||
#
|
||||
# -------------------------------------------------------------------------- #
|
||||
#
|
||||
# Quartus Prime
|
||||
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
||||
# Date created = 13:40:17 August 15, 2019
|
||||
#
|
||||
# -------------------------------------------------------------------------- #
|
||||
|
||||
QUARTUS_VERSION = "18.1"
|
||||
DATE = "13:40:17 August 15, 2019"
|
||||
|
||||
# Revisions
|
||||
|
||||
PROJECT_REVISION = "mb_cpld"
|
||||
@@ -0,0 +1,416 @@
|
||||
# -------------------------------------------------------------------------- #
|
||||
#
|
||||
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||
# Your use of Intel Corporation's design tools, logic functions
|
||||
# and other software and tools, and its AMPP partner logic
|
||||
# functions, and any output files from any of the foregoing
|
||||
# (including device programming or simulation files), and any
|
||||
# associated documentation or information are expressly subject
|
||||
# to the terms and conditions of the Intel Program License
|
||||
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||
# the Intel FPGA IP License Agreement, or other applicable license
|
||||
# agreement, including, without limitation, that your use is for
|
||||
# the sole purpose of programming logic devices manufactured by
|
||||
# Intel and sold by Intel or its authorized distributors. Please
|
||||
# refer to the applicable agreement for further details.
|
||||
#
|
||||
# -------------------------------------------------------------------------- #
|
||||
#
|
||||
# Quartus Prime
|
||||
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
||||
# Date created = 12:02:17 February 20, 2019
|
||||
#
|
||||
# -------------------------------------------------------------------------- #
|
||||
#
|
||||
# Notes:
|
||||
#
|
||||
# 1) The default values for assignments are stored in the file:
|
||||
# TopCpld_assignment_defaults.qdf
|
||||
# If this file doesn't exist, see file:
|
||||
# assignment_defaults.qdf
|
||||
#
|
||||
# 2) Altera recommends that you do not modify this file. This
|
||||
# file is updated automatically by the Quartus Prime software
|
||||
# and any changes you make may be lost or overwritten.
|
||||
#
|
||||
# -------------------------------------------------------------------------- #
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# Project properties/settings
|
||||
#--------------------------------------------------------------------------
|
||||
set_global_assignment -name FAMILY "MAX 10"
|
||||
set_global_assignment -name DEVICE 10M04SAU169I7G
|
||||
set_global_assignment -name TOP_LEVEL_ENTITY mb_cpld
|
||||
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.0
|
||||
set_global_assignment -name PROJECT_CREATION_TIME_DATE "12:02:17 FEBRUARY 20, 2019"
|
||||
set_global_assignment -name LAST_QUARTUS_VERSION "20.1.0 Standard Edition"
|
||||
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
|
||||
set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40"
|
||||
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100
|
||||
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256
|
||||
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
|
||||
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
|
||||
set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER ON
|
||||
set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE "12.5 %"
|
||||
set_global_assignment -name ENABLE_OCT_DONE OFF
|
||||
set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF
|
||||
set_global_assignment -name ENABLE_JTAG_PIN_SHARING ON
|
||||
set_global_assignment -name GENERATE_SVF_FILE OFF
|
||||
set_global_assignment -name USE_CONFIGURATION_DEVICE OFF
|
||||
set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF
|
||||
set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise
|
||||
set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall
|
||||
set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise
|
||||
set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall
|
||||
|
||||
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
|
||||
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
|
||||
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
|
||||
|
||||
set_global_assignment -name NUM_PARALLEL_PROCESSORS 2
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# Pin constraints
|
||||
#--------------------------------------------------------------------------
|
||||
|
||||
# Clocking.
|
||||
#------------------------------------------
|
||||
|
||||
# CPLD's PLL reference clock.
|
||||
set_location_assignment PIN_H6 -to PLL_REF_CLK
|
||||
set_location_assignment PIN_G5 -to "PLL_REF_CLK(n)"
|
||||
set_instance_assignment -name IO_STANDARD "DIFFERENTIAL LVPECL" -to PLL_REF_CLK
|
||||
|
||||
# Reliable clock (100 MHz).
|
||||
set_location_assignment PIN_H4 -to CLK_100
|
||||
set_location_assignment PIN_H5 -to "CLK_100(n)"
|
||||
set_instance_assignment -name IO_STANDARD "DIFFERENTIAL LVPECL" -to CLK_100
|
||||
|
||||
# Power supply clocks.
|
||||
set_location_assignment PIN_H8 -to PWR_SUPPLY_CLK_CORE
|
||||
set_location_assignment PIN_H9 -to PWR_SUPPLY_CLK_DDR4_S
|
||||
set_location_assignment PIN_G12 -to PWR_SUPPLY_CLK_DDR4_N
|
||||
set_location_assignment PIN_L13 -to PWR_SUPPLY_CLK_0P9V
|
||||
set_location_assignment PIN_G13 -to PWR_SUPPLY_CLK_1P8V
|
||||
set_location_assignment PIN_K10 -to PWR_SUPPLY_CLK_2P5V
|
||||
set_location_assignment PIN_J10 -to PWR_SUPPLY_CLK_3P3V
|
||||
set_location_assignment PIN_L12 -to PWR_SUPPLY_CLK_3P6V
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PWR_SUPPLY_CLK_0P9V
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PWR_SUPPLY_CLK_1P8V
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PWR_SUPPLY_CLK_2P5V
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PWR_SUPPLY_CLK_3P3V
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PWR_SUPPLY_CLK_3P6V
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PWR_SUPPLY_CLK_CORE
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PWR_SUPPLY_CLK_DDR4_N
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PWR_SUPPLY_CLK_DDR4_S
|
||||
|
||||
# Oscillator power supply
|
||||
set_location_assignment PIN_L2 -to PWR_EN_5V_OSC_100
|
||||
set_location_assignment PIN_N2 -to PWR_EN_5V_OSC_122_88
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to PWR_EN_5V_OSC_100
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to PWR_EN_5V_OSC_122_88
|
||||
|
||||
|
||||
# Interfaces from/to RFSoC.
|
||||
#------------------------------------------
|
||||
|
||||
# PL SPI slave interface.
|
||||
set_location_assignment PIN_G2 -to PL_CPLD_SCLK
|
||||
set_location_assignment PIN_F5 -to PL_CPLD_MOSI
|
||||
set_location_assignment PIN_F6 -to PL_CPLD_MISO
|
||||
set_location_assignment PIN_G1 -to PL_CPLD_CS_N[0]
|
||||
set_location_assignment PIN_G4 -to PL_CPLD_CS_N[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to PL_CPLD_SCLK
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to PL_CPLD_MOSI
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to PL_CPLD_MISO
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to PL_CPLD_CS_N[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to PL_CPLD_CS_N[1]
|
||||
|
||||
# IRQ to PL.
|
||||
set_location_assignment PIN_F4 -to PL_CPLD_IRQ
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to PL_CPLD_IRQ
|
||||
|
||||
# PS SPI slave interface.
|
||||
set_location_assignment PIN_E3 -to PS_CPLD_SCLK
|
||||
set_location_assignment PIN_E1 -to PS_CPLD_MOSI
|
||||
set_location_assignment PIN_F1 -to PS_CPLD_MISO
|
||||
set_location_assignment PIN_B1 -to PS_CPLD_CS_N[0]
|
||||
set_location_assignment PIN_C1 -to PS_CPLD_CS_N[1]
|
||||
set_location_assignment PIN_E4 -to PS_CPLD_CS_N[2]
|
||||
set_location_assignment PIN_D1 -to PS_CPLD_CS_N[3]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to PS_CPLD_SCLK
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to PS_CPLD_MOSI
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to PS_CPLD_MISO
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to PS_CPLD_CS_N[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to PS_CPLD_CS_N[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to PS_CPLD_CS_N[2]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to PS_CPLD_CS_N[3]
|
||||
|
||||
|
||||
# PL Interfaces to/from motherboard.
|
||||
#------------------------------------------
|
||||
|
||||
# White Rabbit DAC SPI master interface.
|
||||
set_location_assignment PIN_A12 -to CLK_DB_SCLK
|
||||
set_location_assignment PIN_B13 -to CLK_DB_MOSI
|
||||
set_location_assignment PIN_D12 -to CLK_DB_MISO
|
||||
set_location_assignment PIN_D9 -to CLK_DB_CS_N
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CLK_DB_SCLK
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CLK_DB_MOSI
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CLK_DB_MISO
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CLK_DB_CS_N
|
||||
|
||||
# iPASS interfaces.
|
||||
set_location_assignment PIN_A6 -to IPASS_SCL[0]
|
||||
set_location_assignment PIN_H2 -to IPASS_SCL[1]
|
||||
set_location_assignment PIN_A7 -to IPASS_SDA[0]
|
||||
set_location_assignment PIN_H3 -to IPASS_SDA[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to IPASS_SCL[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to IPASS_SCL[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to IPASS_SDA[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to IPASS_SDA[1]
|
||||
|
||||
set_location_assignment PIN_B11 -to IPASS_PRESENT_N[0]
|
||||
set_location_assignment PIN_F8 -to IPASS_PRESENT_N[1]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to IPASS_PRESENT_N[0]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to IPASS_PRESENT_N[1]
|
||||
|
||||
# QSFP LEDs.
|
||||
set_location_assignment PIN_E12 -to QSFP0_LED_ACTIVE[0]
|
||||
set_location_assignment PIN_F12 -to QSFP0_LED_ACTIVE[1]
|
||||
set_location_assignment PIN_E9 -to QSFP0_LED_ACTIVE[2]
|
||||
set_location_assignment PIN_J1 -to QSFP0_LED_ACTIVE[3]
|
||||
set_location_assignment PIN_F10 -to QSFP0_LED_LINK[0]
|
||||
set_location_assignment PIN_F9 -to QSFP0_LED_LINK[1]
|
||||
set_location_assignment PIN_N11 -to QSFP0_LED_LINK[2]
|
||||
set_location_assignment PIN_D13 -to QSFP0_LED_LINK[3]
|
||||
set_location_assignment PIN_M1 -to QSFP1_LED_ACTIVE[0]
|
||||
set_location_assignment PIN_N3 -to QSFP1_LED_ACTIVE[1]
|
||||
set_location_assignment PIN_L3 -to QSFP1_LED_ACTIVE[2]
|
||||
set_location_assignment PIN_K2 -to QSFP1_LED_ACTIVE[3]
|
||||
set_location_assignment PIN_M2 -to QSFP1_LED_LINK[0]
|
||||
set_location_assignment PIN_M3 -to QSFP1_LED_LINK[1]
|
||||
set_location_assignment PIN_K1 -to QSFP1_LED_LINK[2]
|
||||
set_location_assignment PIN_L1 -to QSFP1_LED_LINK[3]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to QSFP0_LED_ACTIVE[0]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to QSFP0_LED_ACTIVE[1]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to QSFP0_LED_ACTIVE[2]
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to QSFP0_LED_ACTIVE[3]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to QSFP0_LED_LINK[0]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to QSFP0_LED_LINK[1]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to QSFP0_LED_LINK[2]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to QSFP0_LED_LINK[3]
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to QSFP1_LED_ACTIVE[0]
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to QSFP1_LED_ACTIVE[1]
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to QSFP1_LED_ACTIVE[2]
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to QSFP1_LED_ACTIVE[3]
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to QSFP1_LED_LINK[0]
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to QSFP1_LED_LINK[1]
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to QSFP1_LED_LINK[2]
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to QSFP1_LED_LINK[3]
|
||||
|
||||
# DIO direction control.
|
||||
set_location_assignment PIN_N12 -to DIO_DIRECTION_A[0]
|
||||
set_location_assignment PIN_N10 -to DIO_DIRECTION_A[1]
|
||||
set_location_assignment PIN_N9 -to DIO_DIRECTION_A[2]
|
||||
set_location_assignment PIN_M4 -to DIO_DIRECTION_A[3]
|
||||
set_location_assignment PIN_M5 -to DIO_DIRECTION_A[4]
|
||||
set_location_assignment PIN_N4 -to DIO_DIRECTION_A[5]
|
||||
set_location_assignment PIN_N5 -to DIO_DIRECTION_A[6]
|
||||
set_location_assignment PIN_N7 -to DIO_DIRECTION_A[7]
|
||||
set_location_assignment PIN_N8 -to DIO_DIRECTION_A[8]
|
||||
set_location_assignment PIN_M8 -to DIO_DIRECTION_A[9]
|
||||
set_location_assignment PIN_M9 -to DIO_DIRECTION_A[10]
|
||||
set_location_assignment PIN_M13 -to DIO_DIRECTION_A[11]
|
||||
set_location_assignment PIN_L5 -to DIO_DIRECTION_B[0]
|
||||
set_location_assignment PIN_L4 -to DIO_DIRECTION_B[1]
|
||||
set_location_assignment PIN_K5 -to DIO_DIRECTION_B[2]
|
||||
set_location_assignment PIN_J5 -to DIO_DIRECTION_B[3]
|
||||
set_location_assignment PIN_N6 -to DIO_DIRECTION_B[4]
|
||||
set_location_assignment PIN_M7 -to DIO_DIRECTION_B[5]
|
||||
set_location_assignment PIN_J6 -to DIO_DIRECTION_B[6]
|
||||
set_location_assignment PIN_K6 -to DIO_DIRECTION_B[7]
|
||||
set_location_assignment PIN_J7 -to DIO_DIRECTION_B[8]
|
||||
set_location_assignment PIN_K7 -to DIO_DIRECTION_B[9]
|
||||
set_location_assignment PIN_M12 -to DIO_DIRECTION_B[10]
|
||||
set_location_assignment PIN_M11 -to DIO_DIRECTION_B[11]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[0]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[1]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[2]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[3]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[4]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[5]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[6]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[7]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[8]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[9]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[10]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_A[11]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[0]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[1]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[2]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[3]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[4]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[5]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[6]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[7]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[8]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[9]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[10]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to DIO_DIRECTION_B[11]
|
||||
|
||||
|
||||
# PS Interfaces to/from motherboard.
|
||||
#------------------------------------------
|
||||
|
||||
# LMK04832 SPI master interface.
|
||||
set_location_assignment PIN_J9 -to LMK32_SCLK
|
||||
set_location_assignment PIN_H13 -to LMK32_MOSI
|
||||
set_location_assignment PIN_L11 -to LMK32_MISO
|
||||
set_location_assignment PIN_J13 -to LMK32_CS_N
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to LMK32_SCLK
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to LMK32_MOSI
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to LMK32_MISO
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to LMK32_CS_N
|
||||
|
||||
# TPM 2.0 SPI master interface.
|
||||
set_location_assignment PIN_D11 -to TPM_SCLK
|
||||
set_location_assignment PIN_E10 -to TPM_MOSI
|
||||
set_location_assignment PIN_C13 -to TPM_MISO
|
||||
set_location_assignment PIN_L10 -to TPM_CS_N
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to TPM_SCLK
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to TPM_MOSI
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to TPM_MISO
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to TPM_CS_N
|
||||
|
||||
# Phase DAC SPI master interface.
|
||||
set_location_assignment PIN_K8 -to PHASE_DAC_SCLK
|
||||
set_location_assignment PIN_J8 -to PHASE_DAC_MOSI
|
||||
set_location_assignment PIN_M10 -to PHASE_DAC_CS_N
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PHASE_DAC_SCLK
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PHASE_DAC_MOSI
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PHASE_DAC_CS_N
|
||||
|
||||
# DB0 TX/RX LEDS per chan
|
||||
#-------------------------------------------
|
||||
set_location_assignment PIN_A11 -to CH0_TX_LED[0]
|
||||
set_location_assignment PIN_C10 -to CH0_RX_LED[0]
|
||||
set_location_assignment PIN_A9 -to CH0_RX2_LED[0]
|
||||
set_location_assignment PIN_E8 -to CH1_TX_LED[0]
|
||||
set_location_assignment PIN_D8 -to CH1_RX_LED[0]
|
||||
set_location_assignment PIN_A8 -to CH1_RX2_LED[0]
|
||||
set_location_assignment PIN_C9 -to CH2_TX_LED[0]
|
||||
set_location_assignment PIN_A10 -to CH2_RX_LED[0]
|
||||
set_location_assignment PIN_B10 -to CH2_RX2_LED[0]
|
||||
set_location_assignment PIN_K12 -to CH3_TX_LED[0]
|
||||
set_location_assignment PIN_K11 -to CH3_RX_LED[0]
|
||||
set_location_assignment PIN_J12 -to CH3_RX2_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH0_TX_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH0_RX_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH0_RX2_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH1_TX_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH1_RX_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH1_RX2_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH2_TX_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH2_RX_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH2_RX2_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CH3_TX_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CH3_RX_LED[0]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CH3_RX2_LED[0]
|
||||
|
||||
# DB0 TX/RX LEDS per chan
|
||||
#-------------------------------------------
|
||||
set_location_assignment PIN_D6 -to CH0_TX_LED[1]
|
||||
set_location_assignment PIN_E6 -to CH0_RX_LED[1]
|
||||
set_location_assignment PIN_A4 -to CH0_RX2_LED[1]
|
||||
set_location_assignment PIN_A5 -to CH1_TX_LED[1]
|
||||
set_location_assignment PIN_A3 -to CH1_RX_LED[1]
|
||||
set_location_assignment PIN_B2 -to CH1_RX2_LED[1]
|
||||
set_location_assignment PIN_B3 -to CH2_TX_LED[1]
|
||||
set_location_assignment PIN_B6 -to CH2_RX_LED[1]
|
||||
set_location_assignment PIN_B5 -to CH2_RX2_LED[1]
|
||||
set_location_assignment PIN_E13 -to CH3_TX_LED[1]
|
||||
set_location_assignment PIN_G10 -to CH3_RX_LED[1]
|
||||
set_location_assignment PIN_G9 -to CH3_RX2_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH0_TX_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH0_RX_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH0_RX2_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH1_TX_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH1_RX_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH1_RX2_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH2_TX_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH2_RX_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "1.8-V" -to CH2_RX2_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CH3_TX_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CH3_RX_LED[1]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CH3_RX2_LED[1]
|
||||
|
||||
# Miscellaneous.
|
||||
#------------------------------------------
|
||||
|
||||
# Power supply clocks switch.
|
||||
set_location_assignment PIN_J2 -to PS_CLK_ON_CPLD
|
||||
set_instance_assignment -name IO_STANDARD "2.5 V" -to PS_CLK_ON_CPLD
|
||||
|
||||
# iPASS misc.
|
||||
set_location_assignment PIN_B12 -to IPASS_POWER_DISABLE
|
||||
set_location_assignment PIN_C11 -to IPASS_POWER_EN_FAULT[0]
|
||||
set_location_assignment PIN_C12 -to IPASS_POWER_EN_FAULT[1]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to IPASS_POWER_DISABLE
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to IPASS_POWER_EN_FAULT[0]
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to IPASS_POWER_EN_FAULT[1]
|
||||
|
||||
# PCIe reset to FPGA.
|
||||
set_location_assignment PIN_A2 -to PCIE_RESET
|
||||
set_instance_assignment -name IO_STANDARD "1.8 V" -to PCIE_RESET
|
||||
|
||||
# TPM reset.
|
||||
set_location_assignment PIN_K13 -to TPM_RESET_n
|
||||
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to TPM_RESET_n
|
||||
|
||||
# File list.
|
||||
set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 00000000
|
||||
set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "SINGLE COMP IMAGE"
|
||||
set_global_assignment -name EN_USER_IO_WEAK_PULLUP OFF
|
||||
set_global_assignment -name EN_SPI_IO_WEAK_PULLUP OFF
|
||||
|
||||
set_global_assignment -name VHDL_FILE ../ip/cmi/PcieCmiWrapper.vhd
|
||||
set_global_assignment -name VHDL_FILE ../ip/cmi/PcieCmi.vhd
|
||||
set_global_assignment -name QSYS_FILE ../ip/clkctrl/clkctrl.qsys
|
||||
set_global_assignment -name QSYS_FILE ../ip/on_chip_flash/on_chip_flash.qsys
|
||||
set_global_assignment -name SDC_FILE ../common/common.sdc
|
||||
set_global_assignment -name SDC_FILE ../x440/mb_cpld.sdc
|
||||
set_global_assignment -name VERILOG_FILE ../x440/mb_cpld.v
|
||||
set_global_assignment -name VERILOG_FILE ../x440/led_control.v
|
||||
set_global_assignment -name VERILOG_FILE ../common/reconfig_engine.v
|
||||
set_global_assignment -name VERILOG_FILE ../common/ctrlport_to_spi.v
|
||||
set_global_assignment -name VERILOG_FILE ../common/pl_cpld_regs.v
|
||||
set_global_assignment -name VERILOG_FILE ../common/pwr_supply_clk_gen.v
|
||||
set_global_assignment -name VERILOG_FILE ../common/ps_cpld_regs.v
|
||||
set_global_assignment -name VERILOG_FILE ../common/ps_power_regs.v
|
||||
set_global_assignment -name VERILOG_FILE ../common/reset_generator.v
|
||||
set_global_assignment -name VERILOG_FILE ../common/spi_slave_to_ctrlport_master.v
|
||||
set_global_assignment -name VERILOG_FILE ../common/spi_slave.v
|
||||
set_global_assignment -name QIP_FILE ../ip/pll/pll.qip
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/control/synchronizer_impl.v
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/control/synchronizer.v
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/rfnoc/utils/ctrlport_splitter.v
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/rfnoc/utils/ctrlport_terminator.v
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/wb_spi/rtl/verilog/spi_top.v
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/wb_spi/rtl/verilog/spi_shift.v
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/wb_spi/rtl/verilog/spi_defines.v
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/wb_spi/rtl/verilog/spi_clgen.v
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/control/pulse_synchronizer.v
|
||||
set_global_assignment -name VERILOG_FILE ../../../../lib/control/handshake.v
|
||||
set_global_assignment -name VHDL_FILE ../../../../lib/vivado_ipi/axi_bitq/bitq_fsm.vhd
|
||||
set_global_assignment -name VHDL_FILE ../../../../lib/vivado_ipi/axi_bitq/axi_bitq.vhd
|
||||
set_global_assignment -name SOURCE_FILE db/mb_cpld.cmp.rdb
|
||||
set_global_assignment -name PARTITION_NETLIST_TYPE POST_FIT -section_id "PcieCmi:PcieCmix"
|
||||
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id "PcieCmi:PcieCmix"
|
||||
set_global_assignment -name PARTITION_COLOR 52377 -section_id "PcieCmi:PcieCmix"
|
||||
set_global_assignment -name PARTITION_IMPORT_FILE ../../ip/cmi/PcieCmi.qxp -section_id "PcieCmi:PcieCmix"
|
||||
set_global_assignment -name PARTITION_LAST_IMPORTED_FILE ip/cmi/PcieCmi.qxp -section_id "PcieCmi:PcieCmix"
|
||||
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
||||
set_instance_assignment -name PARTITION_HIERARCHY pciec_5b6b1 -to "PcieCmiWrapper:pcie_cmi_inst|PcieCmi:PcieCmix" -section_id "PcieCmi:PcieCmix"
|
||||
Reference in New Issue
Block a user