initial commit

This commit is contained in:
2023-03-18 15:35:53 +08:00
commit 5965eba577
3222 changed files with 4025781 additions and 0 deletions
+85
View File
@@ -0,0 +1,85 @@
// ***************************************************************************
// ***************************************************************************
// Copyright 2014 - 2017 (c) Analog Devices, Inc. All rights reserved.
//
// In this HDL repository, there are many different and unique modules, consisting
// of various HDL (Verilog or VHDL) components. The individual modules are
// developed independently, and may be accompanied by separate and unique license
// terms.
//
// The user should read each of these license terms, and understand the
// freedoms and responsibilities that he or she has by using this source/core.
//
// This core 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.
//
// Redistribution and use of source or resulting binaries, with or without modification
// of this file, are permitted under one of the following two license terms:
//
// 1. The GNU General Public License version 2 as published by the
// Free Software Foundation, which can be found in the top level directory
// of this repository (LICENSE_GPL2), and also online at:
// <https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
//
// OR
//
// 2. An ADI specific BSD license, which can be found in the top level directory
// of this repository (LICENSE_ADIBSD), and also on-line at:
// https://github.com/analogdevicesinc/hdl/blob/master/LICENSE_ADIBSD
// This will allow to generate bit files and not release the source code,
// as long as it attaches to an ADI device.
//
// ***************************************************************************
// ***************************************************************************
// dc filter- y(n) = c*x(n) + (1-c)*y(n-1)
// NOT IMPLEMENTED
`timescale 1ps/1ps
module ad_dcfilter #(
// data path disable
parameter DISABLE = 0) (
// data interface
input clk,
input valid,
input [15:0] data,
output reg valid_out,
output reg [15:0] data_out,
// control interface
input dcfilt_enb,
input [15:0] dcfilt_coeff,
input [15:0] dcfilt_offset);
// internal registers
reg valid_d = 'd0;
reg [15:0] data_d = 'd0;
reg valid_2d = 'd0;
reg [15:0] data_2d = 'd0;
// internal signals
wire [47:0] dc_offset_s;
always @(posedge clk) begin
valid_d <= valid;
if (valid == 1'b1) begin
data_d <= data + dcfilt_offset;
end
valid_2d <= valid_d;
data_2d <= data_d;
valid_out <= valid_2d;
data_out <= data_2d;
end
endmodule
// ***************************************************************************
// ***************************************************************************
+90
View File
@@ -0,0 +1,90 @@
// ***************************************************************************
// ***************************************************************************
// Copyright 2014 - 2017 (c) Analog Devices, Inc. All rights reserved.
//
// In this HDL repository, there are many different and unique modules, consisting
// of various HDL (Verilog or VHDL) components. The individual modules are
// developed independently, and may be accompanied by separate and unique license
// terms.
//
// The user should read each of these license terms, and understand the
// freedoms and responsibilities that he or she has by using this source/core.
//
// This core 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.
//
// Redistribution and use of source or resulting binaries, with or without modification
// of this file, are permitted under one of the following two license terms:
//
// 1. The GNU General Public License version 2 as published by the
// Free Software Foundation, which can be found in the top level directory
// of this repository (LICENSE_GPL2), and also online at:
// <https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
//
// OR
//
// 2. An ADI specific BSD license, which can be found in the top level directory
// of this repository (LICENSE_ADIBSD), and also on-line at:
// https://github.com/analogdevicesinc/hdl/blob/master/LICENSE_ADIBSD
// This will allow to generate bit files and not release the source code,
// as long as it attaches to an ADI device.
//
// ***************************************************************************
// ***************************************************************************
`timescale 1ps/1ps
module ad_mul #(
parameter A_DATA_WIDTH = 17,
parameter B_DATA_WIDTH = 17,
parameter DELAY_DATA_WIDTH = 16) (
// data_p = data_a * data_b;
input clk,
input [ A_DATA_WIDTH-1:0] data_a,
input [ B_DATA_WIDTH-1:0] data_b,
output [A_DATA_WIDTH + B_DATA_WIDTH-1:0] data_p,
// delay interface
input [(DELAY_DATA_WIDTH-1):0] ddata_in,
output reg [(DELAY_DATA_WIDTH-1):0] ddata_out);
// internal registers
reg [(DELAY_DATA_WIDTH-1):0] p1_ddata = 'd0;
reg [(DELAY_DATA_WIDTH-1):0] p2_ddata = 'd0;
// a/b reg, m-reg, p-reg delay match
always @(posedge clk) begin
p1_ddata <= ddata_in;
p2_ddata <= p1_ddata;
ddata_out <= p2_ddata;
end
lpm_mult #(
.lpm_type ("lpm_mult"),
.lpm_widtha (A_DATA_WIDTH),
.lpm_widthb (B_DATA_WIDTH),
.lpm_widthp (A_DATA_WIDTH + B_DATA_WIDTH),
.lpm_representation ("SIGNED"),
.lpm_pipeline (3))
i_lpm_mult (
.clken (1'b1),
.aclr (1'b0),
.sclr (1'b0),
.sum (1'b0),
.clock (clk),
.dataa (data_a),
.datab (data_b),
.result (data_p));
endmodule
// ***************************************************************************
// ***************************************************************************
@@ -0,0 +1,10 @@
####################################################################################
## Copyright 2018(c) Analog Devices, Inc.
## Auto-generated, do not modify!
####################################################################################
LIBRARY_NAME := intel_mem_asym
INTEL_DEPS += intel_mem_asym_hw.tcl
include ../../../scripts/library.mk
@@ -0,0 +1,60 @@
package require qsys
source ../../../scripts/adi_env.tcl
source $ad_hdl_dir/library/scripts/adi_ip_intel.tcl
ad_ip_create intel_mem_asym {Intel Asymmetric Memory}
set_module_property COMPOSITION_CALLBACK p_intel_mem_asym
# parameters
ad_ip_parameter DEVICE_FAMILY STRING {Arria 10}
ad_ip_parameter A_ADDRESS_WIDTH INTEGER 8
ad_ip_parameter A_DATA_WIDTH INTEGER 512
ad_ip_parameter B_ADDRESS_WIDTH INTEGER 8
ad_ip_parameter B_DATA_WIDTH INTEGER 64
# compose
proc p_intel_mem_asym {} {
set m_addr_width_a [get_parameter_value "A_ADDRESS_WIDTH"]
set m_data_width_a [get_parameter_value "A_DATA_WIDTH"]
set m_addr_width_b [get_parameter_value "B_ADDRESS_WIDTH"]
set m_data_width_b [get_parameter_value "B_DATA_WIDTH"]
set m_size [expr ((2**$m_addr_width_a)*$m_data_width_a)]
if {$m_addr_width_a == 0} {
set m_size [expr ((2**$m_addr_width_b)*$m_data_width_b)]
}
add_instance intel_mem ram_2port 1.0
set_instance_parameter_value intel_mem {GUI_MODE} 0
set_instance_parameter_value intel_mem {GUI_MEM_IN_BITS} 1
set_instance_parameter_value intel_mem {GUI_MEMSIZE_BITS} $m_size
set_instance_parameter_value intel_mem {GUI_VAR_WIDTH} 1
set_instance_parameter_value intel_mem {GUI_QA_WIDTH} $m_data_width_a
set_instance_parameter_value intel_mem {GUI_DATAA_WIDTH} $m_data_width_a
set_instance_parameter_value intel_mem {GUI_QB_WIDTH} $m_data_width_b
set_instance_parameter_value intel_mem {GUI_READ_OUTPUT_QB} {false}
set_instance_parameter_value intel_mem {GUI_RAM_BLOCK_TYPE} {M20K}
set_instance_parameter_value intel_mem {GUI_CLOCK_TYPE} 1
add_interface mem_i_wrclock clock end
add_interface mem_i_wren conduit end
add_interface mem_i_wraddress conduit end
add_interface mem_i_datain conduit end
add_interface mem_i_rdclock clock end
add_interface mem_i_rdaddress conduit end
add_interface mem_o_dataout conduit end
set_interface_property mem_i_wrclock EXPORT_OF intel_mem.wrclock
set_interface_property mem_i_wren EXPORT_OF intel_mem.wren
set_interface_property mem_i_wraddress EXPORT_OF intel_mem.wraddress
set_interface_property mem_i_datain EXPORT_OF intel_mem.data
set_interface_property mem_i_rdclock EXPORT_OF intel_mem.rdclock
set_interface_property mem_i_rdaddress EXPORT_OF intel_mem.rdaddress
set_interface_property mem_o_dataout EXPORT_OF intel_mem.q
}
@@ -0,0 +1,10 @@
####################################################################################
## Copyright 2018(c) Analog Devices, Inc.
## Auto-generated, do not modify!
####################################################################################
LIBRARY_NAME := intel_serdes
INTEL_DEPS += intel_serdes_hw.tcl
include ../../../scripts/library.mk
@@ -0,0 +1,138 @@
package require qsys
source ../../../scripts/adi_env.tcl
source $ad_hdl_dir/library/scripts/adi_ip_intel.tcl
ad_ip_create intel_serdes {Intel SERDES}
set_module_property COMPOSITION_CALLBACK p_intel_serdes
# parameters
ad_ip_parameter DEVICE_FAMILY STRING {Arria 10}
ad_ip_parameter MODE STRING "CLK" false
ad_ip_parameter DDR_OR_SDR_N INTEGER 1 false
ad_ip_parameter SERDES_FACTOR INTEGER 8 false
ad_ip_parameter CLKIN_FREQUENCY FLOAT 500.0 false
set_parameter_property MODE ALLOWED_RANGES {"CLK" "IN" "IN_NODPA" "OUT"}
set_parameter_property DDR_OR_SDR_N ALLOWED_RANGES {0 1}
set_parameter_property SERDES_FACTOR ALLOWED_RANGES {4 8}
set_parameter_property CLKIN_FREQUENCY DISPLAY_UNITS "MHz"
proc p_intel_serdes {} {
set m_mode [get_parameter_value "MODE"]
set m_ddr_or_sdr_n [get_parameter_value "DDR_OR_SDR_N"]
set m_serdes_factor [get_parameter_value "SERDES_FACTOR"]
set m_clkin_frequency [get_parameter_value "CLKIN_FREQUENCY"]
set m_hs_data_rate [expr ($m_clkin_frequency * ($m_ddr_or_sdr_n + 1))]
set m_ls_data_rate [expr ($m_hs_data_rate/$m_serdes_factor)]
set m_ls_phase 22.5
set m_ld_phase 315.0
set m_ld_duty_cycle 12.5
if {$m_serdes_factor == 4} {
set m_ls_phase 45
set m_ld_phase 270.0
set m_ld_duty_cycle 25.0
}
## arria 10 only
if {$m_mode == "CLK"} {
add_instance intel_serdes_pll altera_iopll 19.1
set_instance_parameter_value intel_serdes_pll {gui_reference_clock_frequency} $m_clkin_frequency
set_instance_parameter_value intel_serdes_pll {gui_use_locked} {1}
set_instance_parameter_value intel_serdes_pll {gui_operation_mode} {lvds}
set_instance_parameter_value intel_serdes_pll {gui_number_of_clocks} {3}
set_instance_parameter_value intel_serdes_pll {gui_en_lvds_ports} {Enable LVDS_CLK/LOADEN 0}
set_instance_parameter_value intel_serdes_pll {gui_en_phout_ports} {true}
set_instance_parameter_value intel_serdes_pll {gui_output_clock_frequency0} $m_hs_data_rate
set_instance_parameter_value intel_serdes_pll {gui_ps_units0} {degrees}
set_instance_parameter_value intel_serdes_pll {gui_phase_shift_deg0} {180.0}
set_instance_parameter_value intel_serdes_pll {gui_output_clock_frequency1} $m_ls_data_rate
set_instance_parameter_value intel_serdes_pll {gui_ps_units1} {degrees}
set_instance_parameter_value intel_serdes_pll {gui_phase_shift_deg1} $m_ld_phase
set_instance_parameter_value intel_serdes_pll {gui_duty_cycle1} $m_ld_duty_cycle
set_instance_parameter_value intel_serdes_pll {gui_output_clock_frequency2} $m_ls_data_rate
set_instance_parameter_value intel_serdes_pll {gui_phase_shift_deg2} $m_ls_phase
set_instance_parameter_value intel_serdes_pll {gui_ps_units2} {degrees}
add_interface rst reset sink
set_interface_property rst EXPORT_OF intel_serdes_pll.reset
add_interface ref_clk clock sink
set_interface_property ref_clk EXPORT_OF intel_serdes_pll.refclk
add_interface locked conduit end
set_interface_property locked EXPORT_OF intel_serdes_pll.locked
add_interface hs_phase conduit end
set_interface_property hs_phase EXPORT_OF intel_serdes_pll.phout
add_interface hs_clk conduit end
set_interface_property hs_clk EXPORT_OF intel_serdes_pll.lvds_clk
add_interface loaden conduit end
set_interface_property loaden EXPORT_OF intel_serdes_pll.loaden
add_interface ls_clk clock source
set_interface_property ls_clk EXPORT_OF intel_serdes_pll.outclk2
return
}
if {$m_mode == "IN" || $m_mode == "IN_NODPA"} {
add_instance intel_serdes_in altera_lvds 19.1
if {$m_mode == "IN"} {
set_instance_parameter_value intel_serdes_in {MODE} {RX_DPA-FIFO}
} else {
set_instance_parameter_value intel_serdes_in {MODE} {RX_Non-DPA}
}
set_instance_parameter_value intel_serdes_in {NUM_CHANNELS} {1}
set_instance_parameter_value intel_serdes_in {DATA_RATE} $m_hs_data_rate
set_instance_parameter_value intel_serdes_in {J_FACTOR} $m_serdes_factor
set_instance_parameter_value intel_serdes_in {USE_EXTERNAL_PLL} {true}
set_instance_parameter_value intel_serdes_in {INCLOCK_FREQUENCY} $m_clkin_frequency
set_instance_parameter_value intel_serdes_in {PLL_USE_RESET} {false}
add_interface data_in conduit end
set_interface_property data_in EXPORT_OF intel_serdes_in.rx_in
add_interface clk conduit end
set_interface_property clk EXPORT_OF intel_serdes_in.ext_fclk
add_interface loaden conduit end
set_interface_property loaden EXPORT_OF intel_serdes_in.ext_loaden
add_interface div_clk conduit end
set_interface_property div_clk EXPORT_OF intel_serdes_in.ext_coreclock
if {$m_mode == "IN"} {
add_interface hs_phase conduit end
set_interface_property hs_phase EXPORT_OF intel_serdes_in.ext_vcoph
add_interface locked conduit end
set_interface_property locked EXPORT_OF intel_serdes_in.ext_pll_locked
add_interface delay_locked conduit end
set_interface_property delay_locked EXPORT_OF intel_serdes_in.rx_dpa_locked
}
add_interface data_s conduit end
set_interface_property data_s EXPORT_OF intel_serdes_in.rx_out
return
}
if {$m_mode == "OUT"} {
add_instance intel_serdes_out altera_lvds 19.1
set_instance_parameter_value intel_serdes_out {MODE} {TX}
set_instance_parameter_value intel_serdes_out {NUM_CHANNELS} {1}
set_instance_parameter_value intel_serdes_out {DATA_RATE} $m_hs_data_rate
set_instance_parameter_value intel_serdes_out {J_FACTOR} $m_serdes_factor
set_instance_parameter_value intel_serdes_out {TX_EXPORT_CORECLOCK} {false}
set_instance_parameter_value intel_serdes_out {TX_USE_OUTCLOCK} {false}
set_instance_parameter_value intel_serdes_out {USE_EXTERNAL_PLL} {true}
set_instance_parameter_value intel_serdes_out {INCLOCK_FREQUENCY} $m_clkin_frequency
set_instance_parameter_value intel_serdes_out {PLL_USE_RESET} {false}
add_interface data_out conduit end
set_interface_property data_out EXPORT_OF intel_serdes_out.tx_out
add_interface clk conduit end
set_interface_property clk EXPORT_OF intel_serdes_out.ext_fclk
add_interface loaden conduit end
set_interface_property loaden EXPORT_OF intel_serdes_out.ext_loaden
add_interface div_clk conduit end
set_interface_property div_clk EXPORT_OF intel_serdes_out.ext_coreclock
add_interface data_s conduit end
set_interface_property data_s EXPORT_OF intel_serdes_out.tx_in
return
}
}
@@ -0,0 +1,4 @@
set_false_path -from [get_registers *up_clock_mon:i_clock_mon|d_count_run_m3*] -to [get_registers *up_clock_mon:i_clock_mon|up_count_running_m1*]
set_false_path -from [get_registers *up_clock_mon:i_clock_mon|up_count_run*] -to [get_registers *up_clock_mon:i_clock_mon|d_count_run_m1*]
set_false_path -from [get_registers *up_clock_mon:i_clock_mon|d_count*] -to [get_registers *up_clock_mon:i_clock_mon|up_d_count*]
@@ -0,0 +1,4 @@
set_false_path -to [get_pins -hierarchical -nocase rst_async_d*|CLRN]
set_false_path -to [get_pins -hierarchical -nocase rst_sync|CLRN]
@@ -0,0 +1,4 @@
set_false_path -from [get_registers *up_xfer_cntrl:i_xfer_cntrl|d_xfer_toggle*] -to [get_registers *up_xfer_cntrl:i_xfer_cntrl|up_xfer_state_m1*]
set_false_path -from [get_registers *up_xfer_cntrl:i_xfer_cntrl|up_xfer_toggle*] -to [get_registers *up_xfer_cntrl:i_xfer_cntrl|d_xfer_toggle_m1*]
set_false_path -from [get_registers *up_xfer_cntrl:i_xfer_cntrl|up_xfer_data*] -to [get_registers *up_xfer_cntrl:i_xfer_cntrl|d_data_cntrl*]
@@ -0,0 +1,4 @@
set_false_path -from [get_registers *up_xfer_status:i_xfer_status|up_xfer_toggle*] -to [get_registers *up_xfer_status:i_xfer_status|d_xfer_state_m1*]
set_false_path -from [get_registers *up_xfer_status:i_xfer_status|d_xfer_toggle*] -to [get_registers *up_xfer_status:i_xfer_status|up_xfer_toggle_m1*]
set_false_path -from [get_registers *up_xfer_status:i_xfer_status|d_xfer_data*] -to [get_registers *up_xfer_status:i_xfer_status|up_data_status*]