removed junk files
This commit is contained in:
BIN
Binary file not shown.
-1711
File diff suppressed because it is too large
Load Diff
-6
@@ -1,6 +0,0 @@
|
||||
###############################################################################################################
|
||||
# Core-Level Timing Constraints for axi_register_slice Component "axis_register_slice_32"
|
||||
###############################################################################################################
|
||||
#
|
||||
# This component is not configured in a multi-SLR crossing or auto-pipelining mode.
|
||||
# No timing core-level constraints are needed.
|
||||
-57
@@ -1,57 +0,0 @@
|
||||
# (c) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
# (c) Copyright 2022-2026 Advanced Micro Devices, Inc. All rights reserved.
|
||||
#
|
||||
# This file contains confidential and proprietary information
|
||||
# of AMD and is protected under U.S. and international copyright
|
||||
# and other intellectual property laws.
|
||||
#
|
||||
# DISCLAIMER
|
||||
# This disclaimer is not a license and does not grant any
|
||||
# rights to the materials distributed herewith. Except as
|
||||
# otherwise provided in a valid license issued to you by
|
||||
# AMD, and to the maximum extent permitted by applicable
|
||||
# law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
|
||||
# WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES
|
||||
# AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
|
||||
# BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
|
||||
# INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
|
||||
# (2) AMD shall not be liable (whether in contract or tort,
|
||||
# including negligence, or under any other theory of
|
||||
# liability) for any loss or damage of any kind or nature
|
||||
# related to, arising under or in connection with these
|
||||
# materials, including for any direct, or any indirect,
|
||||
# special, incidental, or consequential loss or damage
|
||||
# (including loss of data, profits, goodwill, or any type of
|
||||
# loss or damage suffered as a result of any action brought
|
||||
# by a third party) even if such damage or loss was
|
||||
# reasonably foreseeable or AMD had been advised of the
|
||||
# possibility of the same.
|
||||
#
|
||||
# CRITICAL APPLICATIONS
|
||||
# AMD products are not designed or intended to be fail-
|
||||
# safe, or for use in any application requiring fail-safe
|
||||
# performance, such as life-support or safety devices or
|
||||
# systems, Class III medical devices, nuclear facilities,
|
||||
# applications related to the deployment of airbags, or any
|
||||
# other applications that could lead to death, personal
|
||||
# injury, or severe property or environmental damage
|
||||
# (individually and collectively, "Critical
|
||||
# Applications"). Customer assumes the sole risk and
|
||||
# liability of any use of AMD products in Critical
|
||||
# Applications, subject only to applicable laws and
|
||||
# regulations governing limitations on product liability.
|
||||
#
|
||||
# THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
|
||||
# PART OF THIS FILE AT ALL TIMES.
|
||||
#
|
||||
# DO NOT MODIFY THIS FILE.
|
||||
# #########################################################
|
||||
#
|
||||
# This XDC is used only in OOC mode for synthesis, implementation
|
||||
#
|
||||
# #########################################################
|
||||
|
||||
|
||||
create_clock -period 100 -name aclk [get_ports aclk]
|
||||
|
||||
|
||||
-1100
File diff suppressed because it is too large
Load Diff
-1366
File diff suppressed because it is too large
Load Diff
-30
@@ -1,30 +0,0 @@
|
||||
// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
// Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
// --------------------------------------------------------------------------------
|
||||
// Tool Version: Vivado v.2023.2 (lin64) Build 4029153 Fri Oct 13 20:13:54 MDT 2023
|
||||
// Date : Thu Apr 23 10:08:03 2026
|
||||
// Host : nicksbaby running 64-bit Ubuntu 22.04.5 LTS
|
||||
// Command : write_verilog -force -mode synth_stub -rename_top axis_register_slice_32 -prefix
|
||||
// axis_register_slice_32_ axis_register_slice_32_stub.v
|
||||
// Design : axis_register_slice_32
|
||||
// Purpose : Stub declaration of top-level module interface
|
||||
// Device : xczu19eg-ffvc1760-2-i
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
// This empty module with port declaration file causes synthesis tools to infer a black box for IP.
|
||||
// The synthesis directives are for Synopsys Synplify support to prevent IO buffer insertion.
|
||||
// Please paste the declaration into a Verilog source file or add the file as an additional source.
|
||||
(* X_CORE_INFO = "axis_register_slice_v1_1_29_axis_register_slice,Vivado 2023.2" *)
|
||||
module axis_register_slice_32(aclk, aresetn, s_axis_tvalid, s_axis_tready,
|
||||
s_axis_tdata, m_axis_tvalid, m_axis_tready, m_axis_tdata)
|
||||
/* synthesis syn_black_box black_box_pad_pin="aresetn,s_axis_tvalid,s_axis_tready,s_axis_tdata[31:0],m_axis_tvalid,m_axis_tready,m_axis_tdata[31:0]" */
|
||||
/* synthesis syn_force_seq_prim="aclk" */;
|
||||
input aclk /* synthesis syn_isclock = 1 */;
|
||||
input aresetn;
|
||||
input s_axis_tvalid;
|
||||
output s_axis_tready;
|
||||
input [31:0]s_axis_tdata;
|
||||
output m_axis_tvalid;
|
||||
input m_axis_tready;
|
||||
output [31:0]m_axis_tdata;
|
||||
endmodule
|
||||
-38
@@ -1,38 +0,0 @@
|
||||
-- Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
-- Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
-- --------------------------------------------------------------------------------
|
||||
-- Tool Version: Vivado v.2023.2 (lin64) Build 4029153 Fri Oct 13 20:13:54 MDT 2023
|
||||
-- Date : Thu Apr 23 10:08:04 2026
|
||||
-- Host : nicksbaby running 64-bit Ubuntu 22.04.5 LTS
|
||||
-- Command : write_vhdl -force -mode synth_stub -rename_top axis_register_slice_32 -prefix
|
||||
-- axis_register_slice_32_ axis_register_slice_32_stub.vhdl
|
||||
-- Design : axis_register_slice_32
|
||||
-- Purpose : Stub declaration of top-level module interface
|
||||
-- Device : xczu19eg-ffvc1760-2-i
|
||||
-- --------------------------------------------------------------------------------
|
||||
library IEEE;
|
||||
use IEEE.STD_LOGIC_1164.ALL;
|
||||
|
||||
entity axis_register_slice_32 is
|
||||
Port (
|
||||
aclk : in STD_LOGIC;
|
||||
aresetn : in STD_LOGIC;
|
||||
s_axis_tvalid : in STD_LOGIC;
|
||||
s_axis_tready : out STD_LOGIC;
|
||||
s_axis_tdata : in STD_LOGIC_VECTOR ( 31 downto 0 );
|
||||
m_axis_tvalid : out STD_LOGIC;
|
||||
m_axis_tready : in STD_LOGIC;
|
||||
m_axis_tdata : out STD_LOGIC_VECTOR ( 31 downto 0 )
|
||||
);
|
||||
|
||||
end axis_register_slice_32;
|
||||
|
||||
architecture stub of axis_register_slice_32 is
|
||||
attribute syn_black_box : boolean;
|
||||
attribute black_box_pad_pin : string;
|
||||
attribute syn_black_box of stub : architecture is true;
|
||||
attribute black_box_pad_pin of stub : architecture is "aclk,aresetn,s_axis_tvalid,s_axis_tready,s_axis_tdata[31:0],m_axis_tvalid,m_axis_tready,m_axis_tdata[31:0]";
|
||||
attribute X_CORE_INFO : string;
|
||||
attribute X_CORE_INFO of stub : architecture is "axis_register_slice_v1_1_29_axis_register_slice,Vivado 2023.2";
|
||||
begin
|
||||
end;
|
||||
-336
@@ -1,336 +0,0 @@
|
||||
// (c) Copyright 2011-2013, 2023 Advanced Micro Devices, Inc. All rights reserved.
|
||||
//
|
||||
// This file contains confidential and proprietary information
|
||||
// of AMD and is protected under U.S. and international copyright
|
||||
// and other intellectual property laws.
|
||||
//
|
||||
// DISCLAIMER
|
||||
// This disclaimer is not a license and does not grant any
|
||||
// rights to the materials distributed herewith. Except as
|
||||
// otherwise provided in a valid license issued to you by
|
||||
// AMD, and to the maximum extent permitted by applicable
|
||||
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
|
||||
// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES
|
||||
// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
|
||||
// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
|
||||
// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
|
||||
// (2) AMD shall not be liable (whether in contract or tort,
|
||||
// including negligence, or under any other theory of
|
||||
// liability) for any loss or damage of any kind or nature
|
||||
// related to, arising under or in connection with these
|
||||
// materials, including for any direct, or any indirect,
|
||||
// special, incidental, or consequential loss or damage
|
||||
// (including loss of data, profits, goodwill, or any type of
|
||||
// loss or damage suffered as a result of any action brought
|
||||
// by a third party) even if such damage or loss was
|
||||
// reasonably foreseeable or AMD had been advised of the
|
||||
// possibility of the same.
|
||||
//
|
||||
// CRITICAL APPLICATIONS
|
||||
// AMD products are not designed or intended to be fail-
|
||||
// safe, or for use in any application requiring fail-safe
|
||||
// performance, such as life-support or safety devices or
|
||||
// systems, Class III medical devices, nuclear facilities,
|
||||
// applications related to the deployment of airbags, or any
|
||||
// other applications that could lead to death, personal
|
||||
// injury, or severe property or environmental damage
|
||||
// (individually and collectively, "Critical
|
||||
// Applications"). Customer assumes the sole risk and
|
||||
// liability of any use of AMD products in Critical
|
||||
// Applications, subject only to applicable laws and
|
||||
// regulations governing limitations on product liability.
|
||||
//
|
||||
// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
|
||||
// PART OF THIS FILE AT ALL TIMES.
|
||||
////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generic Functions used by AXIS-Interconnect and Infrastrucutre Modules
|
||||
//
|
||||
// Verilog-standard: Verilog 2001
|
||||
//--------------------------------------------------------------------------
|
||||
// Global Parameters:
|
||||
//
|
||||
// Functions:
|
||||
// f_clogb2
|
||||
// f_gcd
|
||||
// f_lcm
|
||||
// f_get_tdata_indx
|
||||
// f_get_tstrb_indx
|
||||
// f_get_tkeep_indx
|
||||
// f_get_tlast_indx
|
||||
// f_get_tid_indx
|
||||
// f_get_tdest_indx
|
||||
// f_get_tuser_indx
|
||||
// f_payload_width
|
||||
// Tasks:
|
||||
// t_display_tdata_error
|
||||
//--------------------------------------------------------------------------
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// BEGIN Global Parameters
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Define Signal Set indices
|
||||
localparam G_INDX_SS_TREADY = 0;
|
||||
localparam G_INDX_SS_TDATA = 1;
|
||||
localparam G_INDX_SS_TSTRB = 2;
|
||||
localparam G_INDX_SS_TKEEP = 3;
|
||||
localparam G_INDX_SS_TLAST = 4;
|
||||
localparam G_INDX_SS_TID = 5;
|
||||
localparam G_INDX_SS_TDEST = 6;
|
||||
localparam G_INDX_SS_TUSER = 7;
|
||||
localparam G_MASK_SS_TREADY = 32'h1 << G_INDX_SS_TREADY;
|
||||
localparam G_MASK_SS_TDATA = 32'h1 << G_INDX_SS_TDATA;
|
||||
localparam G_MASK_SS_TSTRB = 32'h1 << G_INDX_SS_TSTRB;
|
||||
localparam G_MASK_SS_TKEEP = 32'h1 << G_INDX_SS_TKEEP;
|
||||
localparam G_MASK_SS_TLAST = 32'h1 << G_INDX_SS_TLAST;
|
||||
localparam G_MASK_SS_TID = 32'h1 << G_INDX_SS_TID ;
|
||||
localparam G_MASK_SS_TDEST = 32'h1 << G_INDX_SS_TDEST;
|
||||
localparam G_MASK_SS_TUSER = 32'h1 << G_INDX_SS_TUSER;
|
||||
|
||||
// Task DRC error levels
|
||||
localparam G_TASK_SEVERITY_ERR = 2;
|
||||
localparam G_TASK_SEVERITY_WARNING = 1;
|
||||
localparam G_TASK_SEVERITY_INFO = 0;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// BEGIN Functions
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// ceiling logb2
|
||||
function integer f_clogb2 (input integer size);
|
||||
integer s;
|
||||
begin
|
||||
s = size;
|
||||
s = s - 1;
|
||||
for (f_clogb2=1; s>1; f_clogb2=f_clogb2+1)
|
||||
s = s >> 1;
|
||||
end
|
||||
endfunction // clogb2
|
||||
|
||||
// Calculates the Greatest Common Divisor between two integers using the
|
||||
// euclidean algorithm.
|
||||
function automatic integer f_gcd (
|
||||
input integer a,
|
||||
input integer b
|
||||
);
|
||||
begin : main
|
||||
if (a == 0) begin
|
||||
f_gcd = b;
|
||||
end else if (b == 0) begin
|
||||
f_gcd = a;
|
||||
end else if (a > b) begin
|
||||
f_gcd = f_gcd(a % b, b);
|
||||
end else begin
|
||||
f_gcd = f_gcd(a, b % a);
|
||||
end
|
||||
end
|
||||
endfunction
|
||||
|
||||
// Calculates the Lowest Common Denominator between two integers
|
||||
function integer f_lcm (
|
||||
input integer a,
|
||||
input integer b
|
||||
);
|
||||
begin : main
|
||||
f_lcm = ( a / f_gcd(a, b)) * b;
|
||||
end
|
||||
endfunction
|
||||
|
||||
// Returns back the index to the TDATA portion of TPAYLOAD, returns 0 if the
|
||||
// signal is not enabled.
|
||||
function integer f_get_tdata_indx (
|
||||
input integer DAW, // TDATA Width
|
||||
input integer IDW, // TID Width
|
||||
input integer DEW, // TDEST Width
|
||||
input integer USW, // TUSER Width
|
||||
input [31:0] SST // Signal Set
|
||||
);
|
||||
begin : main
|
||||
f_get_tdata_indx = 0;
|
||||
end
|
||||
endfunction
|
||||
|
||||
// Returns back the index to the tstrb portion of TPAYLOAD, returns 0 if the
|
||||
// signal is not enabled.
|
||||
function integer f_get_tstrb_indx (
|
||||
input integer DAW, // TDATA Width
|
||||
input integer IDW, // TID Width
|
||||
input integer DEW, // TDEST Width
|
||||
input integer USW, // TUSER Width
|
||||
input [31:0] SST // Signal Set
|
||||
);
|
||||
begin : main
|
||||
integer cur_indx;
|
||||
cur_indx = f_get_tdata_indx(DAW, IDW, DEW, USW, SST);
|
||||
// If TDATA exists, then add its width to its base to get the tstrb index
|
||||
f_get_tstrb_indx = SST[G_INDX_SS_TDATA] ? cur_indx + DAW : cur_indx;
|
||||
end
|
||||
endfunction
|
||||
|
||||
// Returns back the index to the tkeep portion of TPAYLOAD, returns 0 if the
|
||||
// signal is not enabled.
|
||||
function integer f_get_tkeep_indx (
|
||||
input integer DAW, // TDATA Width
|
||||
input integer IDW, // TID Width
|
||||
input integer DEW, // TDEST Width
|
||||
input integer USW, // TUSER Width
|
||||
input [31:0] SST // Signal Set
|
||||
);
|
||||
begin : main
|
||||
integer cur_indx;
|
||||
cur_indx = f_get_tstrb_indx(DAW, IDW, DEW, USW, SST);
|
||||
f_get_tkeep_indx = SST[G_INDX_SS_TSTRB] ? cur_indx + DAW/8 : cur_indx;
|
||||
end
|
||||
endfunction
|
||||
|
||||
// Returns back the index to the tlast portion of TPAYLOAD, returns 0 if the
|
||||
// signal is not enabled.
|
||||
function integer f_get_tlast_indx (
|
||||
input integer DAW, // TDATA Width
|
||||
input integer IDW, // TID Width
|
||||
input integer DEW, // TDEST Width
|
||||
input integer USW, // TUSER Width
|
||||
input [31:0] SST // Signal Set
|
||||
);
|
||||
begin : main
|
||||
integer cur_indx;
|
||||
cur_indx = f_get_tkeep_indx(DAW, IDW, DEW, USW, SST);
|
||||
f_get_tlast_indx = SST[G_INDX_SS_TKEEP] ? cur_indx + DAW/8 : cur_indx;
|
||||
end
|
||||
endfunction
|
||||
|
||||
// Returns back the index to the tid portion of TPAYLOAD, returns 0 if the
|
||||
// signal is not enabled.
|
||||
function integer f_get_tid_indx (
|
||||
input integer DAW, // TDATA Width
|
||||
input integer IDW, // TID Width
|
||||
input integer DEW, // TDEST Width
|
||||
input integer USW, // TUSER Width
|
||||
input [31:0] SST // Signal Set
|
||||
);
|
||||
begin : main
|
||||
integer cur_indx;
|
||||
cur_indx = f_get_tlast_indx(DAW, IDW, DEW, USW, SST);
|
||||
f_get_tid_indx = SST[G_INDX_SS_TLAST] ? cur_indx + 1 : cur_indx;
|
||||
end
|
||||
endfunction
|
||||
|
||||
// Returns back the index to the tdest portion of TPAYLOAD, returns 0 if the
|
||||
// signal is not enabled.
|
||||
function integer f_get_tdest_indx (
|
||||
input integer DAW, // TDATA Width
|
||||
input integer IDW, // TID Width
|
||||
input integer DEW, // TDEST Width
|
||||
input integer USW, // TUSER Width
|
||||
input [31:0] SST // Signal Set
|
||||
);
|
||||
begin : main
|
||||
integer cur_indx;
|
||||
cur_indx = f_get_tid_indx(DAW, IDW, DEW, USW, SST);
|
||||
f_get_tdest_indx = SST[G_INDX_SS_TID] ? cur_indx + IDW : cur_indx;
|
||||
end
|
||||
endfunction
|
||||
|
||||
// Returns back the index to the tuser portion of TPAYLOAD, returns 0 if the
|
||||
// signal is not enabled.
|
||||
function integer f_get_tuser_indx (
|
||||
input integer DAW, // TDATA Width
|
||||
input integer IDW, // TID Width
|
||||
input integer DEW, // TDEST Width
|
||||
input integer USW, // TUSER Width
|
||||
input [31:0] SST // Signal Set
|
||||
);
|
||||
begin : main
|
||||
integer cur_indx;
|
||||
cur_indx = f_get_tdest_indx(DAW, IDW, DEW, USW, SST);
|
||||
f_get_tuser_indx = SST[G_INDX_SS_TDEST] ? cur_indx + DEW : cur_indx;
|
||||
end
|
||||
endfunction
|
||||
|
||||
// Payload is the sum of all the AXIS signals present except for
|
||||
// TREADY/TVALID
|
||||
function integer f_payload_width (
|
||||
input integer DAW, // TDATA Width
|
||||
input integer IDW, // TID Width
|
||||
input integer DEW, // TDEST Width
|
||||
input integer USW, // TUSER Width
|
||||
input [31:0] SST // Signal Set
|
||||
);
|
||||
begin : main
|
||||
integer cur_indx;
|
||||
cur_indx = f_get_tuser_indx(DAW, IDW, DEW, USW, SST);
|
||||
f_payload_width = SST[G_INDX_SS_TUSER] ? cur_indx + USW : cur_indx;
|
||||
// Ensure that the return value is never less than 1
|
||||
f_payload_width = (f_payload_width < 1) ? 1 : f_payload_width;
|
||||
end
|
||||
endfunction
|
||||
|
||||
task t_check_tdata_width(
|
||||
input integer data_width,
|
||||
input [8*80-1:0] var_name,
|
||||
input [8*80-1:0] inst_name,
|
||||
input integer severity_lvl,
|
||||
output integer ret_val
|
||||
);
|
||||
// Severity levels:
|
||||
// 0 = INFO
|
||||
// 1 = WARNING
|
||||
// 2 = ERROR
|
||||
begin : t_check_tdata_width
|
||||
if (data_width%8 != 0) begin
|
||||
// 000 1 2 3 4 5 6 7 8
|
||||
// 012 0 0 0 0 0 0 0 0
|
||||
if (severity_lvl >= 2) begin
|
||||
$display("ERROR: %m::%s", inst_name);
|
||||
end else if (severity_lvl == 1) begin
|
||||
$display("WARNING: %m::%s", inst_name);
|
||||
end else begin
|
||||
$display("INFO: %m::%s", inst_name);
|
||||
end
|
||||
$display(" Parameter %s (%2d) must be a multiple of 8.", var_name, data_width);
|
||||
$display(" AXI4-Stream data width is only defined for byte multiples. See the ");
|
||||
$display(" AMBA4 AXI4-Stream Protocol Specification v1.0 Section 2.1 for more");
|
||||
$display(" information.");
|
||||
ret_val = 1;
|
||||
end else begin
|
||||
ret_val = 0;
|
||||
end
|
||||
end
|
||||
endtask
|
||||
|
||||
task t_check_tuser_width(
|
||||
input integer tuser_width,
|
||||
input [8*80-1:0] tuser_name,
|
||||
input integer tdata_width,
|
||||
input [8*80-1:0] tdata_name,
|
||||
input [8*80-1:0] inst_name,
|
||||
input integer severity_lvl,
|
||||
output integer ret_val
|
||||
);
|
||||
// Severity levels:
|
||||
// 0 = INFO
|
||||
// 1 = WARNING
|
||||
// 2 = ERROR
|
||||
begin : t_check_tuser_width
|
||||
integer tdata_bytes;
|
||||
tdata_bytes = tdata_width/8;
|
||||
if ((tuser_width%tdata_bytes) != 0) begin
|
||||
// 000 1 2 3 4 5 6 7 8
|
||||
// 012 0 0 0 0 0 0 0 0
|
||||
if (severity_lvl >= 2) begin
|
||||
$display("ERROR: %m::%s", inst_name);
|
||||
end else if (severity_lvl == 1) begin
|
||||
$display("WARNING: %m::%s", inst_name);
|
||||
end else begin
|
||||
$display("INFO: %m::%s", inst_name);
|
||||
end
|
||||
$display(" Parameter %s == %2d is not the recommended value of 'an integer ", tuser_name, tuser_width);
|
||||
$display(" multiple of the width of the interface (%s == %2d) in bytes.' AXI4-Stream", tdata_name, tdata_width);
|
||||
$display(" TUSER width in this module is only defined when the TUSER is the");
|
||||
$display(" recommended value. See the AMBA4 AXI4-Stream Protocol Specification v1.0");
|
||||
$display(" Section 2.1, 2.3.3 and 2.8 for more information. ");
|
||||
ret_val = 1;
|
||||
end else begin
|
||||
ret_val = 0;
|
||||
end
|
||||
end
|
||||
endtask
|
||||
|
||||
-1318
File diff suppressed because it is too large
Load Diff
-2998
File diff suppressed because it is too large
Load Diff
-125
@@ -1,125 +0,0 @@
|
||||
// (c) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
|
||||
// (c) Copyright 2022-2026 Advanced Micro Devices, Inc. All rights reserved.
|
||||
//
|
||||
// This file contains confidential and proprietary information
|
||||
// of AMD and is protected under U.S. and international copyright
|
||||
// and other intellectual property laws.
|
||||
//
|
||||
// DISCLAIMER
|
||||
// This disclaimer is not a license and does not grant any
|
||||
// rights to the materials distributed herewith. Except as
|
||||
// otherwise provided in a valid license issued to you by
|
||||
// AMD, and to the maximum extent permitted by applicable
|
||||
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
|
||||
// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES
|
||||
// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
|
||||
// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
|
||||
// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
|
||||
// (2) AMD shall not be liable (whether in contract or tort,
|
||||
// including negligence, or under any other theory of
|
||||
// liability) for any loss or damage of any kind or nature
|
||||
// related to, arising under or in connection with these
|
||||
// materials, including for any direct, or any indirect,
|
||||
// special, incidental, or consequential loss or damage
|
||||
// (including loss of data, profits, goodwill, or any type of
|
||||
// loss or damage suffered as a result of any action brought
|
||||
// by a third party) even if such damage or loss was
|
||||
// reasonably foreseeable or AMD had been advised of the
|
||||
// possibility of the same.
|
||||
//
|
||||
// CRITICAL APPLICATIONS
|
||||
// AMD products are not designed or intended to be fail-
|
||||
// safe, or for use in any application requiring fail-safe
|
||||
// performance, such as life-support or safety devices or
|
||||
// systems, Class III medical devices, nuclear facilities,
|
||||
// applications related to the deployment of airbags, or any
|
||||
// other applications that could lead to death, personal
|
||||
// injury, or severe property or environmental damage
|
||||
// (individually and collectively, "Critical
|
||||
// Applications"). Customer assumes the sole risk and
|
||||
// liability of any use of AMD products in Critical
|
||||
// Applications, subject only to applicable laws and
|
||||
// regulations governing limitations on product liability.
|
||||
//
|
||||
// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
|
||||
// PART OF THIS FILE AT ALL TIMES.
|
||||
//
|
||||
// DO NOT MODIFY THIS FILE.
|
||||
|
||||
|
||||
// IP VLNV: xilinx.com:ip:axis_register_slice:1.1
|
||||
// IP Revision: 29
|
||||
|
||||
(* X_CORE_INFO = "axis_register_slice_v1_1_29_axis_register_slice,Vivado 2023.2" *)
|
||||
(* CHECK_LICENSE_TYPE = "axis_register_slice_32,axis_register_slice_v1_1_29_axis_register_slice,{}" *)
|
||||
(* CORE_GENERATION_INFO = "axis_register_slice_32,axis_register_slice_v1_1_29_axis_register_slice,{x_ipProduct=Vivado 2023.2,x_ipVendor=xilinx.com,x_ipLibrary=ip,x_ipName=axis_register_slice,x_ipVersion=1.1,x_ipCoreRevision=29,x_ipLanguage=VERILOG,x_ipSimLanguage=MIXED,C_FAMILY=zynquplus,C_AXIS_TDATA_WIDTH=32,C_AXIS_TID_WIDTH=1,C_AXIS_TDEST_WIDTH=1,C_AXIS_TUSER_WIDTH=1,C_AXIS_SIGNAL_SET=0b00000000000000000000000000000011,C_REG_CONFIG=8,C_NUM_SLR_CROSSINGS=0,C_PIPELINES_MASTER=0,C_PIPELINES_SLAVE=0,C_PIPELINES_MIDDLE=0}" *)
|
||||
(* DowngradeIPIdentifiedWarnings = "yes" *)
|
||||
module axis_register_slice_32 (
|
||||
aclk,
|
||||
aresetn,
|
||||
s_axis_tvalid,
|
||||
s_axis_tready,
|
||||
s_axis_tdata,
|
||||
m_axis_tvalid,
|
||||
m_axis_tready,
|
||||
m_axis_tdata
|
||||
);
|
||||
|
||||
(* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME CLKIF, FREQ_HZ 10000000, FREQ_TOLERANCE_HZ 0, PHASE 0.0, INSERT_VIP 0" *)
|
||||
(* X_INTERFACE_INFO = "xilinx.com:signal:clock:1.0 CLKIF CLK" *)
|
||||
input wire aclk;
|
||||
(* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME RSTIF, POLARITY ACTIVE_LOW, INSERT_VIP 0" *)
|
||||
(* X_INTERFACE_INFO = "xilinx.com:signal:reset:1.0 RSTIF RST" *)
|
||||
input wire aresetn;
|
||||
(* X_INTERFACE_INFO = "xilinx.com:interface:axis:1.0 S_AXIS TVALID" *)
|
||||
input wire s_axis_tvalid;
|
||||
(* X_INTERFACE_INFO = "xilinx.com:interface:axis:1.0 S_AXIS TREADY" *)
|
||||
output wire s_axis_tready;
|
||||
(* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME S_AXIS, TDATA_NUM_BYTES 4, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 1, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.0, LAYERED_METADATA undef, INSERT_VIP 0" *)
|
||||
(* X_INTERFACE_INFO = "xilinx.com:interface:axis:1.0 S_AXIS TDATA" *)
|
||||
input wire [31 : 0] s_axis_tdata;
|
||||
(* X_INTERFACE_INFO = "xilinx.com:interface:axis:1.0 M_AXIS TVALID" *)
|
||||
output wire m_axis_tvalid;
|
||||
(* X_INTERFACE_INFO = "xilinx.com:interface:axis:1.0 M_AXIS TREADY" *)
|
||||
input wire m_axis_tready;
|
||||
(* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME M_AXIS, TDATA_NUM_BYTES 4, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 1, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.0, LAYERED_METADATA undef, INSERT_VIP 0" *)
|
||||
(* X_INTERFACE_INFO = "xilinx.com:interface:axis:1.0 M_AXIS TDATA" *)
|
||||
output wire [31 : 0] m_axis_tdata;
|
||||
|
||||
axis_register_slice_v1_1_29_axis_register_slice #(
|
||||
.C_FAMILY("zynquplus"),
|
||||
.C_AXIS_TDATA_WIDTH(32),
|
||||
.C_AXIS_TID_WIDTH(1),
|
||||
.C_AXIS_TDEST_WIDTH(1),
|
||||
.C_AXIS_TUSER_WIDTH(1),
|
||||
.C_AXIS_SIGNAL_SET(32'B00000000000000000000000000000011),
|
||||
.C_REG_CONFIG(8),
|
||||
.C_NUM_SLR_CROSSINGS(0),
|
||||
.C_PIPELINES_MASTER(0),
|
||||
.C_PIPELINES_SLAVE(0),
|
||||
.C_PIPELINES_MIDDLE(0)
|
||||
) inst (
|
||||
.aclk(aclk),
|
||||
.aclk2x(1'H0),
|
||||
.aresetn(aresetn),
|
||||
.aclken(1'H1),
|
||||
.s_axis_tvalid(s_axis_tvalid),
|
||||
.s_axis_tready(s_axis_tready),
|
||||
.s_axis_tdata(s_axis_tdata),
|
||||
.s_axis_tstrb(4'HF),
|
||||
.s_axis_tkeep(4'HF),
|
||||
.s_axis_tlast(1'H1),
|
||||
.s_axis_tid(1'H0),
|
||||
.s_axis_tdest(1'H0),
|
||||
.s_axis_tuser(1'H0),
|
||||
.m_axis_tvalid(m_axis_tvalid),
|
||||
.m_axis_tready(m_axis_tready),
|
||||
.m_axis_tdata(m_axis_tdata),
|
||||
.m_axis_tstrb(),
|
||||
.m_axis_tkeep(),
|
||||
.m_axis_tlast(),
|
||||
.m_axis_tid(),
|
||||
.m_axis_tdest(),
|
||||
.m_axis_tuser()
|
||||
);
|
||||
endmodule
|
||||
@@ -1,321 +0,0 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- Company:
|
||||
-- Engineer:
|
||||
--
|
||||
-- Create Date: 16:53:22 03/24/2017
|
||||
-- Design Name:
|
||||
-- Module Name:
|
||||
-- Project Name: xem7350
|
||||
-- Target Device:
|
||||
-- Tool versions:
|
||||
-- Description:
|
||||
--
|
||||
-- VHDL Test Bench Created by ISE for module: dac_interface
|
||||
--
|
||||
-- Dependencies:
|
||||
--
|
||||
-- Revision:
|
||||
-- Revision 0.01 - File Created
|
||||
-- Additional Comments:
|
||||
--
|
||||
-- Notes:
|
||||
-- This testbench has been automatically generated using types std_logic and
|
||||
-- std_logic_vector for the ports of the unit under test. Xilinx recommends
|
||||
-- that these types always be used for the top-level I/O of a design in order
|
||||
-- to guarantee that the testbench will bind correctly to the post-implementation
|
||||
-- simulation model.
|
||||
--------------------------------------------------------------------------------
|
||||
LIBRARY ieee;
|
||||
USE ieee.std_logic_1164.ALL;
|
||||
USE IEEE.STD_LOGIC_arith.ALL;
|
||||
USE IEEE.STD_LOGIC_unsigned.ALL;
|
||||
|
||||
-- Uncomment the following library declaration if using
|
||||
-- arithmetic functions with Signed or Unsigned values
|
||||
--USE ieee.numeric_std.ALL;
|
||||
|
||||
Library xpm;
|
||||
use xpm.vcomponents.all;
|
||||
|
||||
--library UNISIM;
|
||||
--use UNISIM.VComponents.all;
|
||||
|
||||
entity dds_wrapper_tb is
|
||||
end dds_wrapper_tb;
|
||||
|
||||
architecture behavior of dds_wrapper_tb is
|
||||
|
||||
-- Clock period definitions
|
||||
constant CLK_125_PERIOD : time := 8 ns; -- 125 MHz
|
||||
constant CLK_250_PERIOD : time := 4 ns; -- 250 MHz
|
||||
constant CLK_100_PERIOD : time := 10 ns; -- 100 MHz
|
||||
constant S_AXI_ACLK_PERIOD : time := 10 ns; -- 100 MHz
|
||||
constant M_AXI_ACLK_PERIOD : time := 4 ns; -- 250 MHz 2.58 ns; -- 387 MHz
|
||||
constant QSFP4_AXIS_ACLK_PERIOD : time := 5.12 ns; -- 195.310 MHz 5.12 ns;
|
||||
constant QSFP1_AXIS_ACLK_PERIOD : time := 5.12 ns; -- 195.310 MHz 5.12 ns;
|
||||
|
||||
signal clk_100 : std_logic := '0';
|
||||
signal clk_100_aresetn : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal clk_250 : std_logic := '0';
|
||||
signal clk_250_aresetn : std_logic_vector(0 to 63) := x"0000_FFFF_0000_0000";--(others => '0');
|
||||
|
||||
signal m_axis_tready_r : std_logic := '0';
|
||||
signal m_axis_tdata : std_logic_vector(127 downto 0);
|
||||
signal m_axis_tvalid : std_logic;
|
||||
signal m_axis_tready : std_logic;
|
||||
|
||||
signal util_mxfe_upack_s_axis_tdata_pipe : std_logic_vector(127 downto 0);
|
||||
signal util_mxfe_upack_s_axis_tvalid_pipe : std_logic;
|
||||
|
||||
signal m_axis_tdata_1 : std_logic_vector(127 downto 0);
|
||||
signal m_axis_tvalid_1 : std_logic;
|
||||
signal m_axis_tready_1 : std_logic;
|
||||
|
||||
signal cmd_send_i : std_logic_vector(0 to 3) := (others => '0');
|
||||
signal dac_holdoff_r : std_logic := '1';
|
||||
|
||||
signal chan1_i : std_logic_vector(15 downto 0);
|
||||
signal chan1_q : std_logic_vector(15 downto 0);
|
||||
signal chan2_i : std_logic_vector(15 downto 0);
|
||||
signal chan2_q : std_logic_vector(15 downto 0);
|
||||
signal chan3_i : std_logic_vector(15 downto 0);
|
||||
signal chan3_q : std_logic_vector(15 downto 0);
|
||||
signal chan4_i : std_logic_vector(15 downto 0);
|
||||
signal chan4_q : std_logic_vector(15 downto 0);
|
||||
|
||||
signal cmd_send_0_r : std_logic_vector(0 to 2) := (others => '0');
|
||||
signal cmd_send_1_r : std_logic_vector(0 to 2) := (others => '0');
|
||||
signal cmd_send_2_r : std_logic_vector(0 to 2) := (others => '0');
|
||||
signal cmd_send_3_r : std_logic_vector(0 to 2) := (others => '0');
|
||||
signal cnt_reset : std_logic := '0';
|
||||
|
||||
begin
|
||||
|
||||
clk_100 <= not clk_100 after CLK_100_PERIOD/2;
|
||||
clk_250 <= not clk_250 after CLK_250_PERIOD/2;
|
||||
|
||||
|
||||
--
|
||||
process(clk_100)
|
||||
begin
|
||||
if (rising_edge(clk_100)) then
|
||||
clk_100_aresetn <= clk_100_aresetn(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
--
|
||||
process(clk_250)
|
||||
begin
|
||||
if (rising_edge(clk_250)) then
|
||||
clk_250_aresetn <= clk_250_aresetn(1 to 63) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
||||
process (clk_100)
|
||||
begin
|
||||
if rising_edge(clk_100) then
|
||||
if (cmd_send_i(0) = '1') then
|
||||
cmd_send_0_r <= "111";
|
||||
else
|
||||
cmd_send_0_r <= cmd_send_0_r(1 to 2) & '0';
|
||||
end if;
|
||||
|
||||
if (cmd_send_i(1) = '1') then
|
||||
cmd_send_1_r <= "111";
|
||||
else
|
||||
cmd_send_1_r <= cmd_send_1_r(1 to 2) & '0';
|
||||
end if;
|
||||
|
||||
if (cmd_send_i(2) = '1') then
|
||||
cmd_send_2_r <= "111";
|
||||
else
|
||||
cmd_send_2_r <= cmd_send_2_r(1 to 2) & '0';
|
||||
end if;
|
||||
|
||||
if (cmd_send_i(3) = '1') then
|
||||
cmd_send_3_r <= "111";
|
||||
else
|
||||
cmd_send_3_r <= cmd_send_3_r(1 to 2) & '0';
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
||||
i_dds_pulse_intfc_x4 : entity work.dds_pulse_intfc_x4
|
||||
port map (
|
||||
s_axi_aclk_in => clk_100,
|
||||
s_axi_aresetn_in => clk_100_aresetn(0),
|
||||
|
||||
cmd_idx_in => "000",
|
||||
dac_holdoff_in => dac_holdoff_r,
|
||||
|
||||
cmd_send_0_in => cmd_send_0_r(0),
|
||||
scale_0_in => x"8000",
|
||||
dds_phase_inc_dwell_time_0_in => x"00000000",
|
||||
dds_phase_inc_step_size_0_in => x"0000D6BF",
|
||||
idle_samples_0_in => x"00000000",
|
||||
dds_samples_0_in => x"000004E2",
|
||||
phase_inc_0_in => x"010624DD",
|
||||
phase_off_0_in => x"00000000",
|
||||
swap_sf_0_in => x"00008000",
|
||||
|
||||
cmd_send_1_in => cmd_send_1_r(0),
|
||||
scale_1_in => x"8000",
|
||||
dds_phase_inc_dwell_time_1_in => x"00000000",
|
||||
dds_phase_inc_step_size_1_in => x"0000D6BF",
|
||||
idle_samples_1_in => x"00000000",
|
||||
dds_samples_1_in => x"000004E2", --x"000004E2",
|
||||
phase_inc_1_in => x"010624DD",
|
||||
phase_off_1_in => x"00000000",
|
||||
swap_sf_1_in => x"00008000",
|
||||
|
||||
cmd_send_2_in => cmd_send_2_r(0),
|
||||
scale_2_in => x"8000",
|
||||
dds_phase_inc_dwell_time_2_in => x"00000000",
|
||||
dds_phase_inc_step_size_2_in => x"0000D6BF",
|
||||
idle_samples_2_in => x"00000000",
|
||||
dds_samples_2_in => x"000004E2",
|
||||
phase_inc_2_in => x"010624DD",
|
||||
phase_off_2_in => x"00000000",
|
||||
swap_sf_2_in => x"00008000",
|
||||
|
||||
cmd_send_3_in => cmd_send_3_r(0),
|
||||
scale_3_in => x"8000",
|
||||
dds_phase_inc_dwell_time_3_in => x"00000000",
|
||||
dds_phase_inc_step_size_3_in => x"0000D6BF",
|
||||
idle_samples_3_in => x"00000000",
|
||||
dds_samples_3_in => x"000004E2",
|
||||
phase_inc_3_in => x"010624DD",
|
||||
phase_off_3_in => x"00000000",
|
||||
swap_sf_3_in => x"00008000",
|
||||
|
||||
m_axis_aclk_in => clk_250,
|
||||
m_axis_aresetn_in => clk_250_aresetn(0),
|
||||
m0_axis_tdata_out => m_axis_tdata,
|
||||
m0_axis_tvalid_out => m_axis_tvalid,
|
||||
m0_axis_tready_in => m_axis_tready,
|
||||
|
||||
m1_axis_tdata_out => open,
|
||||
m1_axis_tvalid_out => open,
|
||||
m1_axis_tready_in => '1',
|
||||
|
||||
cnt_reset_in => cnt_reset,
|
||||
m0_axis_tvalid_cnt_out => open,
|
||||
m0_dds_pulse_data_cnt_out => open,
|
||||
m1_axis_tvalid_cnt_out => open,
|
||||
m1_dds_pulse_data_cnt_out => open
|
||||
);
|
||||
|
||||
|
||||
-- big FIFO before JESD TX PORT
|
||||
i_dac_data_fifo_32kx128 : entity work.axis_data_fifo_32kx128
|
||||
port map (
|
||||
s_axis_aclk => clk_250, -- in
|
||||
s_axis_aresetn => clk_250_aresetn(0), -- in
|
||||
s_axis_tdata => m_axis_tdata, -- in
|
||||
s_axis_tvalid => m_axis_tvalid, -- in
|
||||
s_axis_tready => m_axis_tready, -- out
|
||||
|
||||
m_axis_tdata => m_axis_tdata_1, -- out
|
||||
m_axis_tvalid => m_axis_tvalid_1, -- out
|
||||
m_axis_tready => m_axis_tready_1 -- in
|
||||
);
|
||||
|
||||
-- big FIFO before JESD TX PORT
|
||||
i_dac_data_fifo_32kx128_1 : entity work.axis_data_fifo_32kx128
|
||||
port map (
|
||||
s_axis_aclk => clk_250, -- in
|
||||
s_axis_aresetn => clk_250_aresetn(0), -- in
|
||||
s_axis_tdata => m_axis_tdata_1, -- in
|
||||
s_axis_tvalid => m_axis_tvalid_1, -- in
|
||||
s_axis_tready => m_axis_tready_1, -- out
|
||||
|
||||
m_axis_tdata => util_mxfe_upack_s_axis_tdata_pipe, -- out
|
||||
m_axis_tvalid => util_mxfe_upack_s_axis_tvalid_pipe, -- out
|
||||
m_axis_tready => m_axis_tready_r -- in
|
||||
);
|
||||
|
||||
|
||||
chan1_i <= util_mxfe_upack_s_axis_tdata_pipe(15 downto 0);
|
||||
chan1_q <= util_mxfe_upack_s_axis_tdata_pipe(31 downto 16);
|
||||
|
||||
chan2_i <= util_mxfe_upack_s_axis_tdata_pipe(47 downto 32);
|
||||
chan2_q <= util_mxfe_upack_s_axis_tdata_pipe(63 downto 48);
|
||||
|
||||
chan3_i <= util_mxfe_upack_s_axis_tdata_pipe(79 downto 64);
|
||||
chan3_q <= util_mxfe_upack_s_axis_tdata_pipe(95 downto 80);
|
||||
|
||||
chan4_i <= util_mxfe_upack_s_axis_tdata_pipe(111 downto 96);
|
||||
chan4_q <= util_mxfe_upack_s_axis_tdata_pipe(127 downto 112);
|
||||
|
||||
-- Stimulus process
|
||||
stim_proc: process
|
||||
begin
|
||||
|
||||
wait until clk_100_aresetn(0) = '1';
|
||||
|
||||
-- wait for 24 us;
|
||||
|
||||
wait until rising_edge(clk_250);
|
||||
m_axis_tready_r <= '1';
|
||||
wait for 1 us;
|
||||
|
||||
wait until rising_edge(clk_100);
|
||||
cmd_send_i(0) <= '1';
|
||||
wait for 200 ns;
|
||||
wait until rising_edge(clk_100);
|
||||
cmd_send_i(0) <= '0';
|
||||
wait for 1 us;
|
||||
wait until rising_edge(clk_100);
|
||||
cmd_send_i(1) <= '1';
|
||||
wait for 200 ns;
|
||||
wait until rising_edge(clk_100);
|
||||
cmd_send_i(1) <= '0';
|
||||
|
||||
wait for 1 us;
|
||||
wait until rising_edge(clk_100);
|
||||
cmd_send_i(2) <= '1';
|
||||
wait for 200 ns;
|
||||
wait until rising_edge(clk_100);
|
||||
cmd_send_i(2) <= '0';
|
||||
|
||||
wait for 1 us;
|
||||
wait until rising_edge(clk_100);
|
||||
cmd_send_i(3) <= '1';
|
||||
wait for 200 ns;
|
||||
wait until rising_edge(clk_100);
|
||||
cmd_send_i(3) <= '0';
|
||||
|
||||
wait for 1 us;
|
||||
wait until rising_edge(clk_100);
|
||||
dac_holdoff_r <= '0';
|
||||
|
||||
|
||||
wait for 8 us;
|
||||
cnt_reset <= '1';
|
||||
wait until rising_edge(clk_100);
|
||||
cnt_reset <= '0';
|
||||
|
||||
-- m_axis_tready_r <= '0';
|
||||
-- wait until rising_edge(clk_250);
|
||||
|
||||
|
||||
-- m_axis_tready_r <= '1';
|
||||
-- wait until rising_edge(clk_250);
|
||||
|
||||
|
||||
-- m_axis_tready_r <= '0';
|
||||
-- wait until rising_edge(clk_250);
|
||||
|
||||
|
||||
-- m_axis_tready_r <= '1';
|
||||
|
||||
wait until rising_edge(clk_100);
|
||||
|
||||
wait; -- wait here forever
|
||||
end process;
|
||||
|
||||
|
||||
|
||||
end;
|
||||
@@ -1,286 +0,0 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- Company:
|
||||
-- Engineer:
|
||||
--
|
||||
-- Create Date: 16:53:22 03/24/2017
|
||||
-- Design Name:
|
||||
-- Module Name:
|
||||
-- Project Name: xem7350
|
||||
-- Target Device:
|
||||
-- Tool versions:
|
||||
-- Description:
|
||||
--
|
||||
-- VHDL Test Bench Created by ISE for module: dac_interface
|
||||
--
|
||||
-- Dependencies:
|
||||
--
|
||||
-- Revision:
|
||||
-- Revision 0.01 - File Created
|
||||
-- Additional Comments:
|
||||
--
|
||||
-- Notes:
|
||||
-- This testbench has been automatically generated using types std_logic and
|
||||
-- std_logic_vector for the ports of the unit under test. Xilinx recommends
|
||||
-- that these types always be used for the top-level I/O of a design in order
|
||||
-- to guarantee that the testbench will bind correctly to the post-implementation
|
||||
-- simulation model.
|
||||
--------------------------------------------------------------------------------
|
||||
LIBRARY ieee;
|
||||
USE ieee.std_logic_1164.ALL;
|
||||
USE IEEE.STD_LOGIC_arith.ALL;
|
||||
USE IEEE.STD_LOGIC_unsigned.ALL;
|
||||
|
||||
-- Uncomment the following library declaration if using
|
||||
-- arithmetic functions with Signed or Unsigned values
|
||||
--USE ieee.numeric_std.ALL;
|
||||
|
||||
entity tb_cap_plybk is
|
||||
end tb_cap_plybk;
|
||||
|
||||
architecture behavior of tb_cap_plybk is
|
||||
|
||||
constant C_M_AXI_DATA_WIDTH : integer := 32;
|
||||
constant C_M_AXI_ADDR_WIDTH : integer := 32;
|
||||
|
||||
-- Clock period definitions
|
||||
constant CLK_125_PERIOD : time := 8 ns; -- 125 MHz
|
||||
constant CLK_250_PERIOD : time := 4 ns; -- 250 MHz
|
||||
constant S_AXI_ACLK_PERIOD : time := 10 ns; -- 100 MHz
|
||||
constant M_AXI_ACLK_PERIOD : time := 4 ns; -- 250 MHz 2.58 ns; -- 387 MHz
|
||||
constant QSFP4_AXIS_ACLK_PERIOD : time := 5.12 ns; -- 195.310 MHz 5.12 ns;
|
||||
constant QSFP1_AXIS_ACLK_PERIOD : time := 5.12 ns; -- 195.310 MHz 5.12 ns;
|
||||
|
||||
signal clk_125 : std_logic := '0';
|
||||
signal clk_125_aresetn : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal clk_125_reset : std_logic;
|
||||
|
||||
signal clk_250 : std_logic := '0';
|
||||
signal clk_250_aresetn : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal clk_250_areset : std_logic;
|
||||
|
||||
signal tx_device_clk_1 : std_logic := '0';
|
||||
signal tx_device_clk_aresetn_r : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal tx_device_clk_aresetn : std_logic;
|
||||
|
||||
signal rx_device_clk_1 : std_logic := '0';
|
||||
signal rx_device_clk_aresetn_r : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal rx_device_clk_aresetn : std_logic;
|
||||
signal rx_device_clk_areset : std_logic;
|
||||
|
||||
signal qsfp4_playback_aclk : std_logic := '0';
|
||||
signal qsfp4_axis_aresetn_r : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal qsfp4_playback_aresetn : std_logic;
|
||||
|
||||
signal qsfp1_capture_aclk : std_logic;
|
||||
signal qsfp1_axis_aresetn_r : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal qsfp1_capture_aresetn : std_logic;
|
||||
|
||||
|
||||
--
|
||||
signal tick_1ms : std_logic;
|
||||
|
||||
signal clk_125_tick_1ms_r : std_logic_vector(0 to 2) := (others => '0');
|
||||
signal clk_125_freq_r : std_logic_vector(31 downto 0) := (others => '0');
|
||||
signal clk_125_cnt_r : std_logic_vector(31 downto 0) := (others => '0');
|
||||
|
||||
signal clk_250_tick_1ms_r : std_logic_vector(0 to 2) := (others => '0');
|
||||
signal clk_250_freq_r : std_logic_vector(31 downto 0) := (others => '0');
|
||||
signal clk_250_cnt_r : std_logic_vector(31 downto 0) := (others => '0');
|
||||
|
||||
|
||||
signal adc_rx_tdata_128b : std_logic_vector(127 downto 0) := (others => '0');
|
||||
signal adc_rx_tvalid_128b : std_logic := '0';
|
||||
signal adc_rx_tready_128b : std_logic;
|
||||
signal adc_rx_tvalid_128b_cnt : std_logic_vector(31 downto 0);
|
||||
|
||||
|
||||
|
||||
signal qsfp4_playback_tdata_240b : std_logic_vector(239 downto 0);
|
||||
signal qsfp4_playback_tvalid_240b : std_logic;
|
||||
signal qsfp4_playback_tready_240b : std_logic := '1';
|
||||
|
||||
|
||||
signal qsfp1_capture_tdata_240b : std_logic_vector(239 downto 0);
|
||||
signal qsfp1_capture_tvalid_240b : std_logic;
|
||||
|
||||
|
||||
signal tx_tdata_128b : std_logic_vector(127 downto 0);
|
||||
signal tx_tvalid_128b : std_logic;
|
||||
signal tx_tready_128b : std_logic := '1';
|
||||
|
||||
signal qsfp1_capture_rx_data_ready : std_logic;
|
||||
|
||||
signal playback_data_path_enable_n : std_logic := '1';
|
||||
|
||||
signal adc_rx_tvalid_128b_ena : std_logic;
|
||||
|
||||
begin
|
||||
|
||||
clk_125 <= not clk_125 after CLK_125_PERIOD/2;
|
||||
clk_250 <= not clk_250 after CLK_250_PERIOD/2;
|
||||
tx_device_clk_1 <= not tx_device_clk_1 after CLK_250_PERIOD/2;
|
||||
rx_device_clk_1 <= not rx_device_clk_1 after CLK_250_PERIOD/2;
|
||||
|
||||
qsfp4_playback_aclk <= not qsfp4_playback_aclk after QSFP4_AXIS_ACLK_PERIOD/2;
|
||||
-- qsfp1_capture_aclk <= not qsfp1_capture_aclk after QSFP1_AXIS_ACLK_PERIOD/2;
|
||||
|
||||
--
|
||||
process(clk_125)
|
||||
begin
|
||||
if (rising_edge(clk_125)) then
|
||||
clk_125_aresetn <= clk_125_aresetn(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
process(clk_125)
|
||||
begin
|
||||
if (rising_edge(clk_125)) then
|
||||
clk_125_aresetn <= clk_125_aresetn(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
clk_125_reset <= not clk_125_aresetn(0);
|
||||
--
|
||||
process(clk_250)
|
||||
begin
|
||||
if (rising_edge(clk_250)) then
|
||||
clk_250_aresetn <= clk_250_aresetn(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
clk_250_areset <= not clk_250_aresetn(0);
|
||||
--
|
||||
process(tx_device_clk_1)
|
||||
begin
|
||||
if (rising_edge(tx_device_clk_1)) then
|
||||
tx_device_clk_aresetn_r <= tx_device_clk_aresetn_r(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
tx_device_clk_aresetn <= tx_device_clk_aresetn_r(0);
|
||||
|
||||
--
|
||||
process(rx_device_clk_1)
|
||||
begin
|
||||
if (rising_edge(rx_device_clk_1)) then
|
||||
rx_device_clk_aresetn_r <= rx_device_clk_aresetn_r(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
rx_device_clk_aresetn <= rx_device_clk_aresetn_r(0);
|
||||
|
||||
--
|
||||
process(qsfp4_playback_aclk)
|
||||
begin
|
||||
if (rising_edge(qsfp4_playback_aclk)) then
|
||||
qsfp4_axis_aresetn_r <= qsfp4_axis_aresetn_r(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
qsfp4_playback_aresetn <= qsfp4_axis_aresetn_r(0);
|
||||
|
||||
|
||||
--
|
||||
process(rx_device_clk_1)
|
||||
begin
|
||||
if (rising_edge(rx_device_clk_1)) then
|
||||
adc_rx_tdata_128b <= adc_rx_tdata_128b + x"0003_0002_0001_0004_0005_0006_0007_0008";
|
||||
end if;
|
||||
end process;
|
||||
|
||||
--
|
||||
process(qsfp1_capture_aclk)
|
||||
begin
|
||||
if (rising_edge(qsfp1_capture_aclk)) then
|
||||
qsfp1_axis_aresetn_r <= qsfp1_axis_aresetn_r(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
qsfp1_capture_aresetn <= qsfp1_axis_aresetn_r(0);
|
||||
|
||||
adc_rx_tvalid_128b_ena <= adc_rx_tvalid_128b and qsfp1_capture_rx_data_ready;
|
||||
|
||||
i_qsfp4_playback_intfc : entity work.qsfp4_playback_intfc
|
||||
port map (
|
||||
rx_device_clk_in => rx_device_clk_1,
|
||||
rx_device_clk_aresetn_in => rx_device_clk_aresetn,
|
||||
rx_tdata_128b_in => adc_rx_tdata_128b,
|
||||
rx_tvalid_128b_in => adc_rx_tvalid_128b_ena,
|
||||
rx_tready_128b_out => adc_rx_tready_128b,
|
||||
rx_tvalid_128b_cnt_out => adc_rx_tvalid_128b_cnt,
|
||||
rx_tvalid_128b_en_cnt_out => open,
|
||||
playback_data_path_enable_n_in => playback_data_path_enable_n,
|
||||
|
||||
qsfp4_playback_aclk_in => qsfp4_playback_aclk,
|
||||
qsfp4_playback_aresetn_in => qsfp4_playback_aresetn,
|
||||
qsfp4_playback_tdata_240b_out => qsfp4_playback_tdata_240b,
|
||||
qsfp4_playback_tvalid_240b_out => qsfp4_playback_tvalid_240b,
|
||||
qsfp4_playback_tready_240b_in => qsfp4_playback_tready_240b,
|
||||
qsfp4_playback_tvalid_240b_cnt_out => open,
|
||||
|
||||
cnt_reset_in => '0'
|
||||
);
|
||||
|
||||
--///////////////////////////////
|
||||
|
||||
qsfp1_capture_aclk <= qsfp4_playback_aclk; --
|
||||
qsfp1_capture_tdata_240b <= qsfp4_playback_tdata_240b; --
|
||||
qsfp1_capture_tvalid_240b <= qsfp4_playback_tvalid_240b; --
|
||||
|
||||
|
||||
--///////////////////////////////
|
||||
--// ****>>>> FROM QSFP1 CAPTURE INTERFACE
|
||||
i_qsfp1_capture_intfc : entity work.qsfp1_capture_intfc
|
||||
port map (
|
||||
qsfp1_capture_aclk_in => qsfp1_capture_aclk,
|
||||
qsfp1_capture_aresetn_in => qsfp1_capture_aresetn,
|
||||
qsfp1_capture_tdata_240b_in => qsfp1_capture_tdata_240b,
|
||||
qsfp1_capture_tvalid_240b_in => qsfp1_capture_tvalid_240b,
|
||||
qsfp1_capture_tvalid_240b_cnt_out => open,
|
||||
qsfp1_capture_fifo_aempty_512b_cnt_out => open,
|
||||
qsfp1_capture_iq_240b_to_512b_overflow_cnt_out => open,
|
||||
|
||||
qsfp1_capture_rx_data_ready_out => qsfp1_capture_rx_data_ready,
|
||||
qsfp1_capture_rx_data_ready_cnt_out => open,
|
||||
|
||||
tx_device_clk_in => tx_device_clk_1,
|
||||
tx_device_clk_aresetn_in => tx_device_clk_aresetn,
|
||||
tx_tdata_128b_out => tx_tdata_128b, -- out
|
||||
tx_tvalid_128b_out => tx_tvalid_128b, -- out
|
||||
tx_tready_128b_in => tx_tready_128b, -- in
|
||||
tx_tvalid_128b_cnt_out => open,
|
||||
|
||||
cnt_reset_in => '0'
|
||||
);
|
||||
|
||||
|
||||
|
||||
-- Stimulus process
|
||||
stim_proc: process
|
||||
begin
|
||||
|
||||
wait until rx_device_clk_aresetn = '1';
|
||||
|
||||
wait for 200 ns;
|
||||
|
||||
|
||||
wait until rising_edge(rx_device_clk_1);
|
||||
adc_rx_tvalid_128b <= '1';
|
||||
|
||||
wait for 500 ns;
|
||||
wait until rising_edge(rx_device_clk_1);
|
||||
playback_data_path_enable_n <= '0';
|
||||
|
||||
wait for 5 us;
|
||||
wait until rising_edge(qsfp4_playback_aclk);
|
||||
playback_data_path_enable_n <='0';
|
||||
|
||||
wait for 5 us;
|
||||
wait until rising_edge(qsfp4_playback_aclk);
|
||||
qsfp4_playback_tready_240b <='1';
|
||||
|
||||
wait; -- wait here forever
|
||||
end process;
|
||||
|
||||
|
||||
end;
|
||||
@@ -1,141 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wave_config>
|
||||
<wave_state>
|
||||
</wave_state>
|
||||
<db_ref_list>
|
||||
<db_ref path="tb_cap_plybk_behav.wdb" id="1">
|
||||
<top_modules>
|
||||
<top_module name="\$unit_xpm_cdc_sv_220102727 " />
|
||||
<top_module name="glbl" />
|
||||
<top_module name="tb_cap_plybk" />
|
||||
<top_module name="vcomponents" />
|
||||
</top_modules>
|
||||
</db_ref>
|
||||
</db_ref_list>
|
||||
<zoom_setting>
|
||||
<ZoomStartTime time="0.000000 us"></ZoomStartTime>
|
||||
<ZoomEndTime time="16.000001 us"></ZoomEndTime>
|
||||
<Cursor1Time time="1.268070 us"></Cursor1Time>
|
||||
</zoom_setting>
|
||||
<column_width_setting>
|
||||
<NameColumnWidth column_width="375"></NameColumnWidth>
|
||||
<ValueColumnWidth column_width="73"></ValueColumnWidth>
|
||||
</column_width_setting>
|
||||
<WVObjectSize size="29" />
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/rx_device_clk_1">
|
||||
<obj_property name="ElementShortName">rx_device_clk_1</obj_property>
|
||||
<obj_property name="ObjectShortName">rx_device_clk_1</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/rx_device_clk_aresetn_r">
|
||||
<obj_property name="ElementShortName">rx_device_clk_aresetn_r[0:15]</obj_property>
|
||||
<obj_property name="ObjectShortName">rx_device_clk_aresetn_r[0:15]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/rx_device_clk_aresetn">
|
||||
<obj_property name="ElementShortName">rx_device_clk_aresetn</obj_property>
|
||||
<obj_property name="ObjectShortName">rx_device_clk_aresetn</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/qsfp4_playback_aclk">
|
||||
<obj_property name="ElementShortName">qsfp4_playback_aclk</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp4_playback_aclk</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/qsfp4_axis_aresetn_r">
|
||||
<obj_property name="ElementShortName">qsfp4_axis_aresetn_r[0:15]</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp4_axis_aresetn_r[0:15]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/qsfp4_playback_aresetn">
|
||||
<obj_property name="ElementShortName">qsfp4_playback_aresetn</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp4_playback_aresetn</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/adc_rx_tdata_128b">
|
||||
<obj_property name="ElementShortName">adc_rx_tdata_128b[127:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">adc_rx_tdata_128b[127:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/adc_rx_tvalid_128b">
|
||||
<obj_property name="ElementShortName">adc_rx_tvalid_128b</obj_property>
|
||||
<obj_property name="ObjectShortName">adc_rx_tvalid_128b</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/adc_rx_tready_128b">
|
||||
<obj_property name="ElementShortName">adc_rx_tready_128b</obj_property>
|
||||
<obj_property name="ObjectShortName">adc_rx_tready_128b</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/adc_rx_tdata_128b_overflow">
|
||||
<obj_property name="ElementShortName">adc_rx_tdata_128b_overflow</obj_property>
|
||||
<obj_property name="ObjectShortName">adc_rx_tdata_128b_overflow</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/i_qsfp4_playback_intfc/rx_tvalid_128b_cnt_out">
|
||||
<obj_property name="ElementShortName">rx_tvalid_128b_cnt_out[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">rx_tvalid_128b_cnt_out[31:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/i_qsfp4_playback_intfc/rx_tvalid_128b_en_cnt_out">
|
||||
<obj_property name="ElementShortName">rx_tvalid_128b_en_cnt_out[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">rx_tvalid_128b_en_cnt_out[31:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/qsfp4_playback_tdata_240b">
|
||||
<obj_property name="ElementShortName">qsfp4_playback_tdata_240b[239:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp4_playback_tdata_240b[239:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/i_qsfp4_playback_intfc/qsfp4_playback_tvalid_240b">
|
||||
<obj_property name="ElementShortName">qsfp4_playback_tvalid_240b</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp4_playback_tvalid_240b</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/qsfp4_playback_tready_240b">
|
||||
<obj_property name="ElementShortName">qsfp4_playback_tready_240b</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp4_playback_tready_240b</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/i_qsfp4_playback_intfc/qsfp4_playback_tvalid_240b_cnt_out">
|
||||
<obj_property name="ElementShortName">qsfp4_playback_tvalid_240b_cnt_out[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp4_playback_tvalid_240b_cnt_out[31:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/playback_data_path_enable_n">
|
||||
<obj_property name="ElementShortName">playback_data_path_enable_n</obj_property>
|
||||
<obj_property name="ObjectShortName">playback_data_path_enable_n</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/qsfp1_capture_tdata_240b">
|
||||
<obj_property name="ElementShortName">qsfp1_capture_tdata_240b[239:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp1_capture_tdata_240b[239:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/qsfp1_capture_tvalid_240b">
|
||||
<obj_property name="ElementShortName">qsfp1_capture_tvalid_240b</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp1_capture_tvalid_240b</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/qsfp1_capture_rx_data_ready">
|
||||
<obj_property name="ElementShortName">qsfp1_capture_rx_data_ready</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp1_capture_rx_data_ready</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/i_qsfp1_capture_intfc/qsfp1_capture_rx_data_ready_cnt_out">
|
||||
<obj_property name="ElementShortName">qsfp1_capture_rx_data_ready_cnt_out[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp1_capture_rx_data_ready_cnt_out[31:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/i_qsfp1_capture_intfc/qsfp1_capture_fifo_aempty_512b_cnt_out">
|
||||
<obj_property name="ElementShortName">qsfp1_capture_fifo_aempty_512b_cnt_out[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp1_capture_fifo_aempty_512b_cnt_out[31:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/i_qsfp1_capture_intfc/qsfp1_capture_iq_240b_to_512b_overflow_cnt_out">
|
||||
<obj_property name="ElementShortName">qsfp1_capture_iq_240b_to_512b_overflow_cnt_out[31:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp1_capture_iq_240b_to_512b_overflow_cnt_out[31:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="array" fp_name="/tb_cap_plybk/tx_tdata_128b">
|
||||
<obj_property name="ElementShortName">tx_tdata_128b[127:0]</obj_property>
|
||||
<obj_property name="ObjectShortName">tx_tdata_128b[127:0]</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/tx_tvalid_128b">
|
||||
<obj_property name="ElementShortName">tx_tvalid_128b</obj_property>
|
||||
<obj_property name="ObjectShortName">tx_tvalid_128b</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/tx_tready_128b">
|
||||
<obj_property name="ElementShortName">tx_tready_128b</obj_property>
|
||||
<obj_property name="ObjectShortName">tx_tready_128b</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/i_qsfp1_capture_intfc/qsfp1_tready_512b">
|
||||
<obj_property name="ElementShortName">qsfp1_tready_512b</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp1_tready_512b</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/i_qsfp1_capture_intfc/qsfp1_tready_512b_pipe">
|
||||
<obj_property name="ElementShortName">qsfp1_tready_512b_pipe</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp1_tready_512b_pipe</obj_property>
|
||||
</wvobject>
|
||||
<wvobject type="logic" fp_name="/tb_cap_plybk/i_qsfp1_capture_intfc/qsfp1_tready_128b">
|
||||
<obj_property name="ElementShortName">qsfp1_tready_128b</obj_property>
|
||||
<obj_property name="ObjectShortName">qsfp1_tready_128b</obj_property>
|
||||
</wvobject>
|
||||
</wave_config>
|
||||
@@ -1,188 +0,0 @@
|
||||
--------------------------------------------------------------------------------
|
||||
-- Company:
|
||||
-- Engineer:
|
||||
--
|
||||
-- Create Date: 16:53:22 03/24/2017
|
||||
-- Design Name:
|
||||
-- Module Name:
|
||||
-- Project Name: xem7350
|
||||
-- Target Device:
|
||||
-- Tool versions:
|
||||
-- Description:
|
||||
--
|
||||
-- VHDL Test Bench Created by ISE for module: dac_interface
|
||||
--
|
||||
-- Dependencies:
|
||||
--
|
||||
-- Revision:
|
||||
-- Revision 0.01 - File Created
|
||||
-- Additional Comments:
|
||||
--
|
||||
-- Notes:
|
||||
-- This testbench has been automatically generated using types std_logic and
|
||||
-- std_logic_vector for the ports of the unit under test. Xilinx recommends
|
||||
-- that these types always be used for the top-level I/O of a design in order
|
||||
-- to guarantee that the testbench will bind correctly to the post-implementation
|
||||
-- simulation model.
|
||||
--------------------------------------------------------------------------------
|
||||
LIBRARY ieee;
|
||||
USE ieee.std_logic_1164.ALL;
|
||||
USE IEEE.STD_LOGIC_arith.ALL;
|
||||
USE IEEE.STD_LOGIC_unsigned.ALL;
|
||||
|
||||
-- Uncomment the following library declaration if using
|
||||
-- arithmetic functions with Signed or Unsigned values
|
||||
--USE ieee.numeric_std.ALL;
|
||||
|
||||
entity test_bench is
|
||||
end test_bench;
|
||||
|
||||
architecture behavior of test_bench is
|
||||
|
||||
constant C_M_AXI_DATA_WIDTH : integer := 32;
|
||||
constant C_M_AXI_ADDR_WIDTH : integer := 32;
|
||||
|
||||
-- Clock period definitions
|
||||
constant CLK_125_PERIOD : time := 8 ns; -- 125 MHz
|
||||
constant CLK_250_PERIOD : time := 4 ns; -- 250 MHz
|
||||
constant S_AXI_ACLK_PERIOD : time := 10 ns; -- 100 MHz
|
||||
constant M_AXI_ACLK_PERIOD : time := 4 ns; -- 250 MHz 2.58 ns; -- 387 MHz
|
||||
constant QSFP4_AXIS_ACLK_PERIOD : time := 5.12 ns; -- 195.310 MHz 5.12 ns;
|
||||
constant QSFP1_AXIS_ACLK_PERIOD : time := 5.12 ns; -- 195.310 MHz 5.12 ns;
|
||||
|
||||
signal clk_125 : std_logic := '0';
|
||||
signal clk_125_aresetn : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal clk_125_reset : std_logic;
|
||||
|
||||
signal clk_250 : std_logic := '0';
|
||||
signal clk_250_aresetn : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal clk_250_areset : std_logic;
|
||||
|
||||
signal tx_device_clk_1 : std_logic := '0';
|
||||
signal tx_device_clk_aresetn_r : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal tx_device_clk_aresetn : std_logic;
|
||||
|
||||
signal rx_device_clk_1 : std_logic := '0';
|
||||
signal rx_device_clk_aresetn_r : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal rx_device_clk_aresetn : std_logic;
|
||||
signal rx_device_clk_areset : std_logic;
|
||||
|
||||
signal qsfp4_axis_aclk : std_logic := '0';
|
||||
signal qsfp4_axis_aresetn_r : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal qsfp4_axis_aresetn : std_logic;
|
||||
|
||||
signal qsfp1_axis_aclk : std_logic := '0';
|
||||
signal qsfp1_axis_aresetn_r : std_logic_vector(0 to 15) := (others => '0');
|
||||
signal qsfp1_axis_aresetn : std_logic;
|
||||
|
||||
|
||||
--
|
||||
signal tick_1ms : std_logic;
|
||||
|
||||
signal clk_125_tick_1ms_r : std_logic_vector(0 to 2) := (others => '0');
|
||||
signal clk_125_freq_r : std_logic_vector(31 downto 0) := (others => '0');
|
||||
signal clk_125_cnt_r : std_logic_vector(31 downto 0) := (others => '0');
|
||||
|
||||
signal clk_250_tick_1ms_r : std_logic_vector(0 to 2) := (others => '0');
|
||||
signal clk_250_freq_r : std_logic_vector(31 downto 0) := (others => '0');
|
||||
signal clk_250_cnt_r : std_logic_vector(31 downto 0) := (others => '0');
|
||||
|
||||
|
||||
|
||||
begin
|
||||
|
||||
clk_125 <= not clk_125 after CLK_125_PERIOD/2;
|
||||
clk_250 <= not clk_250 after CLK_250_PERIOD/2;
|
||||
tx_device_clk_1 <= not tx_device_clk_1 after CLK_250_PERIOD/2;
|
||||
rx_device_clk_1 <= not rx_device_clk_1 after CLK_250_PERIOD/2;
|
||||
|
||||
qsfp4_axis_aclk <= not qsfp4_axis_aclk after QSFP4_AXIS_ACLK_PERIOD/2;
|
||||
qsfp1_axis_aclk <= not qsfp1_axis_aclk after QSFP1_AXIS_ACLK_PERIOD/2;
|
||||
|
||||
--
|
||||
process(clk_125)
|
||||
begin
|
||||
if (rising_edge(clk_125)) then
|
||||
clk_125_aresetn <= clk_125_aresetn(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
process(clk_125)
|
||||
begin
|
||||
if (rising_edge(clk_125)) then
|
||||
clk_125_aresetn <= clk_125_aresetn(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
clk_125_reset <= not clk_125_aresetn(0);
|
||||
--
|
||||
process(clk_250)
|
||||
begin
|
||||
if (rising_edge(clk_250)) then
|
||||
clk_250_aresetn <= clk_250_aresetn(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
clk_250_areset <= not clk_250_aresetn(0);
|
||||
--
|
||||
process(tx_device_clk_1)
|
||||
begin
|
||||
if (rising_edge(tx_device_clk_1)) then
|
||||
tx_device_clk_aresetn_r <= tx_device_clk_aresetn_r(1 to 15) & '1';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
tx_device_clk_aresetn <= tx_device_clk_aresetn_r(0);
|
||||
|
||||
|
||||
------------------------------------------------
|
||||
i_tick_gen : entity work.tick_gen
|
||||
generic map (
|
||||
CLOCK_SPEED_MHZ => 125
|
||||
)
|
||||
port map (
|
||||
clk_in => clk_125,
|
||||
|
||||
tick_1us_out => open,
|
||||
tick_1ms_out => tick_1ms,
|
||||
tick_500ms_out => open,
|
||||
tick_750ms_out => open,
|
||||
tick_1s_out => open,
|
||||
|
||||
prog_us_tick_rate_in => x"0000_0000",
|
||||
prog_us_tick_out => open,
|
||||
|
||||
reset_in => clk_125_reset
|
||||
);
|
||||
|
||||
|
||||
process(clk_125)
|
||||
begin
|
||||
if (rising_edge(clk_125)) then
|
||||
clk_125_tick_1ms_r <= clk_125_tick_1ms_r(1 to 2) & tick_1ms;
|
||||
if (clk_125_tick_1ms_r(0 to 1) = "01") then
|
||||
clk_125_freq_r <= clk_125_cnt_r;
|
||||
clk_125_cnt_r <= (others => '0');
|
||||
else
|
||||
clk_125_cnt_r <= clk_125_cnt_r + 1;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
process(clk_250)
|
||||
begin
|
||||
if (rising_edge(clk_250)) then
|
||||
clk_250_tick_1ms_r <= clk_250_tick_1ms_r(1 to 2) & tick_1ms;
|
||||
if (clk_250_tick_1ms_r(0 to 1) = "01") then
|
||||
clk_250_freq_r <= clk_250_cnt_r;
|
||||
clk_250_cnt_r <= (others => '0');
|
||||
else
|
||||
clk_250_cnt_r <= clk_250_cnt_r + 1;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
|
||||
|
||||
|
||||
end;
|
||||
Reference in New Issue
Block a user