fmcadc2: Parameterize JESD204 configuration values
Add the capability to set the JESD204 configuration values from a single point in the code and to modify these default settings from the command line. Signed-off-by: Dan Hotoleanu <dan.hotoleanu@analog.com>main
parent
13a282d9c4
commit
fb17147eb4
|
@ -1,14 +1,21 @@
|
||||||
|
#
|
||||||
|
# Parameter description:
|
||||||
|
# RX_JESD_M : Number of converters per link
|
||||||
|
# RX_JESD_L : Number of lanes per link
|
||||||
|
# RX_JESD_S : Number of samples per frame
|
||||||
|
# RX_JESD_NP : Number of bits per sample
|
||||||
|
#
|
||||||
|
|
||||||
source $ad_hdl_dir/library/jesd204/scripts/jesd204.tcl
|
source $ad_hdl_dir/library/jesd204/scripts/jesd204.tcl
|
||||||
|
|
||||||
# JESD204B interface configuration parameters
|
# JESD204B interface configuration parameters
|
||||||
set RX_NUM_OF_LANES 8
|
set RX_NUM_OF_LANES $ad_project_params(RX_JESD_L)
|
||||||
set RX_NUM_OF_CONVERTERS 1
|
set RX_NUM_OF_CONVERTERS $ad_project_params(RX_JESD_M)
|
||||||
set RX_SAMPLES_PER_FRAME 4
|
set RX_SAMPLES_PER_FRAME $ad_project_params(RX_JESD_S)
|
||||||
set RX_SAMPLE_WIDTH 16
|
set RX_SAMPLE_WIDTH $ad_project_params(RX_JESD_NP)
|
||||||
|
|
||||||
set adc_fifo_name axi_ad9625_fifo
|
set adc_fifo_name axi_ad9625_fifo
|
||||||
set adc_data_width 256
|
set adc_data_width [expr 32*$RX_NUM_OF_LANES]
|
||||||
set adc_dma_data_width 64
|
set adc_dma_data_width 64
|
||||||
|
|
||||||
# adc peripherals
|
# adc peripherals
|
||||||
|
@ -18,10 +25,10 @@ adi_tpl_jesd204_rx_create axi_ad9625_core $RX_NUM_OF_LANES \
|
||||||
$RX_SAMPLES_PER_FRAME \
|
$RX_SAMPLES_PER_FRAME \
|
||||||
$RX_SAMPLE_WIDTH \
|
$RX_SAMPLE_WIDTH \
|
||||||
|
|
||||||
adi_axi_jesd204_rx_create axi_ad9625_jesd 8
|
adi_axi_jesd204_rx_create axi_ad9625_jesd $RX_NUM_OF_LANES
|
||||||
|
|
||||||
ad_ip_instance axi_adxcvr axi_ad9625_xcvr
|
ad_ip_instance axi_adxcvr axi_ad9625_xcvr
|
||||||
ad_ip_parameter axi_ad9625_xcvr CONFIG.NUM_OF_LANES 8
|
ad_ip_parameter axi_ad9625_xcvr CONFIG.NUM_OF_LANES $RX_NUM_OF_LANES
|
||||||
ad_ip_parameter axi_ad9625_xcvr CONFIG.QPLL_ENABLE 0
|
ad_ip_parameter axi_ad9625_xcvr CONFIG.QPLL_ENABLE 0
|
||||||
ad_ip_parameter axi_ad9625_xcvr CONFIG.TX_OR_RX_N 0
|
ad_ip_parameter axi_ad9625_xcvr CONFIG.TX_OR_RX_N 0
|
||||||
ad_ip_parameter axi_ad9625_xcvr CONFIG.LPM_OR_DFE_N 1
|
ad_ip_parameter axi_ad9625_xcvr CONFIG.LPM_OR_DFE_N 1
|
||||||
|
@ -47,7 +54,7 @@ ad_ip_instance util_adxcvr util_fmcadc2_xcvr
|
||||||
ad_ip_parameter util_fmcadc2_xcvr CONFIG.QPLL_FBDIV 0x80 ;# N = 40
|
ad_ip_parameter util_fmcadc2_xcvr CONFIG.QPLL_FBDIV 0x80 ;# N = 40
|
||||||
ad_ip_parameter util_fmcadc2_xcvr CONFIG.CPLL_FBDIV 1
|
ad_ip_parameter util_fmcadc2_xcvr CONFIG.CPLL_FBDIV 1
|
||||||
ad_ip_parameter util_fmcadc2_xcvr CONFIG.TX_NUM_OF_LANES 0
|
ad_ip_parameter util_fmcadc2_xcvr CONFIG.TX_NUM_OF_LANES 0
|
||||||
ad_ip_parameter util_fmcadc2_xcvr CONFIG.RX_NUM_OF_LANES 8
|
ad_ip_parameter util_fmcadc2_xcvr CONFIG.RX_NUM_OF_LANES $RX_NUM_OF_LANES
|
||||||
ad_ip_parameter util_fmcadc2_xcvr CONFIG.RX_OUT_DIV 1
|
ad_ip_parameter util_fmcadc2_xcvr CONFIG.RX_OUT_DIV 1
|
||||||
ad_ip_parameter util_fmcadc2_xcvr CONFIG.RX_CLK25_DIV 25
|
ad_ip_parameter util_fmcadc2_xcvr CONFIG.RX_CLK25_DIV 25
|
||||||
ad_ip_parameter util_fmcadc2_xcvr CONFIG.RX_DFE_LPM_CFG 0x0904
|
ad_ip_parameter util_fmcadc2_xcvr CONFIG.RX_DFE_LPM_CFG 0x0904
|
||||||
|
@ -108,3 +115,8 @@ ad_mem_hp2_interconnect $sys_cpu_clk axi_ad9625_dma/m_dest_axi
|
||||||
ad_cpu_interrupt ps-12 mb-13 axi_ad9625_jesd/irq
|
ad_cpu_interrupt ps-12 mb-13 axi_ad9625_jesd/irq
|
||||||
ad_cpu_interrupt ps-13 mb-12 axi_ad9625_dma/irq
|
ad_cpu_interrupt ps-13 mb-12 axi_ad9625_dma/irq
|
||||||
|
|
||||||
|
# Create dummy outputs for unused Rx lanes
|
||||||
|
for {set i $RX_NUM_OF_LANES} {$i < 8} {incr i} {
|
||||||
|
create_bd_port -dir I rx_data_${i}_n
|
||||||
|
create_bd_port -dir I rx_data_${i}_p
|
||||||
|
}
|
||||||
|
|
|
@ -5,7 +5,27 @@ source ../../scripts/adi_env.tcl
|
||||||
source $ad_hdl_dir/projects/scripts/adi_project_xilinx.tcl
|
source $ad_hdl_dir/projects/scripts/adi_project_xilinx.tcl
|
||||||
source $ad_hdl_dir/projects/scripts/adi_board.tcl
|
source $ad_hdl_dir/projects/scripts/adi_board.tcl
|
||||||
|
|
||||||
adi_project fmcadc2_vc707
|
# get_env_param retrieves parameter value from the environment if exists,
|
||||||
|
# other case use the default value
|
||||||
|
#
|
||||||
|
# Use over-writable parameters from the environment.
|
||||||
|
#
|
||||||
|
# e.g.
|
||||||
|
# make RX_JESD_L=8
|
||||||
|
|
||||||
|
# Parameter description:
|
||||||
|
# RX_JESD_M : Number of converters per link
|
||||||
|
# RX_JESD_L : Number of lanes per link
|
||||||
|
# RX_JESD_S : Number of samples per frame
|
||||||
|
# RX_JESD_NP : Number of bits per sample
|
||||||
|
|
||||||
|
adi_project fmcadc2_vc707 0 [list \
|
||||||
|
RX_JESD_M [get_env_param RX_JESD_M 1 ] \
|
||||||
|
RX_JESD_L [get_env_param RX_JESD_L 8 ] \
|
||||||
|
RX_JESD_S [get_env_param RX_JESD_S 4 ] \
|
||||||
|
RX_JESD_NP [get_env_param RX_JESD_NP 16] \
|
||||||
|
]
|
||||||
|
|
||||||
adi_project_files fmcadc2_vc707 [list \
|
adi_project_files fmcadc2_vc707 [list \
|
||||||
"../common/fmcadc2_spi.v" \
|
"../common/fmcadc2_spi.v" \
|
||||||
"system_top.v" \
|
"system_top.v" \
|
||||||
|
|
|
@ -35,7 +35,9 @@
|
||||||
|
|
||||||
`timescale 1ns/100ps
|
`timescale 1ns/100ps
|
||||||
|
|
||||||
module system_top (
|
module system_top #(
|
||||||
|
parameter RX_JESD_L = 8
|
||||||
|
) (
|
||||||
|
|
||||||
input sys_rst,
|
input sys_rst,
|
||||||
input sys_clk_p,
|
input sys_clk_p,
|
||||||
|
@ -93,8 +95,8 @@ module system_top (
|
||||||
output rx_sysref_n,
|
output rx_sysref_n,
|
||||||
output rx_sync_p,
|
output rx_sync_p,
|
||||||
output rx_sync_n,
|
output rx_sync_n,
|
||||||
input [ 7:0] rx_data_p,
|
input [RX_JESD_L-1:0] rx_data_p,
|
||||||
input [ 7:0] rx_data_n,
|
input [RX_JESD_L-1:0] rx_data_n,
|
||||||
|
|
||||||
inout adc_irq,
|
inout adc_irq,
|
||||||
inout adc_fd,
|
inout adc_fd,
|
||||||
|
@ -120,6 +122,8 @@ module system_top (
|
||||||
wire rx_sync;
|
wire rx_sync;
|
||||||
wire rx_sysref;
|
wire rx_sysref;
|
||||||
wire rx_clk;
|
wire rx_clk;
|
||||||
|
wire [ 7:0] rx_data_p_loc;
|
||||||
|
wire [ 7:0] rx_data_n_loc;
|
||||||
|
|
||||||
// default logic
|
// default logic
|
||||||
|
|
||||||
|
@ -217,22 +221,22 @@ module system_top (
|
||||||
.mgt_clk_clk_p (mgt_clk_p),
|
.mgt_clk_clk_p (mgt_clk_p),
|
||||||
.phy_rstn (phy_rstn),
|
.phy_rstn (phy_rstn),
|
||||||
.phy_sd (1'b1),
|
.phy_sd (1'b1),
|
||||||
.rx_data_0_n (rx_data_n[0]),
|
.rx_data_0_n (rx_data_n_loc[0]),
|
||||||
.rx_data_0_p (rx_data_p[0]),
|
.rx_data_0_p (rx_data_p_loc[0]),
|
||||||
.rx_data_1_n (rx_data_n[1]),
|
.rx_data_1_n (rx_data_n_loc[1]),
|
||||||
.rx_data_1_p (rx_data_p[1]),
|
.rx_data_1_p (rx_data_p_loc[1]),
|
||||||
.rx_data_2_n (rx_data_n[2]),
|
.rx_data_2_n (rx_data_n_loc[2]),
|
||||||
.rx_data_2_p (rx_data_p[2]),
|
.rx_data_2_p (rx_data_p_loc[2]),
|
||||||
.rx_data_3_n (rx_data_n[3]),
|
.rx_data_3_n (rx_data_n_loc[3]),
|
||||||
.rx_data_3_p (rx_data_p[3]),
|
.rx_data_3_p (rx_data_p_loc[3]),
|
||||||
.rx_data_4_n (rx_data_n[4]),
|
.rx_data_4_n (rx_data_n_loc[4]),
|
||||||
.rx_data_4_p (rx_data_p[4]),
|
.rx_data_4_p (rx_data_p_loc[4]),
|
||||||
.rx_data_5_n (rx_data_n[5]),
|
.rx_data_5_n (rx_data_n_loc[5]),
|
||||||
.rx_data_5_p (rx_data_p[5]),
|
.rx_data_5_p (rx_data_p_loc[5]),
|
||||||
.rx_data_6_n (rx_data_n[6]),
|
.rx_data_6_n (rx_data_n_loc[6]),
|
||||||
.rx_data_6_p (rx_data_p[6]),
|
.rx_data_6_p (rx_data_p_loc[6]),
|
||||||
.rx_data_7_n (rx_data_n[7]),
|
.rx_data_7_n (rx_data_n_loc[7]),
|
||||||
.rx_data_7_p (rx_data_p[7]),
|
.rx_data_7_p (rx_data_p_loc[7]),
|
||||||
.rx_ref_clk_0 (rx_ref_clk),
|
.rx_ref_clk_0 (rx_ref_clk),
|
||||||
.rx_sync_0 (rx_sync),
|
.rx_sync_0 (rx_sync),
|
||||||
.rx_sysref_0 (rx_sysref),
|
.rx_sysref_0 (rx_sysref),
|
||||||
|
@ -254,6 +258,9 @@ module system_top (
|
||||||
.uart_sin (uart_sin),
|
.uart_sin (uart_sin),
|
||||||
.uart_sout (uart_sout));
|
.uart_sout (uart_sout));
|
||||||
|
|
||||||
|
assign rx_data_p_loc[RX_JESD_L-1:0] = rx_data_p[RX_JESD_L-1:0];
|
||||||
|
assign rx_data_n_loc[RX_JESD_L-1:0] = rx_data_n[RX_JESD_L-1:0];
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
|
|
|
@ -3,7 +3,27 @@ source ../../scripts/adi_env.tcl
|
||||||
source $ad_hdl_dir/projects/scripts/adi_project_xilinx.tcl
|
source $ad_hdl_dir/projects/scripts/adi_project_xilinx.tcl
|
||||||
source $ad_hdl_dir/projects/scripts/adi_board.tcl
|
source $ad_hdl_dir/projects/scripts/adi_board.tcl
|
||||||
|
|
||||||
adi_project fmcadc2_zc706
|
# get_env_param retrieves parameter value from the environment if exists,
|
||||||
|
# other case use the default value
|
||||||
|
#
|
||||||
|
# Use over-writable parameters from the environment.
|
||||||
|
#
|
||||||
|
# e.g.
|
||||||
|
# make RX_JESD_L=8
|
||||||
|
|
||||||
|
# Parameter description:
|
||||||
|
# RX_JESD_M : Number of converters per link
|
||||||
|
# RX_JESD_L : Number of lanes per link
|
||||||
|
# RX_JESD_S : Number of samples per frame
|
||||||
|
# RX_JESD_NP : Number of bits per sample
|
||||||
|
|
||||||
|
adi_project fmcadc2_zc706 0 [list \
|
||||||
|
RX_JESD_M [get_env_param RX_JESD_M 1 ] \
|
||||||
|
RX_JESD_L [get_env_param RX_JESD_L 8 ] \
|
||||||
|
RX_JESD_S [get_env_param RX_JESD_S 4 ] \
|
||||||
|
RX_JESD_NP [get_env_param RX_JESD_NP 16] \
|
||||||
|
]
|
||||||
|
|
||||||
adi_project_files fmcadc2_zc706 [list \
|
adi_project_files fmcadc2_zc706 [list \
|
||||||
"../common/fmcadc2_spi.v" \
|
"../common/fmcadc2_spi.v" \
|
||||||
"system_top.v" \
|
"system_top.v" \
|
||||||
|
@ -13,4 +33,4 @@ adi_project_files fmcadc2_zc706 [list \
|
||||||
"$ad_hdl_dir/projects/common/zc706/zc706_plddr3_constr.xdc" \
|
"$ad_hdl_dir/projects/common/zc706/zc706_plddr3_constr.xdc" \
|
||||||
"$ad_hdl_dir/projects/common/zc706/zc706_system_constr.xdc" ]
|
"$ad_hdl_dir/projects/common/zc706/zc706_system_constr.xdc" ]
|
||||||
|
|
||||||
adi_project_run fmcadc2_zc706
|
adi_project_run fmcadc2_zc706
|
||||||
|
|
|
@ -35,7 +35,9 @@
|
||||||
|
|
||||||
`timescale 1ns/100ps
|
`timescale 1ns/100ps
|
||||||
|
|
||||||
module system_top (
|
module system_top #(
|
||||||
|
parameter RX_JESD_L = 8
|
||||||
|
) (
|
||||||
|
|
||||||
inout [14:0] ddr_addr,
|
inout [14:0] ddr_addr,
|
||||||
inout [ 2:0] ddr_ba,
|
inout [ 2:0] ddr_ba,
|
||||||
|
@ -99,8 +101,8 @@ module system_top (
|
||||||
output rx_sysref_n,
|
output rx_sysref_n,
|
||||||
output rx_sync_p,
|
output rx_sync_p,
|
||||||
output rx_sync_n,
|
output rx_sync_n,
|
||||||
input [ 7:0] rx_data_p,
|
input [RX_JESD_L-1:0] rx_data_p,
|
||||||
input [ 7:0] rx_data_n,
|
input [RX_JESD_L-1:0] rx_data_n,
|
||||||
|
|
||||||
inout adc_irq,
|
inout adc_irq,
|
||||||
inout adc_fd,
|
inout adc_fd,
|
||||||
|
@ -131,6 +133,8 @@ module system_top (
|
||||||
wire rx_sync;
|
wire rx_sync;
|
||||||
wire rx_clk;
|
wire rx_clk;
|
||||||
wire rx_sysref;
|
wire rx_sysref;
|
||||||
|
wire [7:0] rx_data_p_loc;
|
||||||
|
wire [7:0] rx_data_n_loc;
|
||||||
|
|
||||||
// instantiations
|
// instantiations
|
||||||
|
|
||||||
|
@ -235,22 +239,22 @@ module system_top (
|
||||||
.hdmi_vsync (hdmi_vsync),
|
.hdmi_vsync (hdmi_vsync),
|
||||||
.iic_main_scl_io (iic_scl),
|
.iic_main_scl_io (iic_scl),
|
||||||
.iic_main_sda_io (iic_sda),
|
.iic_main_sda_io (iic_sda),
|
||||||
.rx_data_0_n (rx_data_n[0]),
|
.rx_data_0_n (rx_data_n_loc[0]),
|
||||||
.rx_data_0_p (rx_data_p[0]),
|
.rx_data_0_p (rx_data_p_loc[0]),
|
||||||
.rx_data_1_n (rx_data_n[1]),
|
.rx_data_1_n (rx_data_n_loc[1]),
|
||||||
.rx_data_1_p (rx_data_p[1]),
|
.rx_data_1_p (rx_data_p_loc[1]),
|
||||||
.rx_data_2_n (rx_data_n[2]),
|
.rx_data_2_n (rx_data_n_loc[2]),
|
||||||
.rx_data_2_p (rx_data_p[2]),
|
.rx_data_2_p (rx_data_p_loc[2]),
|
||||||
.rx_data_3_n (rx_data_n[3]),
|
.rx_data_3_n (rx_data_n_loc[3]),
|
||||||
.rx_data_3_p (rx_data_p[3]),
|
.rx_data_3_p (rx_data_p_loc[3]),
|
||||||
.rx_data_4_n (rx_data_n[4]),
|
.rx_data_4_n (rx_data_n_loc[4]),
|
||||||
.rx_data_4_p (rx_data_p[4]),
|
.rx_data_4_p (rx_data_p_loc[4]),
|
||||||
.rx_data_5_n (rx_data_n[5]),
|
.rx_data_5_n (rx_data_n_loc[5]),
|
||||||
.rx_data_5_p (rx_data_p[5]),
|
.rx_data_5_p (rx_data_p_loc[5]),
|
||||||
.rx_data_6_n (rx_data_n[6]),
|
.rx_data_6_n (rx_data_n_loc[6]),
|
||||||
.rx_data_6_p (rx_data_p[6]),
|
.rx_data_6_p (rx_data_p_loc[6]),
|
||||||
.rx_data_7_n (rx_data_n[7]),
|
.rx_data_7_n (rx_data_n_loc[7]),
|
||||||
.rx_data_7_p (rx_data_p[7]),
|
.rx_data_7_p (rx_data_p_loc[7]),
|
||||||
.rx_ref_clk_0 (rx_ref_clk),
|
.rx_ref_clk_0 (rx_ref_clk),
|
||||||
.rx_sync_0 (rx_sync),
|
.rx_sync_0 (rx_sync),
|
||||||
.rx_sysref_0 (rx_sysref),
|
.rx_sysref_0 (rx_sysref),
|
||||||
|
@ -278,6 +282,9 @@ module system_top (
|
||||||
.sys_clk_clk_p (sys_clk_p),
|
.sys_clk_clk_p (sys_clk_p),
|
||||||
.sys_rst (sys_rst));
|
.sys_rst (sys_rst));
|
||||||
|
|
||||||
|
assign rx_data_p_loc[RX_JESD_L-1:0] = rx_data_p[RX_JESD_L-1:0];
|
||||||
|
assign rx_data_n_loc[RX_JESD_L-1:0] = rx_data_n[RX_JESD_L-1:0];
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
|
|
Loading…
Reference in New Issue