From a2082192e02b82e8e4638238bb906bb9999895ad Mon Sep 17 00:00:00 2001 From: Jonathan Hargreaves <hargreaves@jive.eu> Date: Wed, 12 Feb 2020 11:27:54 +0100 Subject: [PATCH] Fixed errors from EK review of merge request 4 --- .../lofar2_unb2b_adc_full/hdllib.cfg | 4 +- .../lofar2_unb2b_adc_full.vhd | 2 +- .../quartus/lofar2_unb2b_adc_full.sdc | 1 - .../quartus/lofar2_unb2b_adc_full_pins.tcl | 23 ---- .../lofar2_unb2b_adc_one_node/hdllib.cfg | 5 +- .../lofar2_unb2b_adc_one_node.vhd | 2 +- .../quartus/lofar2_unb2b_adc_one_node.sdc | 1 - .../lofar2_unb2b_adc_one_node_pins.tcl | 23 ---- .../src/vhdl/lofar2_unb2b_adc.vhd | 106 +++++++++++++++++- .../src/vhdl/lofar2_unb2b_adc_pkg.vhd | 22 ++-- 10 files changed, 119 insertions(+), 70 deletions(-) delete mode 100644 applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/quartus/lofar2_unb2b_adc_full.sdc delete mode 100644 applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/quartus/lofar2_unb2b_adc_full_pins.tcl delete mode 100644 applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/quartus/lofar2_unb2b_adc_one_node.sdc delete mode 100644 applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/quartus/lofar2_unb2b_adc_one_node_pins.tcl diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/hdllib.cfg index 1cbac2db80..ce325a8640 100644 --- a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/hdllib.cfg @@ -27,13 +27,13 @@ quartus_qsf_files = $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2c_board/quartus/unb2c_board.qsf quartus_sdc_pre_files = - quartus/lofar_unb2b_adc_full.sdc + ../../quartus/lofar_unb2b_adc.sdc quartus_sdc_files = $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc quartus_tcl_files = - quartus/lofar_unb2b_adc_full_pins.tcl + ../../quartus/lofar_unb2b_adc_pins.tcl quartus_vhdl_files = diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/lofar2_unb2b_adc_full.vhd b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/lofar2_unb2b_adc_full.vhd index 77466af45d..bc8c1b2659 100644 --- a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/lofar2_unb2b_adc_full.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/lofar2_unb2b_adc_full.vhd @@ -85,7 +85,7 @@ ARCHITECTURE str OF lofar2_unb2b_adc_full IS BEGIN - u_revision : ENTITY unb2b_test_lib.unb2b_test + u_revision : ENTITY lofar2_unb2b_adc_lib.lofar2_unb2b_adc GENERIC MAP ( g_design_name => g_design_name, g_design_note => g_design_note, diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/quartus/lofar2_unb2b_adc_full.sdc b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/quartus/lofar2_unb2b_adc_full.sdc deleted file mode 100644 index e0a8d1b581..0000000000 --- a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/quartus/lofar2_unb2b_adc_full.sdc +++ /dev/null @@ -1 +0,0 @@ -#Placeholder diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/quartus/lofar2_unb2b_adc_full_pins.tcl b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/quartus/lofar2_unb2b_adc_full_pins.tcl deleted file mode 100644 index da85c19f65..0000000000 --- a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_full/quartus/lofar2_unb2b_adc_full_pins.tcl +++ /dev/null @@ -1,23 +0,0 @@ -############################################################################### -# -# Copyright (C) 2014 -# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################### - -source $::env(RADIOHDL_WORK)/boards/uniboard2b/libraries/unb2b_board/quartus/pinning/unb2b_minimal_pins.tcl -source $::env(RADIOHDL_WORK)/boards/uniboard2b/libraries/unb2b_board/quartus/pinning/unb2b_jesd204b_pins.tcl diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/hdllib.cfg b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/hdllib.cfg index 1e583673e1..dcd8780a7d 100644 --- a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/hdllib.cfg +++ b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/hdllib.cfg @@ -13,7 +13,6 @@ test_bench_files = [modelsim_project_file] modelsim_copy_files = -# Pinning design only intended for synthesis [quartus_project_file] @@ -27,13 +26,13 @@ quartus_qsf_files = $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2c_board/quartus/unb2c_board.qsf quartus_sdc_pre_files = - quartus/lofar_unb2b_adc_one_node.sdc + ../../quartus/lofar_unb2b_adc.sdc quartus_sdc_files = $RADIOHDL_WORK/boards/uniboard2b/libraries/unb2b_board/quartus/unb2b_board.sdc quartus_tcl_files = - quartus/lofar_unb2b_adc_one_node_pins.tcl + ../../quartus/lofar_unb2b_adc_pins.tcl quartus_vhdl_files = diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/lofar2_unb2b_adc_one_node.vhd b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/lofar2_unb2b_adc_one_node.vhd index f7211d878f..cab09b0a1b 100644 --- a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/lofar2_unb2b_adc_one_node.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/lofar2_unb2b_adc_one_node.vhd @@ -85,7 +85,7 @@ ARCHITECTURE str OF lofar2_unb2b_adc_one_node IS BEGIN - u_revision : ENTITY unb2b_test_lib.unb2b_test + u_revision : ENTITY lofar2_unb2b_adc_lib.lofar2_unb2b_adc GENERIC MAP ( g_design_name => g_design_name, g_design_note => g_design_note, diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/quartus/lofar2_unb2b_adc_one_node.sdc b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/quartus/lofar2_unb2b_adc_one_node.sdc deleted file mode 100644 index e0a8d1b581..0000000000 --- a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/quartus/lofar2_unb2b_adc_one_node.sdc +++ /dev/null @@ -1 +0,0 @@ -#Placeholder diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/quartus/lofar2_unb2b_adc_one_node_pins.tcl b/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/quartus/lofar2_unb2b_adc_one_node_pins.tcl deleted file mode 100644 index da85c19f65..0000000000 --- a/applications/lofar2/designs/lofar2_unb2b_adc/revisions/lofar2_unb2b_adc_one_node/quartus/lofar2_unb2b_adc_one_node_pins.tcl +++ /dev/null @@ -1,23 +0,0 @@ -############################################################################### -# -# Copyright (C) 2014 -# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> -# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################### - -source $::env(RADIOHDL_WORK)/boards/uniboard2b/libraries/unb2b_board/quartus/pinning/unb2b_minimal_pins.tcl -source $::env(RADIOHDL_WORK)/boards/uniboard2b/libraries/unb2b_board/quartus/pinning/unb2b_jesd204b_pins.tcl diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/src/vhdl/lofar2_unb2b_adc.vhd b/applications/lofar2/designs/lofar2_unb2b_adc/src/vhdl/lofar2_unb2b_adc.vhd index 48e1837197..d7abb42f88 100644 --- a/applications/lofar2/designs/lofar2_unb2b_adc/src/vhdl/lofar2_unb2b_adc.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_adc/src/vhdl/lofar2_unb2b_adc.vhd @@ -87,11 +87,25 @@ END lofar2_unb2b_adc; ARCHITECTURE str OF lofar2_unb2b_adc IS + -- Revision parameters + CONSTANT c_revision_select : t_lofar2_unb2b_adc_config := func_sel_revision_rec(g_design_name); + CONSTANT c_nof_streams_jesd204b : NATURAL := c_revision_select.nof_streams_jesd204b; + CONSTANT c_nof_streams_db : NATURAL := c_revision_select.nof_streams_db; + CONSTANT c_nof_streams_input : NATURAL := c_revision_select.nof_streams_input; + -- Firmware version x.y CONSTANT c_fw_version : t_unb2b_board_fw_version := (1, 1); CONSTANT c_mm_clk_freq : NATURAL := c_unb2b_board_mm_clk_freq_100M; - CONSTANT c_nof_streams_jesd204b : NATURAL := 12; - CONSTANT c_nof_streams_db : NATURAL := 2; + CONSTANT c_lofar2_sample_clk_freq : NATURAL := 200 * 10**6; -- alternate 160MHz. TODO: Use to check PPS + + -- Waveform Generator + CONSTANT c_wg_buf_directory : STRING := "data/"; + CONSTANT c_wg_buf_dat_w : NATURAL := c_unb2b_board_peripherals_mm_reg_default.ram_diag_wg_dat_w; + CONSTANT c_wg_buf_addr_w : NATURAL := c_unb2b_board_peripherals_mm_reg_default.ram_diag_wg_adr_w; + SIGNAL wg_sosi_arr : t_dp_sosi_arr(0 TO c_nof_streams_input-1); + SIGNAL mux_sosi_arr : t_dp_sosi_arr(0 TO c_nof_streams_input-1); + SIGNAL nxt_mux_sosi_arr : t_dp_sosi_arr(0 TO c_nof_streams_input-1); + -- System SIGNAL cs_sim : STD_LOGIC; @@ -216,11 +230,11 @@ BEGIN mm_clk => mm_clk, mm_rst => mm_rst, - dp_rst => st_rst, - dp_clk => st_clk, + dp_rst => dp_rst, + dp_clk => dp_clk, -- Can be external 200MHz, or PLL generated dp_pps => st_pps, dp_rst_in => st_rst, - dp_clk_in => st_clk, + dp_clk_in => jesd204b_frame_clk, -- Toggle WDI pout_wdi => pout_wdi, @@ -391,6 +405,11 @@ BEGIN jesd204b_miso => jesd204b_miso ); + + ----------------------------------------------------------------------------- + -- JESD204B IP (ADC Handler) + ----------------------------------------------------------------------------- + u_jesd204b: ENTITY tech_jesd204b_lib.tech_jesd204b GENERIC MAP( g_sim => g_sim, @@ -427,6 +446,10 @@ BEGIN END GENERATE; + ----------------------------------------------------------------------------- + -- Diagnostic Data Buffer (Records 8192 raw ADC samples after the PPS) + ----------------------------------------------------------------------------- + u_diag_data_buffer : ENTITY diag_lib.mms_diag_data_buffer GENERIC MAP ( g_technology => g_technology, @@ -451,6 +474,79 @@ BEGIN in_sync => st_pps ); + ----------------------------------------------------------------------------- + -- WG (Test Signal Generator) + ----------------------------------------------------------------------------- + + gen_wg : FOR I IN 0 TO c_nof_streams_input-1 GENERATE + u_sp : ENTITY diag_lib.mms_diag_wg_wideband + GENERIC MAP ( + g_cross_clock_domain => TRUE, + g_buf_dir => c_wg_buf_directory, + + -- Wideband parameters + g_wideband_factor => 1, + + -- Basic WG parameters, see diag_wg.vhd for their meaning + g_buf_dat_w => c_wg_buf_dat_w, + g_buf_addr_w => c_wg_buf_addr_w, + g_calc_support => TRUE, + g_calc_gain_w => 1, + g_calc_dat_w => c_wg_buf_dat_w + ) + PORT MAP ( + -- Memory-mapped clock domain + mm_rst => mm_rst, + mm_clk => mm_clk, + + reg_mosi => reg_wg_mosi_arr(I), + reg_miso => reg_wg_miso_arr(I), + + buf_mosi => ram_wg_mosi_arr(I), + buf_miso => ram_wg_miso_arr(I), + + -- Streaming clock domain + st_rst => dp_rst, + st_clk => jesd204b_frame_clk, + st_restart => st_pps, + + out_ovr => wg_sosi_arr(I).err, + out_val => wg_sosi_arr(I).valid, + out_dat => wg_sosi_arr(I).data(c_wg_buf_dat_w-1 downto 0), + out_sync => wg_sosi_arr(I).sync + ); + + END GENERATE; + + + + ----------------------------------------------------------------------------- + -- ADC/WG Mux (Input Select) + ----------------------------------------------------------------------------- + + gen_mux : FOR I IN 0 TO c_nof_streams_input-1 GENERATE + p_sosi : PROCESS(jesd204b_rx_src_out_arr, wg_sosi_arr) + BEGIN + -- Valid is forced to '1' here for dp_shiftram. + nxt_mux_sosi_arr(I).valid <= '1'; + + -- Default use the ADUH data + nxt_mux_sosi_arr(I).data <= jesd204b_rx_src_out_arr(I).data; + IF wg_sosi_arr(I).valid='1' THEN + -- Valid WG data overrules ADUH data + nxt_mux_sosi_arr(I).data <= wg_sosi_arr(I).data; + END IF; + END PROCESS; + END GENERATE; + + p_reg_mux : PROCESS(st_rst, jesd204b_frame_clk) + BEGIN + IF st_rst='1' THEN + mux_sosi_arr <= (OTHERS=>c_dp_sosi_rst); + ELSIF rising_edge(jesd204b_frame_clk) THEN + mux_sosi_arr <= nxt_mux_sosi_arr; + END IF; + END PROCESS; END str; diff --git a/applications/lofar2/designs/lofar2_unb2b_adc/src/vhdl/lofar2_unb2b_adc_pkg.vhd b/applications/lofar2/designs/lofar2_unb2b_adc/src/vhdl/lofar2_unb2b_adc_pkg.vhd index 585c811820..c85fc15e4e 100644 --- a/applications/lofar2/designs/lofar2_unb2b_adc/src/vhdl/lofar2_unb2b_adc_pkg.vhd +++ b/applications/lofar2/designs/lofar2_unb2b_adc/src/vhdl/lofar2_unb2b_adc_pkg.vhd @@ -24,37 +24,39 @@ USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.numeric_std.ALL; USE common_lib.common_pkg.ALL; -PACKAGE lofar2_unb2b_adc IS +PACKAGE lofar2_unb2b_adc_pkg IS ----------------------------------------------------------------------------- -- Revision control ----------------------------------------------------------------------------- TYPE t_lofar2_unb2b_adc_config IS RECORD - nof_adc_input_streams : BOOLEAN; + nof_streams_jesd204b : NATURAL; + nof_streams_db : NATURAL; + nof_streams_input : NATURAL; END RECORD; - -- nof inputs - CONSTANT c_one_node : t_lofar2_unb2b_adc_config := ( 1 ); - CONSTANT c_full : t_lofar2_unb2b_adc_config := ( 12); + -- nofjesd, nofdb, nofinput + CONSTANT c_one_node : t_lofar2_unb2b_adc_config := ( 12, 2, 1 ); + CONSTANT c_full : t_lofar2_unb2b_adc_config := ( 12, 2, 12 ); -- Function to select the revision configuration. FUNCTION func_sel_revision_rec(g_design_name : STRING) RETURN t_lofar2_unb2b_adc_config; -END lofar2_unb2b_adc; +END lofar2_unb2b_adc_pkg; -PACKAGE BODY lofar2_unb2b_adc IS +PACKAGE BODY lofar2_unb2b_adc_pkg IS FUNCTION func_sel_revision_rec(g_design_name : STRING) RETURN t_lofar2_unb2b_adc_config IS BEGIN - IF g_design_name = "lofar2_unb2b_adc_one_node" THEN RETURN c_one_node; - ELSIF g_design_name = "lofar2_unb2b_adc_full" THEN RETURN c_full; + IF g_design_name = "lofar2_unb2b_adc_one_node" THEN RETURN c_one_node; + IF g_design_name = "lofar2_unb2b_adc_full" THEN RETURN c_full; ELSE RETURN c_one_node; END IF; END; -END lofar2_unb2b_adc; +END lofar2_unb2b_adc_pkg; -- GitLab