archive dl814_dj_48m, add dl814_k7_cal_coarse

This commit is contained in:
2023-03-21 20:20:28 +08:00
parent fa4d745322
commit 0832a08d3d
3264 changed files with 9610614 additions and 13 deletions
@@ -0,0 +1 @@
The files in this directory structure are automatically generated and managed by Vivado. Editing these files is not recommended.
@@ -0,0 +1,70 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:blk_mem_gen:8.4
// IP Revision: 3
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
COSLUT_10_16bit your_instance_name (
.clka(clka), // input wire clka
.addra(addra), // input wire [12 : 0] addra
.douta(douta), // output wire [17 : 0] douta
.clkb(clkb), // input wire clkb
.addrb(addrb), // input wire [12 : 0] addrb
.doutb(doutb) // output wire [17 : 0] doutb
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file COSLUT_10_16bit.v when simulating
// the core, COSLUT_10_16bit. When compiling the wrapper file, be sure to
// reference the Verilog simulation library.
@@ -0,0 +1,85 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:blk_mem_gen:8.4
-- IP Revision: 3
-- The following code must appear in the VHDL architecture header.
------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT COSLUT_10_16bit
PORT (
clka : IN STD_LOGIC;
addra : IN STD_LOGIC_VECTOR(12 DOWNTO 0);
douta : OUT STD_LOGIC_VECTOR(17 DOWNTO 0);
clkb : IN STD_LOGIC;
addrb : IN STD_LOGIC_VECTOR(12 DOWNTO 0);
doutb : OUT STD_LOGIC_VECTOR(17 DOWNTO 0)
);
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------
-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.
------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : COSLUT_10_16bit
PORT MAP (
clka => clka,
addra => addra,
douta => douta,
clkb => clkb,
addrb => addrb,
doutb => doutb
);
-- INST_TAG_END ------ End INSTANTIATION Template ---------
-- You must compile the wrapper file COSLUT_10_16bit.vhd when simulating
-- the core, COSLUT_10_16bit. When compiling the wrapper file, be sure to
-- reference the VHDL simulation library.
@@ -0,0 +1,25 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:34:22 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/COSLUT_10_16bit_synth_1/COSLUT_10_16bit_stub.v
// Design : COSLUT_10_16bit
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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 = "blk_mem_gen_v8_4_3,Vivado 2019.1.3" *)
module COSLUT_10_16bit(clka, addra, douta, clkb, addrb, doutb)
/* synthesis syn_black_box black_box_pad_pin="clka,addra[12:0],douta[17:0],clkb,addrb[12:0],doutb[17:0]" */;
input clka;
input [12:0]addra;
output [17:0]douta;
input clkb;
input [12:0]addrb;
output [17:0]doutb;
endmodule
@@ -0,0 +1,35 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:34:22 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/COSLUT_10_16bit_synth_1/COSLUT_10_16bit_stub.vhdl
-- Design : COSLUT_10_16bit
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity COSLUT_10_16bit is
Port (
clka : in STD_LOGIC;
addra : in STD_LOGIC_VECTOR ( 12 downto 0 );
douta : out STD_LOGIC_VECTOR ( 17 downto 0 );
clkb : in STD_LOGIC;
addrb : in STD_LOGIC_VECTOR ( 12 downto 0 );
doutb : out STD_LOGIC_VECTOR ( 17 downto 0 )
);
end COSLUT_10_16bit;
architecture stub of COSLUT_10_16bit 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 "clka,addra[12:0],douta[17:0],clkb,addrb[12:0],doutb[17:0]";
attribute x_core_info : string;
attribute x_core_info of stub : architecture is "blk_mem_gen_v8_4_3,Vivado 2019.1.3";
begin
end;
@@ -0,0 +1,221 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:blk_mem_gen:8.4
// IP Revision: 3
`timescale 1ns/1ps
(* DowngradeIPIdentifiedWarnings = "yes" *)
module COSLUT_10_16bit (
clka,
addra,
douta,
clkb,
addrb,
doutb
);
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTA CLK" *)
input wire clka;
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTA ADDR" *)
input wire [12 : 0] addra;
(* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME BRAM_PORTA, MEM_SIZE 8192, MEM_WIDTH 32, MEM_ECC NONE, MASTER_TYPE OTHER, READ_LATENCY 1" *)
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTA DOUT" *)
output wire [17 : 0] douta;
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTB CLK" *)
input wire clkb;
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTB ADDR" *)
input wire [12 : 0] addrb;
(* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME BRAM_PORTB, MEM_SIZE 8192, MEM_WIDTH 32, MEM_ECC NONE, MASTER_TYPE OTHER, READ_LATENCY 1" *)
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTB DOUT" *)
output wire [17 : 0] doutb;
blk_mem_gen_v8_4_3 #(
.C_FAMILY("kintex7"),
.C_XDEVICEFAMILY("kintex7"),
.C_ELABORATION_DIR("./"),
.C_INTERFACE_TYPE(0),
.C_AXI_TYPE(1),
.C_AXI_SLAVE_TYPE(0),
.C_USE_BRAM_BLOCK(0),
.C_ENABLE_32BIT_ADDRESS(0),
.C_CTRL_ECC_ALGO("NONE"),
.C_HAS_AXI_ID(0),
.C_AXI_ID_WIDTH(4),
.C_MEM_TYPE(4),
.C_BYTE_SIZE(9),
.C_ALGORITHM(1),
.C_PRIM_TYPE(1),
.C_LOAD_INIT_FILE(1),
.C_INIT_FILE_NAME("COSLUT_10_16bit.mif"),
.C_INIT_FILE("COSLUT_10_16bit.mem"),
.C_USE_DEFAULT_DATA(0),
.C_DEFAULT_DATA("0"),
.C_HAS_RSTA(0),
.C_RST_PRIORITY_A("CE"),
.C_RSTRAM_A(0),
.C_INITA_VAL("0"),
.C_HAS_ENA(0),
.C_HAS_REGCEA(0),
.C_USE_BYTE_WEA(0),
.C_WEA_WIDTH(1),
.C_WRITE_MODE_A("WRITE_FIRST"),
.C_WRITE_WIDTH_A(18),
.C_READ_WIDTH_A(18),
.C_WRITE_DEPTH_A(8192),
.C_READ_DEPTH_A(8192),
.C_ADDRA_WIDTH(13),
.C_HAS_RSTB(0),
.C_RST_PRIORITY_B("CE"),
.C_RSTRAM_B(0),
.C_INITB_VAL("0"),
.C_HAS_ENB(0),
.C_HAS_REGCEB(0),
.C_USE_BYTE_WEB(0),
.C_WEB_WIDTH(1),
.C_WRITE_MODE_B("WRITE_FIRST"),
.C_WRITE_WIDTH_B(18),
.C_READ_WIDTH_B(18),
.C_WRITE_DEPTH_B(8192),
.C_READ_DEPTH_B(8192),
.C_ADDRB_WIDTH(13),
.C_HAS_MEM_OUTPUT_REGS_A(1),
.C_HAS_MEM_OUTPUT_REGS_B(1),
.C_HAS_MUX_OUTPUT_REGS_A(1),
.C_HAS_MUX_OUTPUT_REGS_B(1),
.C_MUX_PIPELINE_STAGES(0),
.C_HAS_SOFTECC_INPUT_REGS_A(0),
.C_HAS_SOFTECC_OUTPUT_REGS_B(0),
.C_USE_SOFTECC(0),
.C_USE_ECC(0),
.C_EN_ECC_PIPE(0),
.C_READ_LATENCY_A(1),
.C_READ_LATENCY_B(1),
.C_HAS_INJECTERR(0),
.C_SIM_COLLISION_CHECK("ALL"),
.C_COMMON_CLK(0),
.C_DISABLE_WARN_BHV_COLL(0),
.C_EN_SLEEP_PIN(0),
.C_USE_URAM(0),
.C_EN_RDADDRA_CHG(0),
.C_EN_RDADDRB_CHG(0),
.C_EN_DEEPSLEEP_PIN(0),
.C_EN_SHUTDOWN_PIN(0),
.C_EN_SAFETY_CKT(0),
.C_DISABLE_WARN_BHV_RANGE(0),
.C_COUNT_36K_BRAM("4"),
.C_COUNT_18K_BRAM("0"),
.C_EST_POWER_SUMMARY("Estimated Power for IP : 9.414399 mW")
) inst (
.clka(clka),
.rsta(1'D0),
.ena(1'D0),
.regcea(1'D0),
.wea(1'B0),
.addra(addra),
.dina(18'B0),
.douta(douta),
.clkb(clkb),
.rstb(1'D0),
.enb(1'D0),
.regceb(1'D0),
.web(1'B0),
.addrb(addrb),
.dinb(18'B0),
.doutb(doutb),
.injectsbiterr(1'D0),
.injectdbiterr(1'D0),
.eccpipece(1'D0),
.sbiterr(),
.dbiterr(),
.rdaddrecc(),
.sleep(1'D0),
.deepsleep(1'D0),
.shutdown(1'D0),
.rsta_busy(),
.rstb_busy(),
.s_aclk(1'H0),
.s_aresetn(1'D0),
.s_axi_awid(4'B0),
.s_axi_awaddr(32'B0),
.s_axi_awlen(8'B0),
.s_axi_awsize(3'B0),
.s_axi_awburst(2'B0),
.s_axi_awvalid(1'D0),
.s_axi_awready(),
.s_axi_wdata(18'B0),
.s_axi_wstrb(1'B0),
.s_axi_wlast(1'D0),
.s_axi_wvalid(1'D0),
.s_axi_wready(),
.s_axi_bid(),
.s_axi_bresp(),
.s_axi_bvalid(),
.s_axi_bready(1'D0),
.s_axi_arid(4'B0),
.s_axi_araddr(32'B0),
.s_axi_arlen(8'B0),
.s_axi_arsize(3'B0),
.s_axi_arburst(2'B0),
.s_axi_arvalid(1'D0),
.s_axi_arready(),
.s_axi_rid(),
.s_axi_rdata(),
.s_axi_rresp(),
.s_axi_rlast(),
.s_axi_rvalid(),
.s_axi_rready(1'D0),
.s_axi_injectsbiterr(1'D0),
.s_axi_injectdbiterr(1'D0),
.s_axi_sbiterr(),
.s_axi_dbiterr(),
.s_axi_rdaddrecc()
);
endmodule
@@ -0,0 +1,70 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:fir_compiler:7.2
// IP Revision: 12
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
GaussFir_12m your_instance_name (
.aclk(aclk), // input wire aclk
.s_axis_data_tvalid(s_axis_data_tvalid), // input wire s_axis_data_tvalid
.s_axis_data_tready(s_axis_data_tready), // output wire s_axis_data_tready
.s_axis_data_tdata(s_axis_data_tdata), // input wire [7 : 0] s_axis_data_tdata
.m_axis_data_tvalid(m_axis_data_tvalid), // output wire m_axis_data_tvalid
.m_axis_data_tdata(m_axis_data_tdata) // output wire [15 : 0] m_axis_data_tdata
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file GaussFir_12m.v when simulating
// the core, GaussFir_12m. When compiling the wrapper file, be sure to
// reference the Verilog simulation library.
@@ -0,0 +1,85 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:fir_compiler:7.2
-- IP Revision: 12
-- The following code must appear in the VHDL architecture header.
------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT GaussFir_12m
PORT (
aclk : IN STD_LOGIC;
s_axis_data_tvalid : IN STD_LOGIC;
s_axis_data_tready : OUT STD_LOGIC;
s_axis_data_tdata : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
m_axis_data_tvalid : OUT STD_LOGIC;
m_axis_data_tdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------
-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.
------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : GaussFir_12m
PORT MAP (
aclk => aclk,
s_axis_data_tvalid => s_axis_data_tvalid,
s_axis_data_tready => s_axis_data_tready,
s_axis_data_tdata => s_axis_data_tdata,
m_axis_data_tvalid => m_axis_data_tvalid,
m_axis_data_tdata => m_axis_data_tdata
);
-- INST_TAG_END ------ End INSTANTIATION Template ---------
-- You must compile the wrapper file GaussFir_12m.vhd when simulating
-- the core, GaussFir_12m. When compiling the wrapper file, be sure to
-- reference the VHDL simulation library.
@@ -0,0 +1,26 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:48 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/GaussFir_12m_synth_1/GaussFir_12m_stub.v
// Design : GaussFir_12m
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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 = "fir_compiler_v7_2_12,Vivado 2019.1.3" *)
module GaussFir_12m(aclk, s_axis_data_tvalid, s_axis_data_tready,
s_axis_data_tdata, m_axis_data_tvalid, m_axis_data_tdata)
/* synthesis syn_black_box black_box_pad_pin="aclk,s_axis_data_tvalid,s_axis_data_tready,s_axis_data_tdata[7:0],m_axis_data_tvalid,m_axis_data_tdata[15:0]" */;
input aclk;
input s_axis_data_tvalid;
output s_axis_data_tready;
input [7:0]s_axis_data_tdata;
output m_axis_data_tvalid;
output [15:0]m_axis_data_tdata;
endmodule
@@ -0,0 +1,35 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:48 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/GaussFir_12m_synth_1/GaussFir_12m_stub.vhdl
-- Design : GaussFir_12m
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity GaussFir_12m is
Port (
aclk : in STD_LOGIC;
s_axis_data_tvalid : in STD_LOGIC;
s_axis_data_tready : out STD_LOGIC;
s_axis_data_tdata : in STD_LOGIC_VECTOR ( 7 downto 0 );
m_axis_data_tvalid : out STD_LOGIC;
m_axis_data_tdata : out STD_LOGIC_VECTOR ( 15 downto 0 )
);
end GaussFir_12m;
architecture stub of GaussFir_12m 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,s_axis_data_tvalid,s_axis_data_tready,s_axis_data_tdata[7:0],m_axis_data_tvalid,m_axis_data_tdata[15:0]";
attribute x_core_info : string;
attribute x_core_info of stub : architecture is "fir_compiler_v7_2_12,Vivado 2019.1.3";
begin
end;
@@ -0,0 +1,261 @@
--------------------------------------------------------------------------------
-- (c) Copyright 2011 - 2013 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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.
--------------------------------------------------------------------------------
-- Description:
-- This is an example testbench for the FIR Compiler IP core.
-- The testbench has been generated by Vivado to accompany the IP core
-- instance you have generated.
--
-- This testbench is for demonstration purposes only. See note below for
-- instructions on how to use it with your core.
--
-- See the FIR Compiler product guide for further information
-- about this core.
--
--------------------------------------------------------------------------------
-- Using this testbench
--
-- This testbench instantiates your generated FIR Compiler core
-- instance named "GaussFir_12m".
--
-- Use Vivado's Run Simulation flow to run this testbench. See the Vivado
-- documentation for details.
--------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity tb_GaussFir_12m is
end tb_GaussFir_12m;
architecture tb of tb_GaussFir_12m is
-----------------------------------------------------------------------
-- Timing constants
-----------------------------------------------------------------------
constant CLOCK_PERIOD : time := 100 ns;
constant T_HOLD : time := 10 ns;
constant T_STROBE : time := CLOCK_PERIOD - (1 ns);
-----------------------------------------------------------------------
-- DUT signals
-----------------------------------------------------------------------
-- General signals
signal aclk : std_logic := '0'; -- the master clock
-- Data slave channel signals
signal s_axis_data_tvalid : std_logic := '0'; -- payload is valid
signal s_axis_data_tready : std_logic := '1'; -- slave is ready
signal s_axis_data_tdata : std_logic_vector(7 downto 0) := (others => '0'); -- data payload
-- Data master channel signals
signal m_axis_data_tvalid : std_logic := '0'; -- payload is valid
signal m_axis_data_tdata : std_logic_vector(15 downto 0) := (others => '0'); -- data payload
-----------------------------------------------------------------------
-- Aliases for AXI channel TDATA and TUSER fields
-- These are a convenience for viewing data in a simulator waveform viewer.
-- If using ModelSim or Questa, add "-voptargs=+acc=n" to the vsim command
-- to prevent the simulator optimizing away these signals.
-----------------------------------------------------------------------
-- Data slave channel alias signals
signal s_axis_data_tdata_data : std_logic_vector(1 downto 0) := (others => '0');
-- Data master channel alias signals
signal m_axis_data_tdata_data : std_logic_vector(14 downto 0) := (others => '0');
begin
-----------------------------------------------------------------------
-- Instantiate the DUT
-----------------------------------------------------------------------
dut : entity work.GaussFir_12m
port map (
aclk => aclk,
s_axis_data_tvalid => s_axis_data_tvalid,
s_axis_data_tready => s_axis_data_tready,
s_axis_data_tdata => s_axis_data_tdata,
m_axis_data_tvalid => m_axis_data_tvalid,
m_axis_data_tdata => m_axis_data_tdata
);
-----------------------------------------------------------------------
-- Generate clock
-----------------------------------------------------------------------
clock_gen : process
begin
aclk <= '0';
wait for CLOCK_PERIOD;
loop
aclk <= '0';
wait for CLOCK_PERIOD/2;
aclk <= '1';
wait for CLOCK_PERIOD/2;
end loop;
end process clock_gen;
-----------------------------------------------------------------------
-- Generate inputs
-----------------------------------------------------------------------
stimuli : process
-- Procedure to drive a number of input samples with specific data
-- data is the data value to drive on the tdata signal
-- samples is the number of zero-data input samples to drive
procedure drive_data ( data : std_logic_vector(7 downto 0);
samples : natural := 1 ) is
variable ip_count : integer := 0;
begin
ip_count := 0;
loop
s_axis_data_tvalid <= '1';
s_axis_data_tdata <= data;
loop
wait until rising_edge(aclk);
exit when s_axis_data_tready = '1';
end loop;
ip_count := ip_count + 1;
wait for T_HOLD;
-- Input rate is 1 input each 4 clock cycles: drive valid inputs at this rate
s_axis_data_tvalid <= '0';
wait for CLOCK_PERIOD * 3;
exit when ip_count >= samples;
end loop;
end procedure drive_data;
-- Procedure to drive a number of zero-data input samples
-- samples is the number of zero-data input samples to drive
procedure drive_zeros ( samples : natural := 1 ) is
begin
drive_data((others => '0'), samples);
end procedure drive_zeros;
-- Procedure to drive an impulse and let the impulse response emerge on the data master channel
-- samples is the number of input samples to drive; default is enough for impulse response output to emerge
procedure drive_impulse ( samples : natural := 27 ) is
variable impulse : std_logic_vector(7 downto 0);
begin
impulse := (others => '0'); -- initialize unused bits to zero
impulse(1 downto 0) := "01";
drive_data(impulse);
if samples > 1 then
drive_zeros(samples-1);
end if;
end procedure drive_impulse;
begin
-- Drive inputs T_HOLD time after rising edge of clock
wait until rising_edge(aclk);
wait for T_HOLD;
-- Drive a single impulse and let the impulse response emerge
drive_impulse;
-- Drive another impulse, during which demonstrate use and effect of AXI handshaking signals
drive_impulse(2); -- start of impulse; data is now zero
s_axis_data_tvalid <= '0';
wait for CLOCK_PERIOD * 20; -- provide no data for 5 input samples worth
drive_zeros(2); -- 2 normal input samples
s_axis_data_tvalid <= '1';
wait for CLOCK_PERIOD * 20; -- provide data as fast as the core can accept it for 5 input samples worth
drive_zeros(18); -- back to normal operation
-- End of test
report "Not a real failure. Simulation finished successfully. Test completed successfully" severity failure;
wait;
end process stimuli;
-----------------------------------------------------------------------
-- Check outputs
-----------------------------------------------------------------------
check_outputs : process
variable check_ok : boolean := true;
begin
-- Check outputs T_STROBE time after rising edge of clock
wait until rising_edge(aclk);
wait for T_STROBE;
-- Do not check the output payload values, as this requires the behavioral model
-- which would make this demonstration testbench unwieldy.
-- Instead, check the protocol of the master DATA channel:
-- check that the payload is valid (not X) when TVALID is high
if m_axis_data_tvalid = '1' then
if is_x(m_axis_data_tdata) then
report "ERROR: m_axis_data_tdata is invalid when m_axis_data_tvalid is high" severity error;
check_ok := false;
end if;
end if;
assert check_ok
report "ERROR: terminating test with failures." severity failure;
end process check_outputs;
-----------------------------------------------------------------------
-- Assign TDATA / TUSER fields to aliases, for easy simulator waveform viewing
-----------------------------------------------------------------------
-- Data slave channel alias signals
s_axis_data_tdata_data <= s_axis_data_tdata(1 downto 0);
-- Data master channel alias signals: update these only when they are valid
m_axis_data_tdata_data <= m_axis_data_tdata(14 downto 0) when m_axis_data_tvalid = '1';
end tb;
@@ -0,0 +1,281 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:fir_compiler:7.2
-- IP Revision: 12
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY fir_compiler_v7_2_12;
USE fir_compiler_v7_2_12.fir_compiler_v7_2_12;
ENTITY GaussFir_12m IS
PORT (
aclk : IN STD_LOGIC;
s_axis_data_tvalid : IN STD_LOGIC;
s_axis_data_tready : OUT STD_LOGIC;
s_axis_data_tdata : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
m_axis_data_tvalid : OUT STD_LOGIC;
m_axis_data_tdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END GaussFir_12m;
ARCHITECTURE GaussFir_12m_arch OF GaussFir_12m IS
ATTRIBUTE DowngradeIPIdentifiedWarnings : STRING;
ATTRIBUTE DowngradeIPIdentifiedWarnings OF GaussFir_12m_arch: ARCHITECTURE IS "yes";
COMPONENT fir_compiler_v7_2_12 IS
GENERIC (
C_XDEVICEFAMILY : STRING;
C_ELABORATION_DIR : STRING;
C_COMPONENT_NAME : STRING;
C_COEF_FILE : STRING;
C_COEF_FILE_LINES : INTEGER;
C_FILTER_TYPE : INTEGER;
C_INTERP_RATE : INTEGER;
C_DECIM_RATE : INTEGER;
C_ZERO_PACKING_FACTOR : INTEGER;
C_SYMMETRY : INTEGER;
C_NUM_FILTS : INTEGER;
C_NUM_TAPS : INTEGER;
C_NUM_CHANNELS : INTEGER;
C_CHANNEL_PATTERN : STRING;
C_ROUND_MODE : INTEGER;
C_COEF_RELOAD : INTEGER;
C_NUM_RELOAD_SLOTS : INTEGER;
C_COL_MODE : INTEGER;
C_COL_PIPE_LEN : INTEGER;
C_COL_CONFIG : STRING;
C_OPTIMIZATION : INTEGER;
C_DATA_PATH_WIDTHS : STRING;
C_DATA_IP_PATH_WIDTHS : STRING;
C_DATA_PX_PATH_WIDTHS : STRING;
C_DATA_WIDTH : INTEGER;
C_COEF_PATH_WIDTHS : STRING;
C_COEF_WIDTH : INTEGER;
C_DATA_PATH_SRC : STRING;
C_COEF_PATH_SRC : STRING;
C_PX_PATH_SRC : STRING;
C_DATA_PATH_SIGN : STRING;
C_COEF_PATH_SIGN : STRING;
C_ACCUM_PATH_WIDTHS : STRING;
C_OUTPUT_WIDTH : INTEGER;
C_OUTPUT_PATH_WIDTHS : STRING;
C_ACCUM_OP_PATH_WIDTHS : STRING;
C_EXT_MULT_CNFG : STRING;
C_DATA_PATH_PSAMP_SRC : STRING;
C_OP_PATH_PSAMP_SRC : STRING;
C_NUM_MADDS : INTEGER;
C_OPT_MADDS : STRING;
C_OVERSAMPLING_RATE : INTEGER;
C_INPUT_RATE : INTEGER;
C_OUTPUT_RATE : INTEGER;
C_DATA_MEMTYPE : INTEGER;
C_COEF_MEMTYPE : INTEGER;
C_IPBUFF_MEMTYPE : INTEGER;
C_OPBUFF_MEMTYPE : INTEGER;
C_DATAPATH_MEMTYPE : INTEGER;
C_MEM_ARRANGEMENT : INTEGER;
C_DATA_MEM_PACKING : INTEGER;
C_COEF_MEM_PACKING : INTEGER;
C_FILTS_PACKED : INTEGER;
C_LATENCY : INTEGER;
C_HAS_ARESETn : INTEGER;
C_HAS_ACLKEN : INTEGER;
C_DATA_HAS_TLAST : INTEGER;
C_S_DATA_HAS_FIFO : INTEGER;
C_S_DATA_HAS_TUSER : INTEGER;
C_S_DATA_TDATA_WIDTH : INTEGER;
C_S_DATA_TUSER_WIDTH : INTEGER;
C_M_DATA_HAS_TREADY : INTEGER;
C_M_DATA_HAS_TUSER : INTEGER;
C_M_DATA_TDATA_WIDTH : INTEGER;
C_M_DATA_TUSER_WIDTH : INTEGER;
C_HAS_CONFIG_CHANNEL : INTEGER;
C_CONFIG_SYNC_MODE : INTEGER;
C_CONFIG_PACKET_SIZE : INTEGER;
C_CONFIG_TDATA_WIDTH : INTEGER;
C_RELOAD_TDATA_WIDTH : INTEGER
);
PORT (
aresetn : IN STD_LOGIC;
aclk : IN STD_LOGIC;
aclken : IN STD_LOGIC;
s_axis_data_tvalid : IN STD_LOGIC;
s_axis_data_tready : OUT STD_LOGIC;
s_axis_data_tlast : IN STD_LOGIC;
s_axis_data_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_data_tdata : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
s_axis_config_tvalid : IN STD_LOGIC;
s_axis_config_tready : OUT STD_LOGIC;
s_axis_config_tlast : IN STD_LOGIC;
s_axis_config_tdata : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_reload_tvalid : IN STD_LOGIC;
s_axis_reload_tready : OUT STD_LOGIC;
s_axis_reload_tlast : IN STD_LOGIC;
s_axis_reload_tdata : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
m_axis_data_tvalid : OUT STD_LOGIC;
m_axis_data_tready : IN STD_LOGIC;
m_axis_data_tlast : OUT STD_LOGIC;
m_axis_data_tuser : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
m_axis_data_tdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
event_s_data_tlast_missing : OUT STD_LOGIC;
event_s_data_tlast_unexpected : OUT STD_LOGIC;
event_s_data_chanid_incorrect : OUT STD_LOGIC;
event_s_config_tlast_missing : OUT STD_LOGIC;
event_s_config_tlast_unexpected : OUT STD_LOGIC;
event_s_reload_tlast_missing : OUT STD_LOGIC;
event_s_reload_tlast_unexpected : OUT STD_LOGIC
);
END COMPONENT fir_compiler_v7_2_12;
ATTRIBUTE X_INTERFACE_INFO : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER : STRING;
ATTRIBUTE X_INTERFACE_INFO OF m_axis_data_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DATA TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF m_axis_data_tvalid: SIGNAL IS "XIL_INTERFACENAME M_AXIS_DATA, TDATA_NUM_BYTES 2, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF m_axis_data_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DATA TVALID";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_data_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_DATA TDATA";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_data_tready: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_DATA TREADY";
ATTRIBUTE X_INTERFACE_PARAMETER OF s_axis_data_tvalid: SIGNAL IS "XIL_INTERFACENAME S_AXIS_DATA, TDATA_NUM_BYTES 1, 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.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_data_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_DATA TVALID";
ATTRIBUTE X_INTERFACE_PARAMETER OF aclk: SIGNAL IS "XIL_INTERFACENAME aclk_intf, ASSOCIATED_BUSIF S_AXIS_CONFIG:M_AXIS_DATA:S_AXIS_DATA:S_AXIS_RELOAD, ASSOCIATED_RESET aresetn, ASSOCIATED_CLKEN aclken, FREQ_HZ 100000000, PHASE 0.000, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF aclk: SIGNAL IS "xilinx.com:signal:clock:1.0 aclk_intf CLK";
BEGIN
U0 : fir_compiler_v7_2_12
GENERIC MAP (
C_XDEVICEFAMILY => "kintex7",
C_ELABORATION_DIR => "./",
C_COMPONENT_NAME => "GaussFir_12m",
C_COEF_FILE => "GaussFir_12m.mif",
C_COEF_FILE_LINES => 20,
C_FILTER_TYPE => 2,
C_INTERP_RATE => 4,
C_DECIM_RATE => 1,
C_ZERO_PACKING_FACTOR => 1,
C_SYMMETRY => 0,
C_NUM_FILTS => 1,
C_NUM_TAPS => 17,
C_NUM_CHANNELS => 1,
C_CHANNEL_PATTERN => "fixed",
C_ROUND_MODE => 0,
C_COEF_RELOAD => 0,
C_NUM_RELOAD_SLOTS => 1,
C_COL_MODE => 1,
C_COL_PIPE_LEN => 4,
C_COL_CONFIG => "5",
C_OPTIMIZATION => 0,
C_DATA_PATH_WIDTHS => "2",
C_DATA_IP_PATH_WIDTHS => "2",
C_DATA_PX_PATH_WIDTHS => "2",
C_DATA_WIDTH => 2,
C_COEF_PATH_WIDTHS => "14",
C_COEF_WIDTH => 14,
C_DATA_PATH_SRC => "0",
C_COEF_PATH_SRC => "0",
C_PX_PATH_SRC => "0",
C_DATA_PATH_SIGN => "0",
C_COEF_PATH_SIGN => "1",
C_ACCUM_PATH_WIDTHS => "15",
C_OUTPUT_WIDTH => 15,
C_OUTPUT_PATH_WIDTHS => "15",
C_ACCUM_OP_PATH_WIDTHS => "15",
C_EXT_MULT_CNFG => "none",
C_DATA_PATH_PSAMP_SRC => "0",
C_OP_PATH_PSAMP_SRC => "0",
C_NUM_MADDS => 5,
C_OPT_MADDS => "none",
C_OVERSAMPLING_RATE => 1,
C_INPUT_RATE => 4,
C_OUTPUT_RATE => 1,
C_DATA_MEMTYPE => 0,
C_COEF_MEMTYPE => 2,
C_IPBUFF_MEMTYPE => 0,
C_OPBUFF_MEMTYPE => 0,
C_DATAPATH_MEMTYPE => 0,
C_MEM_ARRANGEMENT => 2,
C_DATA_MEM_PACKING => 0,
C_COEF_MEM_PACKING => 0,
C_FILTS_PACKED => 0,
C_LATENCY => 11,
C_HAS_ARESETn => 0,
C_HAS_ACLKEN => 0,
C_DATA_HAS_TLAST => 0,
C_S_DATA_HAS_FIFO => 0,
C_S_DATA_HAS_TUSER => 0,
C_S_DATA_TDATA_WIDTH => 8,
C_S_DATA_TUSER_WIDTH => 1,
C_M_DATA_HAS_TREADY => 0,
C_M_DATA_HAS_TUSER => 0,
C_M_DATA_TDATA_WIDTH => 16,
C_M_DATA_TUSER_WIDTH => 1,
C_HAS_CONFIG_CHANNEL => 0,
C_CONFIG_SYNC_MODE => 0,
C_CONFIG_PACKET_SIZE => 0,
C_CONFIG_TDATA_WIDTH => 1,
C_RELOAD_TDATA_WIDTH => 1
)
PORT MAP (
aresetn => '1',
aclk => aclk,
aclken => '1',
s_axis_data_tvalid => s_axis_data_tvalid,
s_axis_data_tready => s_axis_data_tready,
s_axis_data_tlast => '0',
s_axis_data_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_data_tdata => s_axis_data_tdata,
s_axis_config_tvalid => '0',
s_axis_config_tlast => '0',
s_axis_config_tdata => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_reload_tvalid => '0',
s_axis_reload_tlast => '0',
s_axis_reload_tdata => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
m_axis_data_tvalid => m_axis_data_tvalid,
m_axis_data_tready => '1',
m_axis_data_tdata => m_axis_data_tdata
);
END GaussFir_12m_arch;
@@ -0,0 +1,70 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:fir_compiler:7.2
// IP Revision: 12
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
GaussFir_1mp5 your_instance_name (
.aclk(aclk), // input wire aclk
.s_axis_data_tvalid(s_axis_data_tvalid), // input wire s_axis_data_tvalid
.s_axis_data_tready(s_axis_data_tready), // output wire s_axis_data_tready
.s_axis_data_tdata(s_axis_data_tdata), // input wire [7 : 0] s_axis_data_tdata
.m_axis_data_tvalid(m_axis_data_tvalid), // output wire m_axis_data_tvalid
.m_axis_data_tdata(m_axis_data_tdata) // output wire [15 : 0] m_axis_data_tdata
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file GaussFir_1mp5.v when simulating
// the core, GaussFir_1mp5. When compiling the wrapper file, be sure to
// reference the Verilog simulation library.
@@ -0,0 +1,85 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:fir_compiler:7.2
-- IP Revision: 12
-- The following code must appear in the VHDL architecture header.
------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT GaussFir_1mp5
PORT (
aclk : IN STD_LOGIC;
s_axis_data_tvalid : IN STD_LOGIC;
s_axis_data_tready : OUT STD_LOGIC;
s_axis_data_tdata : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
m_axis_data_tvalid : OUT STD_LOGIC;
m_axis_data_tdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------
-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.
------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : GaussFir_1mp5
PORT MAP (
aclk => aclk,
s_axis_data_tvalid => s_axis_data_tvalid,
s_axis_data_tready => s_axis_data_tready,
s_axis_data_tdata => s_axis_data_tdata,
m_axis_data_tvalid => m_axis_data_tvalid,
m_axis_data_tdata => m_axis_data_tdata
);
-- INST_TAG_END ------ End INSTANTIATION Template ---------
-- You must compile the wrapper file GaussFir_1mp5.vhd when simulating
-- the core, GaussFir_1mp5. When compiling the wrapper file, be sure to
-- reference the VHDL simulation library.
@@ -0,0 +1,26 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:47 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/GaussFir_1mp5_synth_1/GaussFir_1mp5_stub.v
// Design : GaussFir_1mp5
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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 = "fir_compiler_v7_2_12,Vivado 2019.1.3" *)
module GaussFir_1mp5(aclk, s_axis_data_tvalid, s_axis_data_tready,
s_axis_data_tdata, m_axis_data_tvalid, m_axis_data_tdata)
/* synthesis syn_black_box black_box_pad_pin="aclk,s_axis_data_tvalid,s_axis_data_tready,s_axis_data_tdata[7:0],m_axis_data_tvalid,m_axis_data_tdata[15:0]" */;
input aclk;
input s_axis_data_tvalid;
output s_axis_data_tready;
input [7:0]s_axis_data_tdata;
output m_axis_data_tvalid;
output [15:0]m_axis_data_tdata;
endmodule
@@ -0,0 +1,35 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:47 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/GaussFir_1mp5_synth_1/GaussFir_1mp5_stub.vhdl
-- Design : GaussFir_1mp5
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity GaussFir_1mp5 is
Port (
aclk : in STD_LOGIC;
s_axis_data_tvalid : in STD_LOGIC;
s_axis_data_tready : out STD_LOGIC;
s_axis_data_tdata : in STD_LOGIC_VECTOR ( 7 downto 0 );
m_axis_data_tvalid : out STD_LOGIC;
m_axis_data_tdata : out STD_LOGIC_VECTOR ( 15 downto 0 )
);
end GaussFir_1mp5;
architecture stub of GaussFir_1mp5 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,s_axis_data_tvalid,s_axis_data_tready,s_axis_data_tdata[7:0],m_axis_data_tvalid,m_axis_data_tdata[15:0]";
attribute x_core_info : string;
attribute x_core_info of stub : architecture is "fir_compiler_v7_2_12,Vivado 2019.1.3";
begin
end;
@@ -0,0 +1,261 @@
--------------------------------------------------------------------------------
-- (c) Copyright 2011 - 2013 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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.
--------------------------------------------------------------------------------
-- Description:
-- This is an example testbench for the FIR Compiler IP core.
-- The testbench has been generated by Vivado to accompany the IP core
-- instance you have generated.
--
-- This testbench is for demonstration purposes only. See note below for
-- instructions on how to use it with your core.
--
-- See the FIR Compiler product guide for further information
-- about this core.
--
--------------------------------------------------------------------------------
-- Using this testbench
--
-- This testbench instantiates your generated FIR Compiler core
-- instance named "GaussFir_1mp5".
--
-- Use Vivado's Run Simulation flow to run this testbench. See the Vivado
-- documentation for details.
--------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity tb_GaussFir_1mp5 is
end tb_GaussFir_1mp5;
architecture tb of tb_GaussFir_1mp5 is
-----------------------------------------------------------------------
-- Timing constants
-----------------------------------------------------------------------
constant CLOCK_PERIOD : time := 100 ns;
constant T_HOLD : time := 10 ns;
constant T_STROBE : time := CLOCK_PERIOD - (1 ns);
-----------------------------------------------------------------------
-- DUT signals
-----------------------------------------------------------------------
-- General signals
signal aclk : std_logic := '0'; -- the master clock
-- Data slave channel signals
signal s_axis_data_tvalid : std_logic := '0'; -- payload is valid
signal s_axis_data_tready : std_logic := '1'; -- slave is ready
signal s_axis_data_tdata : std_logic_vector(7 downto 0) := (others => '0'); -- data payload
-- Data master channel signals
signal m_axis_data_tvalid : std_logic := '0'; -- payload is valid
signal m_axis_data_tdata : std_logic_vector(15 downto 0) := (others => '0'); -- data payload
-----------------------------------------------------------------------
-- Aliases for AXI channel TDATA and TUSER fields
-- These are a convenience for viewing data in a simulator waveform viewer.
-- If using ModelSim or Questa, add "-voptargs=+acc=n" to the vsim command
-- to prevent the simulator optimizing away these signals.
-----------------------------------------------------------------------
-- Data slave channel alias signals
signal s_axis_data_tdata_data : std_logic_vector(1 downto 0) := (others => '0');
-- Data master channel alias signals
signal m_axis_data_tdata_data : std_logic_vector(12 downto 0) := (others => '0');
begin
-----------------------------------------------------------------------
-- Instantiate the DUT
-----------------------------------------------------------------------
dut : entity work.GaussFir_1mp5
port map (
aclk => aclk,
s_axis_data_tvalid => s_axis_data_tvalid,
s_axis_data_tready => s_axis_data_tready,
s_axis_data_tdata => s_axis_data_tdata,
m_axis_data_tvalid => m_axis_data_tvalid,
m_axis_data_tdata => m_axis_data_tdata
);
-----------------------------------------------------------------------
-- Generate clock
-----------------------------------------------------------------------
clock_gen : process
begin
aclk <= '0';
wait for CLOCK_PERIOD;
loop
aclk <= '0';
wait for CLOCK_PERIOD/2;
aclk <= '1';
wait for CLOCK_PERIOD/2;
end loop;
end process clock_gen;
-----------------------------------------------------------------------
-- Generate inputs
-----------------------------------------------------------------------
stimuli : process
-- Procedure to drive a number of input samples with specific data
-- data is the data value to drive on the tdata signal
-- samples is the number of zero-data input samples to drive
procedure drive_data ( data : std_logic_vector(7 downto 0);
samples : natural := 1 ) is
variable ip_count : integer := 0;
begin
ip_count := 0;
loop
s_axis_data_tvalid <= '1';
s_axis_data_tdata <= data;
loop
wait until rising_edge(aclk);
exit when s_axis_data_tready = '1';
end loop;
ip_count := ip_count + 1;
wait for T_HOLD;
-- Input rate is 1 input each 32 clock cycles: drive valid inputs at this rate
s_axis_data_tvalid <= '0';
wait for CLOCK_PERIOD * 31;
exit when ip_count >= samples;
end loop;
end procedure drive_data;
-- Procedure to drive a number of zero-data input samples
-- samples is the number of zero-data input samples to drive
procedure drive_zeros ( samples : natural := 1 ) is
begin
drive_data((others => '0'), samples);
end procedure drive_zeros;
-- Procedure to drive an impulse and let the impulse response emerge on the data master channel
-- samples is the number of input samples to drive; default is enough for impulse response output to emerge
procedure drive_impulse ( samples : natural := 165 ) is
variable impulse : std_logic_vector(7 downto 0);
begin
impulse := (others => '0'); -- initialize unused bits to zero
impulse(1 downto 0) := "01";
drive_data(impulse);
if samples > 1 then
drive_zeros(samples-1);
end if;
end procedure drive_impulse;
begin
-- Drive inputs T_HOLD time after rising edge of clock
wait until rising_edge(aclk);
wait for T_HOLD;
-- Drive a single impulse and let the impulse response emerge
drive_impulse;
-- Drive another impulse, during which demonstrate use and effect of AXI handshaking signals
drive_impulse(2); -- start of impulse; data is now zero
s_axis_data_tvalid <= '0';
wait for CLOCK_PERIOD * 160; -- provide no data for 5 input samples worth
drive_zeros(2); -- 2 normal input samples
s_axis_data_tvalid <= '1';
wait for CLOCK_PERIOD * 160; -- provide data as fast as the core can accept it for 5 input samples worth
drive_zeros(156); -- back to normal operation
-- End of test
report "Not a real failure. Simulation finished successfully. Test completed successfully" severity failure;
wait;
end process stimuli;
-----------------------------------------------------------------------
-- Check outputs
-----------------------------------------------------------------------
check_outputs : process
variable check_ok : boolean := true;
begin
-- Check outputs T_STROBE time after rising edge of clock
wait until rising_edge(aclk);
wait for T_STROBE;
-- Do not check the output payload values, as this requires the behavioral model
-- which would make this demonstration testbench unwieldy.
-- Instead, check the protocol of the master DATA channel:
-- check that the payload is valid (not X) when TVALID is high
if m_axis_data_tvalid = '1' then
if is_x(m_axis_data_tdata) then
report "ERROR: m_axis_data_tdata is invalid when m_axis_data_tvalid is high" severity error;
check_ok := false;
end if;
end if;
assert check_ok
report "ERROR: terminating test with failures." severity failure;
end process check_outputs;
-----------------------------------------------------------------------
-- Assign TDATA / TUSER fields to aliases, for easy simulator waveform viewing
-----------------------------------------------------------------------
-- Data slave channel alias signals
s_axis_data_tdata_data <= s_axis_data_tdata(1 downto 0);
-- Data master channel alias signals: update these only when they are valid
m_axis_data_tdata_data <= m_axis_data_tdata(12 downto 0) when m_axis_data_tvalid = '1';
end tb;
@@ -0,0 +1,281 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:fir_compiler:7.2
-- IP Revision: 12
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY fir_compiler_v7_2_12;
USE fir_compiler_v7_2_12.fir_compiler_v7_2_12;
ENTITY GaussFir_1mp5 IS
PORT (
aclk : IN STD_LOGIC;
s_axis_data_tvalid : IN STD_LOGIC;
s_axis_data_tready : OUT STD_LOGIC;
s_axis_data_tdata : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
m_axis_data_tvalid : OUT STD_LOGIC;
m_axis_data_tdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END GaussFir_1mp5;
ARCHITECTURE GaussFir_1mp5_arch OF GaussFir_1mp5 IS
ATTRIBUTE DowngradeIPIdentifiedWarnings : STRING;
ATTRIBUTE DowngradeIPIdentifiedWarnings OF GaussFir_1mp5_arch: ARCHITECTURE IS "yes";
COMPONENT fir_compiler_v7_2_12 IS
GENERIC (
C_XDEVICEFAMILY : STRING;
C_ELABORATION_DIR : STRING;
C_COMPONENT_NAME : STRING;
C_COEF_FILE : STRING;
C_COEF_FILE_LINES : INTEGER;
C_FILTER_TYPE : INTEGER;
C_INTERP_RATE : INTEGER;
C_DECIM_RATE : INTEGER;
C_ZERO_PACKING_FACTOR : INTEGER;
C_SYMMETRY : INTEGER;
C_NUM_FILTS : INTEGER;
C_NUM_TAPS : INTEGER;
C_NUM_CHANNELS : INTEGER;
C_CHANNEL_PATTERN : STRING;
C_ROUND_MODE : INTEGER;
C_COEF_RELOAD : INTEGER;
C_NUM_RELOAD_SLOTS : INTEGER;
C_COL_MODE : INTEGER;
C_COL_PIPE_LEN : INTEGER;
C_COL_CONFIG : STRING;
C_OPTIMIZATION : INTEGER;
C_DATA_PATH_WIDTHS : STRING;
C_DATA_IP_PATH_WIDTHS : STRING;
C_DATA_PX_PATH_WIDTHS : STRING;
C_DATA_WIDTH : INTEGER;
C_COEF_PATH_WIDTHS : STRING;
C_COEF_WIDTH : INTEGER;
C_DATA_PATH_SRC : STRING;
C_COEF_PATH_SRC : STRING;
C_PX_PATH_SRC : STRING;
C_DATA_PATH_SIGN : STRING;
C_COEF_PATH_SIGN : STRING;
C_ACCUM_PATH_WIDTHS : STRING;
C_OUTPUT_WIDTH : INTEGER;
C_OUTPUT_PATH_WIDTHS : STRING;
C_ACCUM_OP_PATH_WIDTHS : STRING;
C_EXT_MULT_CNFG : STRING;
C_DATA_PATH_PSAMP_SRC : STRING;
C_OP_PATH_PSAMP_SRC : STRING;
C_NUM_MADDS : INTEGER;
C_OPT_MADDS : STRING;
C_OVERSAMPLING_RATE : INTEGER;
C_INPUT_RATE : INTEGER;
C_OUTPUT_RATE : INTEGER;
C_DATA_MEMTYPE : INTEGER;
C_COEF_MEMTYPE : INTEGER;
C_IPBUFF_MEMTYPE : INTEGER;
C_OPBUFF_MEMTYPE : INTEGER;
C_DATAPATH_MEMTYPE : INTEGER;
C_MEM_ARRANGEMENT : INTEGER;
C_DATA_MEM_PACKING : INTEGER;
C_COEF_MEM_PACKING : INTEGER;
C_FILTS_PACKED : INTEGER;
C_LATENCY : INTEGER;
C_HAS_ARESETn : INTEGER;
C_HAS_ACLKEN : INTEGER;
C_DATA_HAS_TLAST : INTEGER;
C_S_DATA_HAS_FIFO : INTEGER;
C_S_DATA_HAS_TUSER : INTEGER;
C_S_DATA_TDATA_WIDTH : INTEGER;
C_S_DATA_TUSER_WIDTH : INTEGER;
C_M_DATA_HAS_TREADY : INTEGER;
C_M_DATA_HAS_TUSER : INTEGER;
C_M_DATA_TDATA_WIDTH : INTEGER;
C_M_DATA_TUSER_WIDTH : INTEGER;
C_HAS_CONFIG_CHANNEL : INTEGER;
C_CONFIG_SYNC_MODE : INTEGER;
C_CONFIG_PACKET_SIZE : INTEGER;
C_CONFIG_TDATA_WIDTH : INTEGER;
C_RELOAD_TDATA_WIDTH : INTEGER
);
PORT (
aresetn : IN STD_LOGIC;
aclk : IN STD_LOGIC;
aclken : IN STD_LOGIC;
s_axis_data_tvalid : IN STD_LOGIC;
s_axis_data_tready : OUT STD_LOGIC;
s_axis_data_tlast : IN STD_LOGIC;
s_axis_data_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_data_tdata : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
s_axis_config_tvalid : IN STD_LOGIC;
s_axis_config_tready : OUT STD_LOGIC;
s_axis_config_tlast : IN STD_LOGIC;
s_axis_config_tdata : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_reload_tvalid : IN STD_LOGIC;
s_axis_reload_tready : OUT STD_LOGIC;
s_axis_reload_tlast : IN STD_LOGIC;
s_axis_reload_tdata : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
m_axis_data_tvalid : OUT STD_LOGIC;
m_axis_data_tready : IN STD_LOGIC;
m_axis_data_tlast : OUT STD_LOGIC;
m_axis_data_tuser : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
m_axis_data_tdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
event_s_data_tlast_missing : OUT STD_LOGIC;
event_s_data_tlast_unexpected : OUT STD_LOGIC;
event_s_data_chanid_incorrect : OUT STD_LOGIC;
event_s_config_tlast_missing : OUT STD_LOGIC;
event_s_config_tlast_unexpected : OUT STD_LOGIC;
event_s_reload_tlast_missing : OUT STD_LOGIC;
event_s_reload_tlast_unexpected : OUT STD_LOGIC
);
END COMPONENT fir_compiler_v7_2_12;
ATTRIBUTE X_INTERFACE_INFO : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER : STRING;
ATTRIBUTE X_INTERFACE_INFO OF m_axis_data_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DATA TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF m_axis_data_tvalid: SIGNAL IS "XIL_INTERFACENAME M_AXIS_DATA, TDATA_NUM_BYTES 2, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF m_axis_data_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DATA TVALID";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_data_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_DATA TDATA";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_data_tready: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_DATA TREADY";
ATTRIBUTE X_INTERFACE_PARAMETER OF s_axis_data_tvalid: SIGNAL IS "XIL_INTERFACENAME S_AXIS_DATA, TDATA_NUM_BYTES 1, 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.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_data_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_DATA TVALID";
ATTRIBUTE X_INTERFACE_PARAMETER OF aclk: SIGNAL IS "XIL_INTERFACENAME aclk_intf, ASSOCIATED_BUSIF S_AXIS_CONFIG:M_AXIS_DATA:S_AXIS_DATA:S_AXIS_RELOAD, ASSOCIATED_RESET aresetn, ASSOCIATED_CLKEN aclken, FREQ_HZ 100000000, PHASE 0.000, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF aclk: SIGNAL IS "xilinx.com:signal:clock:1.0 aclk_intf CLK";
BEGIN
U0 : fir_compiler_v7_2_12
GENERIC MAP (
C_XDEVICEFAMILY => "kintex7",
C_ELABORATION_DIR => "./",
C_COMPONENT_NAME => "GaussFir_1mp5",
C_COEF_FILE => "GaussFir_1mp5.mif",
C_COEF_FILE_LINES => 160,
C_FILTER_TYPE => 2,
C_INTERP_RATE => 32,
C_DECIM_RATE => 1,
C_ZERO_PACKING_FACTOR => 1,
C_SYMMETRY => 0,
C_NUM_FILTS => 1,
C_NUM_TAPS => 129,
C_NUM_CHANNELS => 1,
C_CHANNEL_PATTERN => "fixed",
C_ROUND_MODE => 0,
C_COEF_RELOAD => 0,
C_NUM_RELOAD_SLOTS => 1,
C_COL_MODE => 1,
C_COL_PIPE_LEN => 4,
C_COL_CONFIG => "5",
C_OPTIMIZATION => 0,
C_DATA_PATH_WIDTHS => "2",
C_DATA_IP_PATH_WIDTHS => "2",
C_DATA_PX_PATH_WIDTHS => "2",
C_DATA_WIDTH => 2,
C_COEF_PATH_WIDTHS => "14",
C_COEF_WIDTH => 14,
C_DATA_PATH_SRC => "0",
C_COEF_PATH_SRC => "0",
C_PX_PATH_SRC => "0",
C_DATA_PATH_SIGN => "0",
C_COEF_PATH_SIGN => "1",
C_ACCUM_PATH_WIDTHS => "13",
C_OUTPUT_WIDTH => 13,
C_OUTPUT_PATH_WIDTHS => "13",
C_ACCUM_OP_PATH_WIDTHS => "13",
C_EXT_MULT_CNFG => "none",
C_DATA_PATH_PSAMP_SRC => "0",
C_OP_PATH_PSAMP_SRC => "0",
C_NUM_MADDS => 5,
C_OPT_MADDS => "none",
C_OVERSAMPLING_RATE => 1,
C_INPUT_RATE => 32,
C_OUTPUT_RATE => 1,
C_DATA_MEMTYPE => 0,
C_COEF_MEMTYPE => 2,
C_IPBUFF_MEMTYPE => 0,
C_OPBUFF_MEMTYPE => 0,
C_DATAPATH_MEMTYPE => 0,
C_MEM_ARRANGEMENT => 2,
C_DATA_MEM_PACKING => 0,
C_COEF_MEM_PACKING => 0,
C_FILTS_PACKED => 0,
C_LATENCY => 11,
C_HAS_ARESETn => 0,
C_HAS_ACLKEN => 0,
C_DATA_HAS_TLAST => 0,
C_S_DATA_HAS_FIFO => 0,
C_S_DATA_HAS_TUSER => 0,
C_S_DATA_TDATA_WIDTH => 8,
C_S_DATA_TUSER_WIDTH => 1,
C_M_DATA_HAS_TREADY => 0,
C_M_DATA_HAS_TUSER => 0,
C_M_DATA_TDATA_WIDTH => 16,
C_M_DATA_TUSER_WIDTH => 1,
C_HAS_CONFIG_CHANNEL => 0,
C_CONFIG_SYNC_MODE => 0,
C_CONFIG_PACKET_SIZE => 0,
C_CONFIG_TDATA_WIDTH => 1,
C_RELOAD_TDATA_WIDTH => 1
)
PORT MAP (
aresetn => '1',
aclk => aclk,
aclken => '1',
s_axis_data_tvalid => s_axis_data_tvalid,
s_axis_data_tready => s_axis_data_tready,
s_axis_data_tlast => '0',
s_axis_data_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_data_tdata => s_axis_data_tdata,
s_axis_config_tvalid => '0',
s_axis_config_tlast => '0',
s_axis_config_tdata => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_reload_tvalid => '0',
s_axis_reload_tlast => '0',
s_axis_reload_tdata => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
m_axis_data_tvalid => m_axis_data_tvalid,
m_axis_data_tready => '1',
m_axis_data_tdata => m_axis_data_tdata
);
END GaussFir_1mp5_arch;
@@ -0,0 +1,99 @@
// file: ad9361_clk_gen.v
//
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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.
//
//----------------------------------------------------------------------------
// User entered comments
//----------------------------------------------------------------------------
// None
//
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1____48.000______0.000______50.0______139.139_____89.958
// clk_out2____96.000______0.000______50.0______120.859_____89.958
// clk_out3___144.000______0.000______50.0______112.241_____89.958
// clk_out4___192.000______0.000______50.0______106.524_____89.958
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary______________96____________0.010
`timescale 1ps/1ps
(* CORE_GENERATION_INFO = "ad9361_clk_gen,clk_wiz_v6_0_3_0_0,{component_name=ad9361_clk_gen,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=4,clkin1_period=10.417,clkin2_period=10.000,use_power_down=false,use_reset=false,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *)
module ad9361_clk_gen
(
// Clock out ports
output clk_out1,
output clk_out2,
output clk_out3,
output clk_out4,
// Status and control signals
output locked,
// Clock in ports
input clk_in1
);
ad9361_clk_gen_clk_wiz inst
(
// Clock out ports
.clk_out1(clk_out1),
.clk_out2(clk_out2),
.clk_out3(clk_out3),
.clk_out4(clk_out4),
// Status and control signals
.locked(locked),
// Clock in ports
.clk_in1(clk_in1)
);
endmodule
@@ -0,0 +1,85 @@
//
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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.
//
//----------------------------------------------------------------------------
// User entered comments
//----------------------------------------------------------------------------
// None
//
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1____48.000______0.000______50.0______139.139_____89.958
// clk_out2____96.000______0.000______50.0______120.859_____89.958
// clk_out3___144.000______0.000______50.0______112.241_____89.958
// clk_out4___192.000______0.000______50.0______106.524_____89.958
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary______________96____________0.010
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
ad9361_clk_gen instance_name
(
// Clock out ports
.clk_out1(clk_out1), // output clk_out1
.clk_out2(clk_out2), // output clk_out2
.clk_out3(clk_out3), // output clk_out3
.clk_out4(clk_out4), // output clk_out4
// Status and control signals
.locked(locked), // output locked
// Clock in ports
.clk_in1(clk_in1)); // input clk_in1
// INST_TAG_END ------ End INSTANTIATION Template ---------
@@ -0,0 +1,228 @@
// file: ad9361_clk_gen.v
//
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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.
//
//----------------------------------------------------------------------------
// User entered comments
//----------------------------------------------------------------------------
// None
//
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1____48.000______0.000______50.0______139.139_____89.958
// clk_out2____96.000______0.000______50.0______120.859_____89.958
// clk_out3___144.000______0.000______50.0______112.241_____89.958
// clk_out4___192.000______0.000______50.0______106.524_____89.958
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary______________96____________0.010
`timescale 1ps/1ps
module ad9361_clk_gen_clk_wiz
(// Clock in ports
// Clock out ports
output clk_out1,
output clk_out2,
output clk_out3,
output clk_out4,
// Status and control signals
output locked,
input clk_in1
);
// Input buffering
//------------------------------------
wire clk_in1_ad9361_clk_gen;
wire clk_in2_ad9361_clk_gen;
IBUF clkin1_ibufg
(.O (clk_in1_ad9361_clk_gen),
.I (clk_in1));
// Clocking PRIMITIVE
//------------------------------------
// Instantiation of the MMCM PRIMITIVE
// * Unused inputs are tied off
// * Unused outputs are labeled unused
wire clk_out1_ad9361_clk_gen;
wire clk_out2_ad9361_clk_gen;
wire clk_out3_ad9361_clk_gen;
wire clk_out4_ad9361_clk_gen;
wire clk_out5_ad9361_clk_gen;
wire clk_out6_ad9361_clk_gen;
wire clk_out7_ad9361_clk_gen;
wire [15:0] do_unused;
wire drdy_unused;
wire psdone_unused;
wire locked_int;
wire clkfbout_ad9361_clk_gen;
wire clkfbout_buf_ad9361_clk_gen;
wire clkfboutb_unused;
wire clkout0b_unused;
wire clkout1b_unused;
wire clkout2b_unused;
wire clkout3b_unused;
wire clkout4_unused;
wire clkout5_unused;
wire clkout6_unused;
wire clkfbstopped_unused;
wire clkinstopped_unused;
MMCME2_ADV
#(.BANDWIDTH ("OPTIMIZED"),
.CLKOUT4_CASCADE ("FALSE"),
.COMPENSATION ("ZHOLD"),
.STARTUP_WAIT ("FALSE"),
.DIVCLK_DIVIDE (1),
.CLKFBOUT_MULT_F (12.000),
.CLKFBOUT_PHASE (0.000),
.CLKFBOUT_USE_FINE_PS ("FALSE"),
.CLKOUT0_DIVIDE_F (24.000),
.CLKOUT0_PHASE (0.000),
.CLKOUT0_DUTY_CYCLE (0.500),
.CLKOUT0_USE_FINE_PS ("FALSE"),
.CLKOUT1_DIVIDE (12),
.CLKOUT1_PHASE (0.000),
.CLKOUT1_DUTY_CYCLE (0.500),
.CLKOUT1_USE_FINE_PS ("FALSE"),
.CLKOUT2_DIVIDE (8),
.CLKOUT2_PHASE (0.000),
.CLKOUT2_DUTY_CYCLE (0.500),
.CLKOUT2_USE_FINE_PS ("FALSE"),
.CLKOUT3_DIVIDE (6),
.CLKOUT3_PHASE (0.000),
.CLKOUT3_DUTY_CYCLE (0.500),
.CLKOUT3_USE_FINE_PS ("FALSE"),
.CLKIN1_PERIOD (10.417))
mmcm_adv_inst
// Output clocks
(
.CLKFBOUT (clkfbout_ad9361_clk_gen),
.CLKFBOUTB (clkfboutb_unused),
.CLKOUT0 (clk_out1_ad9361_clk_gen),
.CLKOUT0B (clkout0b_unused),
.CLKOUT1 (clk_out2_ad9361_clk_gen),
.CLKOUT1B (clkout1b_unused),
.CLKOUT2 (clk_out3_ad9361_clk_gen),
.CLKOUT2B (clkout2b_unused),
.CLKOUT3 (clk_out4_ad9361_clk_gen),
.CLKOUT3B (clkout3b_unused),
.CLKOUT4 (clkout4_unused),
.CLKOUT5 (clkout5_unused),
.CLKOUT6 (clkout6_unused),
// Input clock control
.CLKFBIN (clkfbout_buf_ad9361_clk_gen),
.CLKIN1 (clk_in1_ad9361_clk_gen),
.CLKIN2 (1'b0),
// Tied to always select the primary input clock
.CLKINSEL (1'b1),
// Ports for dynamic reconfiguration
.DADDR (7'h0),
.DCLK (1'b0),
.DEN (1'b0),
.DI (16'h0),
.DO (do_unused),
.DRDY (drdy_unused),
.DWE (1'b0),
// Ports for dynamic phase shift
.PSCLK (1'b0),
.PSEN (1'b0),
.PSINCDEC (1'b0),
.PSDONE (psdone_unused),
// Other control and status signals
.LOCKED (locked_int),
.CLKINSTOPPED (clkinstopped_unused),
.CLKFBSTOPPED (clkfbstopped_unused),
.PWRDWN (1'b0),
.RST (1'b0));
assign locked = locked_int;
// Clock Monitor clock assigning
//--------------------------------------
// Output buffering
//-----------------------------------
BUFG clkf_buf
(.O (clkfbout_buf_ad9361_clk_gen),
.I (clkfbout_ad9361_clk_gen));
BUFG clkout1_buf
(.O (clk_out1),
.I (clk_out1_ad9361_clk_gen));
BUFG clkout2_buf
(.O (clk_out2),
.I (clk_out2_ad9361_clk_gen));
BUFG clkout3_buf
(.O (clk_out3),
.I (clk_out3_ad9361_clk_gen));
BUFG clkout4_buf
(.O (clk_out4),
.I (clk_out4_ad9361_clk_gen));
endmodule
@@ -0,0 +1,271 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:33 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode funcsim
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ad9361_clk_gen_synth_1/ad9361_clk_gen_sim_netlist.v
// Design : ad9361_clk_gen
// Purpose : This verilog netlist is a functional simulation representation of the design and should not be modified
// or synthesized. This netlist cannot be used for SDF annotated simulation.
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
`timescale 1 ps / 1 ps
(* NotValidForBitStream *)
module ad9361_clk_gen
(clk_out1,
clk_out2,
clk_out3,
clk_out4,
locked,
clk_in1);
output clk_out1;
output clk_out2;
output clk_out3;
output clk_out4;
output locked;
input clk_in1;
(* IBUF_LOW_PWR *) wire clk_in1;
wire clk_out1;
wire clk_out2;
wire clk_out3;
wire clk_out4;
wire locked;
ad9361_clk_gen_ad9361_clk_gen_clk_wiz inst
(.clk_in1(clk_in1),
.clk_out1(clk_out1),
.clk_out2(clk_out2),
.clk_out3(clk_out3),
.clk_out4(clk_out4),
.locked(locked));
endmodule
(* ORIG_REF_NAME = "ad9361_clk_gen_clk_wiz" *)
module ad9361_clk_gen_ad9361_clk_gen_clk_wiz
(clk_out1,
clk_out2,
clk_out3,
clk_out4,
locked,
clk_in1);
output clk_out1;
output clk_out2;
output clk_out3;
output clk_out4;
output locked;
input clk_in1;
wire clk_in1;
wire clk_in1_ad9361_clk_gen;
wire clk_out1;
wire clk_out1_ad9361_clk_gen;
wire clk_out2;
wire clk_out2_ad9361_clk_gen;
wire clk_out3;
wire clk_out3_ad9361_clk_gen;
wire clk_out4;
wire clk_out4_ad9361_clk_gen;
wire clkfbout_ad9361_clk_gen;
wire clkfbout_buf_ad9361_clk_gen;
wire locked;
wire NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED;
wire NLW_mmcm_adv_inst_DRDY_UNCONNECTED;
wire NLW_mmcm_adv_inst_PSDONE_UNCONNECTED;
wire [15:0]NLW_mmcm_adv_inst_DO_UNCONNECTED;
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkf_buf
(.I(clkfbout_ad9361_clk_gen),
.O(clkfbout_buf_ad9361_clk_gen));
(* BOX_TYPE = "PRIMITIVE" *)
(* CAPACITANCE = "DONT_CARE" *)
(* IBUF_DELAY_VALUE = "0" *)
(* IFD_DELAY_VALUE = "AUTO" *)
IBUF #(
.IOSTANDARD("DEFAULT"))
clkin1_ibufg
(.I(clk_in1),
.O(clk_in1_ad9361_clk_gen));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkout1_buf
(.I(clk_out1_ad9361_clk_gen),
.O(clk_out1));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkout2_buf
(.I(clk_out2_ad9361_clk_gen),
.O(clk_out2));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkout3_buf
(.I(clk_out3_ad9361_clk_gen),
.O(clk_out3));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkout4_buf
(.I(clk_out4_ad9361_clk_gen),
.O(clk_out4));
(* BOX_TYPE = "PRIMITIVE" *)
MMCME2_ADV #(
.BANDWIDTH("OPTIMIZED"),
.CLKFBOUT_MULT_F(12.000000),
.CLKFBOUT_PHASE(0.000000),
.CLKFBOUT_USE_FINE_PS("FALSE"),
.CLKIN1_PERIOD(10.417000),
.CLKIN2_PERIOD(0.000000),
.CLKOUT0_DIVIDE_F(24.000000),
.CLKOUT0_DUTY_CYCLE(0.500000),
.CLKOUT0_PHASE(0.000000),
.CLKOUT0_USE_FINE_PS("FALSE"),
.CLKOUT1_DIVIDE(12),
.CLKOUT1_DUTY_CYCLE(0.500000),
.CLKOUT1_PHASE(0.000000),
.CLKOUT1_USE_FINE_PS("FALSE"),
.CLKOUT2_DIVIDE(8),
.CLKOUT2_DUTY_CYCLE(0.500000),
.CLKOUT2_PHASE(0.000000),
.CLKOUT2_USE_FINE_PS("FALSE"),
.CLKOUT3_DIVIDE(6),
.CLKOUT3_DUTY_CYCLE(0.500000),
.CLKOUT3_PHASE(0.000000),
.CLKOUT3_USE_FINE_PS("FALSE"),
.CLKOUT4_CASCADE("FALSE"),
.CLKOUT4_DIVIDE(1),
.CLKOUT4_DUTY_CYCLE(0.500000),
.CLKOUT4_PHASE(0.000000),
.CLKOUT4_USE_FINE_PS("FALSE"),
.CLKOUT5_DIVIDE(1),
.CLKOUT5_DUTY_CYCLE(0.500000),
.CLKOUT5_PHASE(0.000000),
.CLKOUT5_USE_FINE_PS("FALSE"),
.CLKOUT6_DIVIDE(1),
.CLKOUT6_DUTY_CYCLE(0.500000),
.CLKOUT6_PHASE(0.000000),
.CLKOUT6_USE_FINE_PS("FALSE"),
.COMPENSATION("ZHOLD"),
.DIVCLK_DIVIDE(1),
.IS_CLKINSEL_INVERTED(1'b0),
.IS_PSEN_INVERTED(1'b0),
.IS_PSINCDEC_INVERTED(1'b0),
.IS_PWRDWN_INVERTED(1'b0),
.IS_RST_INVERTED(1'b0),
.REF_JITTER1(0.010000),
.REF_JITTER2(0.010000),
.SS_EN("FALSE"),
.SS_MODE("CENTER_HIGH"),
.SS_MOD_PERIOD(10000),
.STARTUP_WAIT("FALSE"))
mmcm_adv_inst
(.CLKFBIN(clkfbout_buf_ad9361_clk_gen),
.CLKFBOUT(clkfbout_ad9361_clk_gen),
.CLKFBOUTB(NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED),
.CLKFBSTOPPED(NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED),
.CLKIN1(clk_in1_ad9361_clk_gen),
.CLKIN2(1'b0),
.CLKINSEL(1'b1),
.CLKINSTOPPED(NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED),
.CLKOUT0(clk_out1_ad9361_clk_gen),
.CLKOUT0B(NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED),
.CLKOUT1(clk_out2_ad9361_clk_gen),
.CLKOUT1B(NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED),
.CLKOUT2(clk_out3_ad9361_clk_gen),
.CLKOUT2B(NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED),
.CLKOUT3(clk_out4_ad9361_clk_gen),
.CLKOUT3B(NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED),
.CLKOUT4(NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED),
.CLKOUT5(NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED),
.CLKOUT6(NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED),
.DADDR({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.DCLK(1'b0),
.DEN(1'b0),
.DI({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.DO(NLW_mmcm_adv_inst_DO_UNCONNECTED[15:0]),
.DRDY(NLW_mmcm_adv_inst_DRDY_UNCONNECTED),
.DWE(1'b0),
.LOCKED(locked),
.PSCLK(1'b0),
.PSDONE(NLW_mmcm_adv_inst_PSDONE_UNCONNECTED),
.PSEN(1'b0),
.PSINCDEC(1'b0),
.PWRDWN(1'b0),
.RST(1'b0));
endmodule
`ifndef GLBL
`define GLBL
`timescale 1 ps / 1 ps
module glbl ();
parameter ROC_WIDTH = 100000;
parameter TOC_WIDTH = 0;
//-------- STARTUP Globals --------------
wire GSR;
wire GTS;
wire GWE;
wire PRLD;
tri1 p_up_tmp;
tri (weak1, strong0) PLL_LOCKG = p_up_tmp;
wire PROGB_GLBL;
wire CCLKO_GLBL;
wire FCSBO_GLBL;
wire [3:0] DO_GLBL;
wire [3:0] DI_GLBL;
reg GSR_int;
reg GTS_int;
reg PRLD_int;
//-------- JTAG Globals --------------
wire JTAG_TDO_GLBL;
wire JTAG_TCK_GLBL;
wire JTAG_TDI_GLBL;
wire JTAG_TMS_GLBL;
wire JTAG_TRST_GLBL;
reg JTAG_CAPTURE_GLBL;
reg JTAG_RESET_GLBL;
reg JTAG_SHIFT_GLBL;
reg JTAG_UPDATE_GLBL;
reg JTAG_RUNTEST_GLBL;
reg JTAG_SEL1_GLBL = 0;
reg JTAG_SEL2_GLBL = 0 ;
reg JTAG_SEL3_GLBL = 0;
reg JTAG_SEL4_GLBL = 0;
reg JTAG_USER_TDO1_GLBL = 1'bz;
reg JTAG_USER_TDO2_GLBL = 1'bz;
reg JTAG_USER_TDO3_GLBL = 1'bz;
reg JTAG_USER_TDO4_GLBL = 1'bz;
assign (strong1, weak0) GSR = GSR_int;
assign (strong1, weak0) GTS = GTS_int;
assign (weak1, weak0) PRLD = PRLD_int;
initial begin
GSR_int = 1'b1;
PRLD_int = 1'b1;
#(ROC_WIDTH)
GSR_int = 1'b0;
PRLD_int = 1'b0;
end
initial begin
GTS_int = 1'b1;
#(TOC_WIDTH)
GTS_int = 1'b0;
end
endmodule
`endif
@@ -0,0 +1,214 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:33 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode funcsim
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ad9361_clk_gen_synth_1/ad9361_clk_gen_sim_netlist.vhdl
-- Design : ad9361_clk_gen
-- Purpose : This VHDL netlist is a functional simulation representation of the design and should not be modified or
-- synthesized. This netlist cannot be used for SDF annotated simulation.
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity ad9361_clk_gen_ad9361_clk_gen_clk_wiz is
port (
clk_out1 : out STD_LOGIC;
clk_out2 : out STD_LOGIC;
clk_out3 : out STD_LOGIC;
clk_out4 : out STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
);
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of ad9361_clk_gen_ad9361_clk_gen_clk_wiz : entity is "ad9361_clk_gen_clk_wiz";
end ad9361_clk_gen_ad9361_clk_gen_clk_wiz;
architecture STRUCTURE of ad9361_clk_gen_ad9361_clk_gen_clk_wiz is
signal clk_in1_ad9361_clk_gen : STD_LOGIC;
signal clk_out1_ad9361_clk_gen : STD_LOGIC;
signal clk_out2_ad9361_clk_gen : STD_LOGIC;
signal clk_out3_ad9361_clk_gen : STD_LOGIC;
signal clk_out4_ad9361_clk_gen : STD_LOGIC;
signal clkfbout_ad9361_clk_gen : STD_LOGIC;
signal clkfbout_buf_ad9361_clk_gen : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_DRDY_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_PSDONE_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_DO_UNCONNECTED : STD_LOGIC_VECTOR ( 15 downto 0 );
attribute BOX_TYPE : string;
attribute BOX_TYPE of clkf_buf : label is "PRIMITIVE";
attribute BOX_TYPE of clkin1_ibufg : label is "PRIMITIVE";
attribute CAPACITANCE : string;
attribute CAPACITANCE of clkin1_ibufg : label is "DONT_CARE";
attribute IBUF_DELAY_VALUE : string;
attribute IBUF_DELAY_VALUE of clkin1_ibufg : label is "0";
attribute IFD_DELAY_VALUE : string;
attribute IFD_DELAY_VALUE of clkin1_ibufg : label is "AUTO";
attribute BOX_TYPE of clkout1_buf : label is "PRIMITIVE";
attribute BOX_TYPE of clkout2_buf : label is "PRIMITIVE";
attribute BOX_TYPE of clkout3_buf : label is "PRIMITIVE";
attribute BOX_TYPE of clkout4_buf : label is "PRIMITIVE";
attribute BOX_TYPE of mmcm_adv_inst : label is "PRIMITIVE";
begin
clkf_buf: unisim.vcomponents.BUFG
port map (
I => clkfbout_ad9361_clk_gen,
O => clkfbout_buf_ad9361_clk_gen
);
clkin1_ibufg: unisim.vcomponents.IBUF
generic map(
IOSTANDARD => "DEFAULT"
)
port map (
I => clk_in1,
O => clk_in1_ad9361_clk_gen
);
clkout1_buf: unisim.vcomponents.BUFG
port map (
I => clk_out1_ad9361_clk_gen,
O => clk_out1
);
clkout2_buf: unisim.vcomponents.BUFG
port map (
I => clk_out2_ad9361_clk_gen,
O => clk_out2
);
clkout3_buf: unisim.vcomponents.BUFG
port map (
I => clk_out3_ad9361_clk_gen,
O => clk_out3
);
clkout4_buf: unisim.vcomponents.BUFG
port map (
I => clk_out4_ad9361_clk_gen,
O => clk_out4
);
mmcm_adv_inst: unisim.vcomponents.MMCME2_ADV
generic map(
BANDWIDTH => "OPTIMIZED",
CLKFBOUT_MULT_F => 12.000000,
CLKFBOUT_PHASE => 0.000000,
CLKFBOUT_USE_FINE_PS => false,
CLKIN1_PERIOD => 10.417000,
CLKIN2_PERIOD => 0.000000,
CLKOUT0_DIVIDE_F => 24.000000,
CLKOUT0_DUTY_CYCLE => 0.500000,
CLKOUT0_PHASE => 0.000000,
CLKOUT0_USE_FINE_PS => false,
CLKOUT1_DIVIDE => 12,
CLKOUT1_DUTY_CYCLE => 0.500000,
CLKOUT1_PHASE => 0.000000,
CLKOUT1_USE_FINE_PS => false,
CLKOUT2_DIVIDE => 8,
CLKOUT2_DUTY_CYCLE => 0.500000,
CLKOUT2_PHASE => 0.000000,
CLKOUT2_USE_FINE_PS => false,
CLKOUT3_DIVIDE => 6,
CLKOUT3_DUTY_CYCLE => 0.500000,
CLKOUT3_PHASE => 0.000000,
CLKOUT3_USE_FINE_PS => false,
CLKOUT4_CASCADE => false,
CLKOUT4_DIVIDE => 1,
CLKOUT4_DUTY_CYCLE => 0.500000,
CLKOUT4_PHASE => 0.000000,
CLKOUT4_USE_FINE_PS => false,
CLKOUT5_DIVIDE => 1,
CLKOUT5_DUTY_CYCLE => 0.500000,
CLKOUT5_PHASE => 0.000000,
CLKOUT5_USE_FINE_PS => false,
CLKOUT6_DIVIDE => 1,
CLKOUT6_DUTY_CYCLE => 0.500000,
CLKOUT6_PHASE => 0.000000,
CLKOUT6_USE_FINE_PS => false,
COMPENSATION => "ZHOLD",
DIVCLK_DIVIDE => 1,
IS_CLKINSEL_INVERTED => '0',
IS_PSEN_INVERTED => '0',
IS_PSINCDEC_INVERTED => '0',
IS_PWRDWN_INVERTED => '0',
IS_RST_INVERTED => '0',
REF_JITTER1 => 0.010000,
REF_JITTER2 => 0.010000,
SS_EN => "FALSE",
SS_MODE => "CENTER_HIGH",
SS_MOD_PERIOD => 10000,
STARTUP_WAIT => false
)
port map (
CLKFBIN => clkfbout_buf_ad9361_clk_gen,
CLKFBOUT => clkfbout_ad9361_clk_gen,
CLKFBOUTB => NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED,
CLKFBSTOPPED => NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED,
CLKIN1 => clk_in1_ad9361_clk_gen,
CLKIN2 => '0',
CLKINSEL => '1',
CLKINSTOPPED => NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED,
CLKOUT0 => clk_out1_ad9361_clk_gen,
CLKOUT0B => NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED,
CLKOUT1 => clk_out2_ad9361_clk_gen,
CLKOUT1B => NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED,
CLKOUT2 => clk_out3_ad9361_clk_gen,
CLKOUT2B => NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED,
CLKOUT3 => clk_out4_ad9361_clk_gen,
CLKOUT3B => NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED,
CLKOUT4 => NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED,
CLKOUT5 => NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED,
CLKOUT6 => NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED,
DADDR(6 downto 0) => B"0000000",
DCLK => '0',
DEN => '0',
DI(15 downto 0) => B"0000000000000000",
DO(15 downto 0) => NLW_mmcm_adv_inst_DO_UNCONNECTED(15 downto 0),
DRDY => NLW_mmcm_adv_inst_DRDY_UNCONNECTED,
DWE => '0',
LOCKED => locked,
PSCLK => '0',
PSDONE => NLW_mmcm_adv_inst_PSDONE_UNCONNECTED,
PSEN => '0',
PSINCDEC => '0',
PWRDWN => '0',
RST => '0'
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity ad9361_clk_gen is
port (
clk_out1 : out STD_LOGIC;
clk_out2 : out STD_LOGIC;
clk_out3 : out STD_LOGIC;
clk_out4 : out STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
);
attribute NotValidForBitStream : boolean;
attribute NotValidForBitStream of ad9361_clk_gen : entity is true;
end ad9361_clk_gen;
architecture STRUCTURE of ad9361_clk_gen is
begin
inst: entity work.ad9361_clk_gen_ad9361_clk_gen_clk_wiz
port map (
clk_in1 => clk_in1,
clk_out1 => clk_out1,
clk_out2 => clk_out2,
clk_out3 => clk_out3,
clk_out4 => clk_out4,
locked => locked
);
end STRUCTURE;
@@ -0,0 +1,25 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:33 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ad9361_clk_gen_synth_1/ad9361_clk_gen_stub.v
// Design : ad9361_clk_gen
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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.
module ad9361_clk_gen(clk_out1, clk_out2, clk_out3, clk_out4, locked,
clk_in1)
/* synthesis syn_black_box black_box_pad_pin="clk_out1,clk_out2,clk_out3,clk_out4,locked,clk_in1" */;
output clk_out1;
output clk_out2;
output clk_out3;
output clk_out4;
output locked;
input clk_in1;
endmodule
@@ -0,0 +1,33 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:33 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ad9361_clk_gen_synth_1/ad9361_clk_gen_stub.vhdl
-- Design : ad9361_clk_gen
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity ad9361_clk_gen is
Port (
clk_out1 : out STD_LOGIC;
clk_out2 : out STD_LOGIC;
clk_out3 : out STD_LOGIC;
clk_out4 : out STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
);
end ad9361_clk_gen;
architecture stub of ad9361_clk_gen 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 "clk_out1,clk_out2,clk_out3,clk_out4,locked,clk_in1";
begin
end;
@@ -0,0 +1,70 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:c_addsub:12.0
// IP Revision: 13
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
add_s24_s32_s32 your_instance_name (
.A(A), // input wire [23 : 0] A
.B(B), // input wire [31 : 0] B
.CLK(CLK), // input wire CLK
.CE(CE), // input wire CE
.SCLR(SCLR), // input wire SCLR
.S(S) // output wire [31 : 0] S
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file add_s24_s32_s32.v when simulating
// the core, add_s24_s32_s32. When compiling the wrapper file, be sure to
// reference the Verilog simulation library.
@@ -0,0 +1,85 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:c_addsub:12.0
-- IP Revision: 13
-- The following code must appear in the VHDL architecture header.
------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT add_s24_s32_s32
PORT (
A : IN STD_LOGIC_VECTOR(23 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
CLK : IN STD_LOGIC;
CE : IN STD_LOGIC;
SCLR : IN STD_LOGIC;
S : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
);
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------
-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.
------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : add_s24_s32_s32
PORT MAP (
A => A,
B => B,
CLK => CLK,
CE => CE,
SCLR => SCLR,
S => S
);
-- INST_TAG_END ------ End INSTANTIATION Template ---------
-- You must compile the wrapper file add_s24_s32_s32.vhd when simulating
-- the core, add_s24_s32_s32. When compiling the wrapper file, be sure to
-- reference the VHDL simulation library.
@@ -0,0 +1,737 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:37 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode funcsim
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/add_s24_s32_s32_synth_1/add_s24_s32_s32_sim_netlist.v
// Design : add_s24_s32_s32
// Purpose : This verilog netlist is a functional simulation representation of the design and should not be modified
// or synthesized. This netlist cannot be used for SDF annotated simulation.
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
`timescale 1 ps / 1 ps
(* CHECK_LICENSE_TYPE = "add_s24_s32_s32,c_addsub_v12_0_13,{}" *) (* downgradeipidentifiedwarnings = "yes" *) (* x_core_info = "c_addsub_v12_0_13,Vivado 2019.1.3" *)
(* NotValidForBitStream *)
module add_s24_s32_s32
(A,
B,
CLK,
CE,
SCLR,
S);
(* x_interface_info = "xilinx.com:signal:data:1.0 a_intf DATA" *) (* x_interface_parameter = "XIL_INTERFACENAME a_intf, LAYERED_METADATA undef" *) input [23:0]A;
(* x_interface_info = "xilinx.com:signal:data:1.0 b_intf DATA" *) (* x_interface_parameter = "XIL_INTERFACENAME b_intf, LAYERED_METADATA undef" *) input [31:0]B;
(* x_interface_info = "xilinx.com:signal:clock:1.0 clk_intf CLK" *) (* x_interface_parameter = "XIL_INTERFACENAME clk_intf, ASSOCIATED_BUSIF s_intf:c_out_intf:sinit_intf:sset_intf:bypass_intf:c_in_intf:add_intf:b_intf:a_intf, ASSOCIATED_RESET SCLR, ASSOCIATED_CLKEN CE, FREQ_HZ 100000000, PHASE 0.000, INSERT_VIP 0" *) input CLK;
(* x_interface_info = "xilinx.com:signal:clockenable:1.0 ce_intf CE" *) (* x_interface_parameter = "XIL_INTERFACENAME ce_intf, POLARITY ACTIVE_LOW" *) input CE;
(* x_interface_info = "xilinx.com:signal:reset:1.0 sclr_intf RST" *) (* x_interface_parameter = "XIL_INTERFACENAME sclr_intf, POLARITY ACTIVE_HIGH, INSERT_VIP 0" *) input SCLR;
(* x_interface_info = "xilinx.com:signal:data:1.0 s_intf DATA" *) (* x_interface_parameter = "XIL_INTERFACENAME s_intf, LAYERED_METADATA undef" *) output [31:0]S;
wire [23:0]A;
wire [31:0]B;
wire CE;
wire CLK;
wire [31:0]S;
wire SCLR;
wire NLW_U0_C_OUT_UNCONNECTED;
(* C_AINIT_VAL = "0" *)
(* C_BORROW_LOW = "1" *)
(* C_CE_OVERRIDES_BYPASS = "1" *)
(* C_CE_OVERRIDES_SCLR = "0" *)
(* C_HAS_CE = "1" *)
(* C_HAS_SCLR = "1" *)
(* C_HAS_SINIT = "0" *)
(* C_HAS_SSET = "0" *)
(* C_IMPLEMENTATION = "0" *)
(* C_SCLR_OVERRIDES_SSET = "1" *)
(* C_SINIT_VAL = "0" *)
(* C_VERBOSITY = "0" *)
(* C_XDEVICEFAMILY = "kintex7" *)
(* c_a_type = "0" *)
(* c_a_width = "24" *)
(* c_add_mode = "0" *)
(* c_b_constant = "0" *)
(* c_b_type = "0" *)
(* c_b_value = "00000000000000000000000000000000" *)
(* c_b_width = "32" *)
(* c_bypass_low = "0" *)
(* c_has_bypass = "0" *)
(* c_has_c_in = "0" *)
(* c_has_c_out = "0" *)
(* c_latency = "1" *)
(* c_out_width = "32" *)
(* downgradeipidentifiedwarnings = "yes" *)
add_s24_s32_s32_c_addsub_v12_0_13 U0
(.A(A),
.ADD(1'b1),
.B(B),
.BYPASS(1'b0),
.CE(CE),
.CLK(CLK),
.C_IN(1'b0),
.C_OUT(NLW_U0_C_OUT_UNCONNECTED),
.S(S),
.SCLR(SCLR),
.SINIT(1'b0),
.SSET(1'b0));
endmodule
(* C_ADD_MODE = "0" *) (* C_AINIT_VAL = "0" *) (* C_A_TYPE = "0" *)
(* C_A_WIDTH = "24" *) (* C_BORROW_LOW = "1" *) (* C_BYPASS_LOW = "0" *)
(* C_B_CONSTANT = "0" *) (* C_B_TYPE = "0" *) (* C_B_VALUE = "00000000000000000000000000000000" *)
(* C_B_WIDTH = "32" *) (* C_CE_OVERRIDES_BYPASS = "1" *) (* C_CE_OVERRIDES_SCLR = "0" *)
(* C_HAS_BYPASS = "0" *) (* C_HAS_CE = "1" *) (* C_HAS_C_IN = "0" *)
(* C_HAS_C_OUT = "0" *) (* C_HAS_SCLR = "1" *) (* C_HAS_SINIT = "0" *)
(* C_HAS_SSET = "0" *) (* C_IMPLEMENTATION = "0" *) (* C_LATENCY = "1" *)
(* C_OUT_WIDTH = "32" *) (* C_SCLR_OVERRIDES_SSET = "1" *) (* C_SINIT_VAL = "0" *)
(* C_VERBOSITY = "0" *) (* C_XDEVICEFAMILY = "kintex7" *) (* ORIG_REF_NAME = "c_addsub_v12_0_13" *)
(* downgradeipidentifiedwarnings = "yes" *)
module add_s24_s32_s32_c_addsub_v12_0_13
(A,
B,
CLK,
ADD,
C_IN,
CE,
BYPASS,
SCLR,
SSET,
SINIT,
C_OUT,
S);
input [23:0]A;
input [31:0]B;
input CLK;
input ADD;
input C_IN;
input CE;
input BYPASS;
input SCLR;
input SSET;
input SINIT;
output C_OUT;
output [31:0]S;
wire \<const0> ;
wire [23:0]A;
wire [31:0]B;
wire CE;
wire CLK;
wire [31:0]S;
wire SCLR;
wire NLW_xst_addsub_C_OUT_UNCONNECTED;
assign C_OUT = \<const0> ;
GND GND
(.G(\<const0> ));
(* C_AINIT_VAL = "0" *)
(* C_BORROW_LOW = "1" *)
(* C_CE_OVERRIDES_BYPASS = "1" *)
(* C_CE_OVERRIDES_SCLR = "0" *)
(* C_HAS_CE = "1" *)
(* C_HAS_SCLR = "1" *)
(* C_HAS_SINIT = "0" *)
(* C_HAS_SSET = "0" *)
(* C_IMPLEMENTATION = "0" *)
(* C_SCLR_OVERRIDES_SSET = "1" *)
(* C_SINIT_VAL = "0" *)
(* C_VERBOSITY = "0" *)
(* C_XDEVICEFAMILY = "kintex7" *)
(* c_a_type = "0" *)
(* c_a_width = "24" *)
(* c_add_mode = "0" *)
(* c_b_constant = "0" *)
(* c_b_type = "0" *)
(* c_b_value = "00000000000000000000000000000000" *)
(* c_b_width = "32" *)
(* c_bypass_low = "0" *)
(* c_has_bypass = "0" *)
(* c_has_c_in = "0" *)
(* c_has_c_out = "0" *)
(* c_latency = "1" *)
(* c_out_width = "32" *)
(* downgradeipidentifiedwarnings = "yes" *)
add_s24_s32_s32_c_addsub_v12_0_13_viv xst_addsub
(.A(A),
.ADD(1'b0),
.B(B),
.BYPASS(1'b0),
.CE(CE),
.CLK(CLK),
.C_IN(1'b0),
.C_OUT(NLW_xst_addsub_C_OUT_UNCONNECTED),
.S(S),
.SCLR(SCLR),
.SINIT(1'b0),
.SSET(1'b0));
endmodule
`pragma protect begin_protected
`pragma protect version = 1
`pragma protect encrypt_agent = "XILINX"
`pragma protect encrypt_agent_info = "Xilinx Encryption Tool 2019.1"
`pragma protect key_keyowner="Cadence Design Systems.", key_keyname="cds_rsa_key", key_method="rsa"
`pragma protect encoding = (enctype="BASE64", line_length=76, bytes=64)
`pragma protect key_block
EIXxeINTAO242euia8HdyXF7h6x0XAl8Xpk7diBjuD2e+Y0gB/lAcVBQITjsIwp+t4oM79vqoGzH
+4vEzi5WLA==
`pragma protect key_keyowner="Synopsys", key_keyname="SNPS-VCS-RSA-2", key_method="rsa"
`pragma protect encoding = (enctype="BASE64", line_length=76, bytes=128)
`pragma protect key_block
jaOvT2EV7VCvDB1JYt0rR5Zrk5hPgyaVkRnX0I/v7IJxLgDTVbuBV5u/1OpOfWNJyaUFf6hkqGag
nHh32KPESYSixNGFIu/cwi8WznCjrYP2F2CTV0ho9Q305JZ2CYFosWIZfe0p+Lc2BPHFBpRJBfEl
TA6I/ZwCg6ZdHqBwJX0=
`pragma protect key_keyowner="Aldec", key_keyname="ALDEC15_001", key_method="rsa"
`pragma protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`pragma protect key_block
Vlrb/9UE65aOuMXkdu0+G5VZjNMmxg34yAXb3zM44FS9dZHuBcNcqiOqCYsXTyiiTc0heuoV2Tce
efI8BQO9l7F3As+jp6Vv9VtuDmvSNblHxgDw+NTDjGLhE+u2MZZ6xfXTnOt99Kt+Pw7F4lPPGduA
urDCk4kOt83YAc5uRL/FBt4fZYDTXdfJNlPl0Srv3LTGdZszWkNNMer4BcBtYplGy3cxaw6v1wtv
LgMgGyAalg7Od2DUypqqFGQRfWLVEldRJyASyzGnf1aAfzqHjqLBUojM2a+AfmFuyxAy1FSsEzKM
ikpGTUfiESifpz85jbR5iZ1BssBSKZF39meuIw==
`pragma protect key_keyowner="ATRENTA", key_keyname="ATR-SG-2015-RSA-3", key_method="rsa"
`pragma protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`pragma protect key_block
uYAMxg2Cs3KhSCgysItwFzH3qx2qaPfA5LE/sWHsmIOlTmYaExuulptcJad5CI4stZxWhk6FAvQb
ZnHIxupQ0Ag3Vw2B/xsw5H1yoh2MUujTwbJsk8rBqYMuJsUeHeMUgEJL6mrfL/idjcrIgrRse19X
iV3hYdw7gtk6+fFdihG6QubBhXyTKXDfEU23nGOjeZs8gYqnsEglyjVOESakKj39G/BIR8u1nPY6
/910C1NRicMuggEH2vzyo3YkxWPPtir2qaK6L6Z2xLn/tUuxIQK8zaLU1JLv5BqTBNQAyeMgLjTl
ScR0d/CJ4QgN/9ODgtKNaUQNYxDcwcCPqC9ggQ==
`pragma protect key_keyowner="Xilinx", key_keyname="xilinxt_2019_02", key_method="rsa"
`pragma protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`pragma protect key_block
YEPeVioKkA2EkBEZwWwPn6g+nksMcKAvKbMP8LEuwmLFLue5Ode6osEwclI8Idr2rzDierHxWQGv
uuNBk65x3hIt7b8giktFTUc/ltFJWCMM8jLdvtAv8GRT4ANEnQalBaoD+FdfKgDM0s9/4BmNKq86
euvAsqKDz1M1M6k5QMtpPRwBHua21mlHXhqzkU0Lhmao1re8eGVGWCeEHD1XKeifrENaioTL9Pzn
+Iy9vcrYT26UHtd/WHkqoV2qe0uIkDP/IwBQVCGBQI432BrPpGMcp3tL9OA9hyba7NXYIdJVwDXI
NcSTA1TOujYD9bEyHhnmpkcViWgpC+6UHFJ6/Q==
`pragma protect key_keyowner="Mentor Graphics Corporation", key_keyname="MGC-VELOCE-RSA", key_method="rsa"
`pragma protect encoding = (enctype="BASE64", line_length=76, bytes=128)
`pragma protect key_block
cYsWihgUIpcU22w+HafMs8oiFyuLi8IsP6A8Q8Owr7KKlBEJLtx8pXDx7KB1GZ3TEvIBcKGukUjp
u5nEg4azox+rnxIxZ6W8jWEk3gDQ3i+NHM9rZ0o57IXm4XEvAReSqFcMngCt1IsY3viFHgXnjI4L
AT/YkscHhZRTi2nOuZA=
`pragma protect key_keyowner="Mentor Graphics Corporation", key_keyname="MGC-VERIF-SIM-RSA-2", key_method="rsa"
`pragma protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`pragma protect key_block
KDuFAWZrwSGajY66mVpV3alSAH0w6lYQzM4+iM0lFIGeJdp8RHYmKUi1xMPaVr9Qh/V5FNZ63yt3
jIjtxThSfBZWVm++Kfy2ku6/5WoQLFfHPZgz76D/9H/B/nWCru1ZP0NPKgdjE34sdMOOH4SmJ6SR
8mjkRF8it6CsJF77iNMqWT2ydgJ9MF715+eBrFVbtFRSNvHmVmjXjlZ5s71cqay3f0fPbhTjB3pF
wuuA6GlHZE4xrI00sLWIOwf897jT3fQphdU0Qh+E5EKOTH0yURDsipBUYRuz75jMo0yHrSWsR9XE
gN81g4HBd2CIMuUXlqmL4G8cTsaXFyFCWz4ltA==
`pragma protect key_keyowner="Mentor Graphics Corporation", key_keyname="MGC-PREC-RSA", key_method="rsa"
`pragma protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`pragma protect key_block
Q370dC8EM5NIsBKZFuI1MGKFBQylS/xHMr0qnOU0gfx3IBFVsjIshevttOFVTWX/oMUoaPsUI9LC
ZIVQKkUPZ3xg23SBWrPXw8lOU7cpBArpTzi2GaNn4Zjy7vPFMUYH2/4zjF5nP11SFNczcYHMUCYK
RCQl6p6ljdrnKdY+LezHQ2OJfxpVY0HT+l76WLfUK7bPATIrbsg54MPWSD+35WkoJQy4SN2LgWRM
TUg3Uc/T/fPzf1l9XFnqgtaqjMLa6RuIRyRjRDyHKLW6/kzV7ukWkakInBU9iVCf7hpozJ6BcC1N
wl7knbuBAuS8epfwLXRIWFYTJolyzMK7smRjeA==
`pragma protect key_keyowner="Synplicity", key_keyname="SYNP15_1", key_method="rsa"
`pragma protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`pragma protect key_block
M4FKlBLHda73Q4xIkTDf2Z6z/Po1N9frAsxTS8zBSV5BVn8V95w2o1jmPKaFO/nZBrA8vv71AiDi
KA7DPIWBTjaRB6Mdq2WlQEMbEhmOKyrotYzyEcAttqstuRCrj9tF68ieDRV+GpcYsf6c56/Rgq+m
XmQMaMp/cjNmM/iKYepy/sy6a44izQLauuF6wI4njyS2cMt52ovl8S5dIfjO9r4RzoSZgedW1b4F
WvK3OCCF27E9XQp1p8a5Be85791sS0Mr+dNiNykW43UmD+2Eh4dlCQ1/ZZEGZbEglXU2KWsDuiGl
J0FYIk+PXkkxoscMXzMeT9ARxp5f+kZPt/9wSA==
`pragma protect data_method = "AES128-CBC"
`pragma protect encoding = (enctype = "BASE64", line_length = 76, bytes = 23664)
`pragma protect data_block
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
hwnLLHEDX/iT
`pragma protect end_protected
`ifndef GLBL
`define GLBL
`timescale 1 ps / 1 ps
module glbl ();
parameter ROC_WIDTH = 100000;
parameter TOC_WIDTH = 0;
//-------- STARTUP Globals --------------
wire GSR;
wire GTS;
wire GWE;
wire PRLD;
tri1 p_up_tmp;
tri (weak1, strong0) PLL_LOCKG = p_up_tmp;
wire PROGB_GLBL;
wire CCLKO_GLBL;
wire FCSBO_GLBL;
wire [3:0] DO_GLBL;
wire [3:0] DI_GLBL;
reg GSR_int;
reg GTS_int;
reg PRLD_int;
//-------- JTAG Globals --------------
wire JTAG_TDO_GLBL;
wire JTAG_TCK_GLBL;
wire JTAG_TDI_GLBL;
wire JTAG_TMS_GLBL;
wire JTAG_TRST_GLBL;
reg JTAG_CAPTURE_GLBL;
reg JTAG_RESET_GLBL;
reg JTAG_SHIFT_GLBL;
reg JTAG_UPDATE_GLBL;
reg JTAG_RUNTEST_GLBL;
reg JTAG_SEL1_GLBL = 0;
reg JTAG_SEL2_GLBL = 0 ;
reg JTAG_SEL3_GLBL = 0;
reg JTAG_SEL4_GLBL = 0;
reg JTAG_USER_TDO1_GLBL = 1'bz;
reg JTAG_USER_TDO2_GLBL = 1'bz;
reg JTAG_USER_TDO3_GLBL = 1'bz;
reg JTAG_USER_TDO4_GLBL = 1'bz;
assign (strong1, weak0) GSR = GSR_int;
assign (strong1, weak0) GTS = GTS_int;
assign (weak1, weak0) PRLD = PRLD_int;
initial begin
GSR_int = 1'b1;
PRLD_int = 1'b1;
#(ROC_WIDTH)
GSR_int = 1'b0;
PRLD_int = 1'b0;
end
initial begin
GTS_int = 1'b1;
#(TOC_WIDTH)
GTS_int = 1'b0;
end
endmodule
`endif
@@ -0,0 +1,983 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:37 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode funcsim
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/add_s24_s32_s32_synth_1/add_s24_s32_s32_sim_netlist.vhdl
-- Design : add_s24_s32_s32
-- Purpose : This VHDL netlist is a functional simulation representation of the design and should not be modified or
-- synthesized. This netlist cannot be used for SDF annotated simulation.
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
`protect begin_protected
`protect version = 1
`protect encrypt_agent = "XILINX"
`protect encrypt_agent_info = "Xilinx Encryption Tool 2019.1"
`protect key_keyowner="Cadence Design Systems.", key_keyname="cds_rsa_key", key_method="rsa"
`protect encoding = (enctype="BASE64", line_length=76, bytes=64)
`protect key_block
UujpFoYKoOQ7/Jw6owEbggI2AGOgzbHR6JXF4x/izP5Fh4WM0VoNKTT/CrUpcaxvPcEB3VSFIRdM
zEjgl5GLbQ==
`protect key_keyowner="Synopsys", key_keyname="SNPS-VCS-RSA-2", key_method="rsa"
`protect encoding = (enctype="BASE64", line_length=76, bytes=128)
`protect key_block
f5RyCaHb5HYoLsPpSBrPYpBu75i3LvPQ71qIEa/aoXsNX59UTv8AuKxtAPmKJn2lGzU85o93pPUz
6IUTdlLhcarMbqU68e5TlXbOXaga3KUj4uXh5FkcNdjPsjNT76FRa5yaah1J4szu7iiw3tPnuQJ4
sJ7X6wRWQIJF6RZJQ7M=
`protect key_keyowner="Aldec", key_keyname="ALDEC15_001", key_method="rsa"
`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`protect key_block
vzUpOnYACJ0VEPnozBdDHNmglN8CrKvVmd7FT58A6TVLlrgZoYwyIPQMIh+Wfc+wTlVynnNf5/KC
BJOYRsHDGsi5eQBIqFs4IO2s0YluOIEcuhjI1NL49HG90oDLDYg5vQsfvfkgIfXdSUeO4CWL1STz
dN+bN5lJol2g3oFIppEAT76jtuKAX3VW+ZQrlhdFxRe2XfR61bUfZTyxy1sxEjh6zx1lNk15Bh6G
TvDbeQpS3X3IwQkda126umKLhxhuzVYI/Dj5ubjHn9iROohcwaJUKVYfiSpg7OvIQh0dIocm/Pr8
Jnq8RYOlltOXK63GToRwOuvaEVsyYwXPCsJhYw==
`protect key_keyowner="ATRENTA", key_keyname="ATR-SG-2015-RSA-3", key_method="rsa"
`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`protect key_block
IqsYPmYfJRgqWcpVxxx5JKL2K5lwiA3+TGmGkzXMe1mM6wTat1h3LqSohdSynrSese1HtJw7NjBS
R4sEHDCJLtLiIBXUDNOxs3/aFcfwI2ggGKVL7gj8LerPTvjancZ3CPrFi7suJ8va4ScDXJ2+AZpv
1HkaXhquWtX+ecTMvlBUJ0kGRmT3QvqsqdoJvLaUtWmOb/zcl/Nh7cyBWKwOJ6JJUCsg2Ny6n0Mi
CPGTsfurek7+yGad+10NV+Jdn5hHQLBf66QBRg5ezreuYSEBodVOIKAo3y+OLqpGrkjVyZP2Jekj
3gAE3AlS23WF2E2B8gWcKlRCe5mstjPwmciAjQ==
`protect key_keyowner="Xilinx", key_keyname="xilinxt_2019_02", key_method="rsa"
`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`protect key_block
SDlGuJ8/IFDM5qipR8lmqUiiSg8fMligX7gsobHkQDqRLsLrXijbx23aj4mkUAgF+oPb9moRXMT+
ZQitvA5/h3W0YwLdK0P5IZuLURPqDlMwqENJrGM7d3xQu4APt2TsYcIWzy69vwDhvpVhiU2guQ2w
RmJXF7B1uLONLo7iKhljzh08U3MalnpvLRgTyF13HjlkISLQE5uevFCzYB2in3CEPm7UvLorqhnJ
57vVjcU+wSz1mFigbG2ffzUXycQttuY0ZXalTnSornuILhiF6Dz1ntTVIkPAsSmCzM2pkya326bi
VR6/Ww0KJSGjMc9QAcY1dzerdA/O/FHc0wHRqg==
`protect key_keyowner="Mentor Graphics Corporation", key_keyname="MGC-VELOCE-RSA", key_method="rsa"
`protect encoding = (enctype="BASE64", line_length=76, bytes=128)
`protect key_block
nv62qaAPOM1gKXHVylxNODJ0FORpIfmG0VU8DOE0VYy7QuPs1fSFKwqsmeCqLmk1iBF2iwzM4HaH
n4NZzzSC9moQCnEWQQr7ujbbmsQhrn/tqwtWMSAdsDvskDzQxglQ6QGrybhxOmpv4ptOmwdiPiSh
mzNT3tLbjqrWoFAIUD0=
`protect key_keyowner="Mentor Graphics Corporation", key_keyname="MGC-VERIF-SIM-RSA-2", key_method="rsa"
`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`protect key_block
jF3d2E6CGZp/hS8coNep5TPowf3sa0SgNHwNmqsow9h+brgrP4csczpm7KBBcJ5v+YbOvx0z+gYy
WBAxHAq2icNSvmrHAZTXOGdEJEE5hVch+yxypEclXFAnDShH7A6r+9IACIFI6vQ+UJJ84TGn2SDU
MI/Rg/QIXumqkI7aPcOA1ytQg6cRR+iT/gU6b/7+TGQ21uUGNcdcFNGGw3MiCeeQAO453zksyf3f
3q13lH5nspjdUO+EOyLip3iyWk1rVfZM5a6iueAPrsJM0H4hecXe3sh42f/VZjC7pKxZNTyNG0pY
f73A6j6rB0cnGG9VyIOhkjLQ4APwBFMYDfhmYA==
`protect key_keyowner="Mentor Graphics Corporation", key_keyname="MGC-PREC-RSA", key_method="rsa"
`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`protect key_block
i+cTmQ2lWnqIb9K6OCx9TlXou3JsVpooBRRuwiHaxgiNpA3mDai9uRswr5Fal8SJSOUkg5y8bXXC
VFOFsl8PYc56xPn0YOnvMQneGRoa8BBddY58e1peVWhWtvJ9bwX3WIr0JX5r+YkCwelsNpCzeArT
YDN3FTBCloBjNU5GpfFI6lV5O7QA7xIQqZ1w0ujnaloGX88uGyhxhFAz4vTOQyqj1RojMv/RGvI+
47t+fHAAmrmlmaxWU9Q5LjXBzyRGktLCvg+AO+uQZmudXrABrGhVHbE24oBS+1VCJBcL+yOpcHXi
iPgE75/WPS8e9ReWexpUcujwuSphIMjfNhQxeg==
`protect key_keyowner="Synplicity", key_keyname="SYNP15_1", key_method="rsa"
`protect encoding = (enctype="BASE64", line_length=76, bytes=256)
`protect key_block
2P/Tjo2JUn8XTjq/1FOjTK7EF8R51b7HqBlrJlqAhgGdcFP4gyVkHHONuCdmHriuocnnlSldC+17
WzVTNG8xKDIW0aRhuw6W3L1OjnKUDqklNkL13rr8ENFpNv8woU+rheqG8nqrCWLbZ5MIhOOO0OmI
FSA3E5Dhi+ZffW45saWYOHu680c3rNDvLA1SoGFrdRdjTFCux9ZgyMOPb44lFsLa0JSRMMeSTPvD
vIALSo4zdlLRIj+bG6Ta9Zgi6qafEKPN8QRumN+aJvnPBrKxe7rRa5W5mK7Xu/JFLVu6Q8HW76l3
eEeKgh7WH46uqK+x0wkuQ5ddI2eBZgbdaqNZRQ==
`protect data_method = "AES128-CBC"
`protect encoding = (enctype = "BASE64", line_length = 76, bytes = 37072)
`protect data_block
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
GbxZxhG/OFq9gzNP5B2i4any8Edqug==
`protect end_protected
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity add_s24_s32_s32_c_addsub_v12_0_13 is
port (
A : in STD_LOGIC_VECTOR ( 23 downto 0 );
B : in STD_LOGIC_VECTOR ( 31 downto 0 );
CLK : in STD_LOGIC;
ADD : in STD_LOGIC;
C_IN : in STD_LOGIC;
CE : in STD_LOGIC;
BYPASS : in STD_LOGIC;
SCLR : in STD_LOGIC;
SSET : in STD_LOGIC;
SINIT : in STD_LOGIC;
C_OUT : out STD_LOGIC;
S : out STD_LOGIC_VECTOR ( 31 downto 0 )
);
attribute C_ADD_MODE : integer;
attribute C_ADD_MODE of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_AINIT_VAL : string;
attribute C_AINIT_VAL of add_s24_s32_s32_c_addsub_v12_0_13 : entity is "0";
attribute C_A_TYPE : integer;
attribute C_A_TYPE of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_A_WIDTH : integer;
attribute C_A_WIDTH of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 24;
attribute C_BORROW_LOW : integer;
attribute C_BORROW_LOW of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 1;
attribute C_BYPASS_LOW : integer;
attribute C_BYPASS_LOW of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_B_CONSTANT : integer;
attribute C_B_CONSTANT of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_B_TYPE : integer;
attribute C_B_TYPE of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_B_VALUE : string;
attribute C_B_VALUE of add_s24_s32_s32_c_addsub_v12_0_13 : entity is "00000000000000000000000000000000";
attribute C_B_WIDTH : integer;
attribute C_B_WIDTH of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 32;
attribute C_CE_OVERRIDES_BYPASS : integer;
attribute C_CE_OVERRIDES_BYPASS of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 1;
attribute C_CE_OVERRIDES_SCLR : integer;
attribute C_CE_OVERRIDES_SCLR of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_HAS_BYPASS : integer;
attribute C_HAS_BYPASS of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_HAS_CE : integer;
attribute C_HAS_CE of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 1;
attribute C_HAS_C_IN : integer;
attribute C_HAS_C_IN of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_HAS_C_OUT : integer;
attribute C_HAS_C_OUT of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_HAS_SCLR : integer;
attribute C_HAS_SCLR of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 1;
attribute C_HAS_SINIT : integer;
attribute C_HAS_SINIT of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_HAS_SSET : integer;
attribute C_HAS_SSET of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_IMPLEMENTATION : integer;
attribute C_IMPLEMENTATION of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_LATENCY : integer;
attribute C_LATENCY of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 1;
attribute C_OUT_WIDTH : integer;
attribute C_OUT_WIDTH of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 32;
attribute C_SCLR_OVERRIDES_SSET : integer;
attribute C_SCLR_OVERRIDES_SSET of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 1;
attribute C_SINIT_VAL : string;
attribute C_SINIT_VAL of add_s24_s32_s32_c_addsub_v12_0_13 : entity is "0";
attribute C_VERBOSITY : integer;
attribute C_VERBOSITY of add_s24_s32_s32_c_addsub_v12_0_13 : entity is 0;
attribute C_XDEVICEFAMILY : string;
attribute C_XDEVICEFAMILY of add_s24_s32_s32_c_addsub_v12_0_13 : entity is "kintex7";
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of add_s24_s32_s32_c_addsub_v12_0_13 : entity is "c_addsub_v12_0_13";
attribute downgradeipidentifiedwarnings : string;
attribute downgradeipidentifiedwarnings of add_s24_s32_s32_c_addsub_v12_0_13 : entity is "yes";
end add_s24_s32_s32_c_addsub_v12_0_13;
architecture STRUCTURE of add_s24_s32_s32_c_addsub_v12_0_13 is
signal \<const0>\ : STD_LOGIC;
signal NLW_xst_addsub_C_OUT_UNCONNECTED : STD_LOGIC;
attribute C_AINIT_VAL of xst_addsub : label is "0";
attribute C_BORROW_LOW of xst_addsub : label is 1;
attribute C_CE_OVERRIDES_BYPASS of xst_addsub : label is 1;
attribute C_CE_OVERRIDES_SCLR of xst_addsub : label is 0;
attribute C_HAS_CE of xst_addsub : label is 1;
attribute C_HAS_SCLR of xst_addsub : label is 1;
attribute C_HAS_SINIT of xst_addsub : label is 0;
attribute C_HAS_SSET of xst_addsub : label is 0;
attribute C_IMPLEMENTATION of xst_addsub : label is 0;
attribute C_SCLR_OVERRIDES_SSET of xst_addsub : label is 1;
attribute C_SINIT_VAL of xst_addsub : label is "0";
attribute C_VERBOSITY of xst_addsub : label is 0;
attribute C_XDEVICEFAMILY of xst_addsub : label is "kintex7";
attribute c_a_type of xst_addsub : label is 0;
attribute c_a_width of xst_addsub : label is 24;
attribute c_add_mode of xst_addsub : label is 0;
attribute c_b_constant of xst_addsub : label is 0;
attribute c_b_type of xst_addsub : label is 0;
attribute c_b_value of xst_addsub : label is "00000000000000000000000000000000";
attribute c_b_width of xst_addsub : label is 32;
attribute c_bypass_low of xst_addsub : label is 0;
attribute c_has_bypass of xst_addsub : label is 0;
attribute c_has_c_in of xst_addsub : label is 0;
attribute c_has_c_out of xst_addsub : label is 0;
attribute c_latency of xst_addsub : label is 1;
attribute c_out_width of xst_addsub : label is 32;
attribute downgradeipidentifiedwarnings of xst_addsub : label is "yes";
begin
C_OUT <= \<const0>\;
GND: unisim.vcomponents.GND
port map (
G => \<const0>\
);
xst_addsub: entity work.add_s24_s32_s32_c_addsub_v12_0_13_viv
port map (
A(23 downto 0) => A(23 downto 0),
ADD => '0',
B(31 downto 0) => B(31 downto 0),
BYPASS => '0',
CE => CE,
CLK => CLK,
C_IN => '0',
C_OUT => NLW_xst_addsub_C_OUT_UNCONNECTED,
S(31 downto 0) => S(31 downto 0),
SCLR => SCLR,
SINIT => '0',
SSET => '0'
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity add_s24_s32_s32 is
port (
A : in STD_LOGIC_VECTOR ( 23 downto 0 );
B : in STD_LOGIC_VECTOR ( 31 downto 0 );
CLK : in STD_LOGIC;
CE : in STD_LOGIC;
SCLR : in STD_LOGIC;
S : out STD_LOGIC_VECTOR ( 31 downto 0 )
);
attribute NotValidForBitStream : boolean;
attribute NotValidForBitStream of add_s24_s32_s32 : entity is true;
attribute CHECK_LICENSE_TYPE : string;
attribute CHECK_LICENSE_TYPE of add_s24_s32_s32 : entity is "add_s24_s32_s32,c_addsub_v12_0_13,{}";
attribute downgradeipidentifiedwarnings : string;
attribute downgradeipidentifiedwarnings of add_s24_s32_s32 : entity is "yes";
attribute x_core_info : string;
attribute x_core_info of add_s24_s32_s32 : entity is "c_addsub_v12_0_13,Vivado 2019.1.3";
end add_s24_s32_s32;
architecture STRUCTURE of add_s24_s32_s32 is
signal NLW_U0_C_OUT_UNCONNECTED : STD_LOGIC;
attribute C_AINIT_VAL : string;
attribute C_AINIT_VAL of U0 : label is "0";
attribute C_BORROW_LOW : integer;
attribute C_BORROW_LOW of U0 : label is 1;
attribute C_CE_OVERRIDES_BYPASS : integer;
attribute C_CE_OVERRIDES_BYPASS of U0 : label is 1;
attribute C_CE_OVERRIDES_SCLR : integer;
attribute C_CE_OVERRIDES_SCLR of U0 : label is 0;
attribute C_HAS_CE : integer;
attribute C_HAS_CE of U0 : label is 1;
attribute C_HAS_SCLR : integer;
attribute C_HAS_SCLR of U0 : label is 1;
attribute C_HAS_SINIT : integer;
attribute C_HAS_SINIT of U0 : label is 0;
attribute C_HAS_SSET : integer;
attribute C_HAS_SSET of U0 : label is 0;
attribute C_IMPLEMENTATION : integer;
attribute C_IMPLEMENTATION of U0 : label is 0;
attribute C_SCLR_OVERRIDES_SSET : integer;
attribute C_SCLR_OVERRIDES_SSET of U0 : label is 1;
attribute C_SINIT_VAL : string;
attribute C_SINIT_VAL of U0 : label is "0";
attribute C_VERBOSITY : integer;
attribute C_VERBOSITY of U0 : label is 0;
attribute C_XDEVICEFAMILY : string;
attribute C_XDEVICEFAMILY of U0 : label is "kintex7";
attribute c_a_type : integer;
attribute c_a_type of U0 : label is 0;
attribute c_a_width : integer;
attribute c_a_width of U0 : label is 24;
attribute c_add_mode : integer;
attribute c_add_mode of U0 : label is 0;
attribute c_b_constant : integer;
attribute c_b_constant of U0 : label is 0;
attribute c_b_type : integer;
attribute c_b_type of U0 : label is 0;
attribute c_b_value : string;
attribute c_b_value of U0 : label is "00000000000000000000000000000000";
attribute c_b_width : integer;
attribute c_b_width of U0 : label is 32;
attribute c_bypass_low : integer;
attribute c_bypass_low of U0 : label is 0;
attribute c_has_bypass : integer;
attribute c_has_bypass of U0 : label is 0;
attribute c_has_c_in : integer;
attribute c_has_c_in of U0 : label is 0;
attribute c_has_c_out : integer;
attribute c_has_c_out of U0 : label is 0;
attribute c_latency : integer;
attribute c_latency of U0 : label is 1;
attribute c_out_width : integer;
attribute c_out_width of U0 : label is 32;
attribute downgradeipidentifiedwarnings of U0 : label is "yes";
attribute x_interface_info : string;
attribute x_interface_info of CE : signal is "xilinx.com:signal:clockenable:1.0 ce_intf CE";
attribute x_interface_parameter : string;
attribute x_interface_parameter of CE : signal is "XIL_INTERFACENAME ce_intf, POLARITY ACTIVE_LOW";
attribute x_interface_info of CLK : signal is "xilinx.com:signal:clock:1.0 clk_intf CLK";
attribute x_interface_parameter of CLK : signal is "XIL_INTERFACENAME clk_intf, ASSOCIATED_BUSIF s_intf:c_out_intf:sinit_intf:sset_intf:bypass_intf:c_in_intf:add_intf:b_intf:a_intf, ASSOCIATED_RESET SCLR, ASSOCIATED_CLKEN CE, FREQ_HZ 100000000, PHASE 0.000, INSERT_VIP 0";
attribute x_interface_info of SCLR : signal is "xilinx.com:signal:reset:1.0 sclr_intf RST";
attribute x_interface_parameter of SCLR : signal is "XIL_INTERFACENAME sclr_intf, POLARITY ACTIVE_HIGH, INSERT_VIP 0";
attribute x_interface_info of A : signal is "xilinx.com:signal:data:1.0 a_intf DATA";
attribute x_interface_parameter of A : signal is "XIL_INTERFACENAME a_intf, LAYERED_METADATA undef";
attribute x_interface_info of B : signal is "xilinx.com:signal:data:1.0 b_intf DATA";
attribute x_interface_parameter of B : signal is "XIL_INTERFACENAME b_intf, LAYERED_METADATA undef";
attribute x_interface_info of S : signal is "xilinx.com:signal:data:1.0 s_intf DATA";
attribute x_interface_parameter of S : signal is "XIL_INTERFACENAME s_intf, LAYERED_METADATA undef";
begin
U0: entity work.add_s24_s32_s32_c_addsub_v12_0_13
port map (
A(23 downto 0) => A(23 downto 0),
ADD => '1',
B(31 downto 0) => B(31 downto 0),
BYPASS => '0',
CE => CE,
CLK => CLK,
C_IN => '0',
C_OUT => NLW_U0_C_OUT_UNCONNECTED,
S(31 downto 0) => S(31 downto 0),
SCLR => SCLR,
SINIT => '0',
SSET => '0'
);
end STRUCTURE;
@@ -0,0 +1,25 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:37 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/add_s24_s32_s32_synth_1/add_s24_s32_s32_stub.v
// Design : add_s24_s32_s32
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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 = "c_addsub_v12_0_13,Vivado 2019.1.3" *)
module add_s24_s32_s32(A, B, CLK, CE, SCLR, S)
/* synthesis syn_black_box black_box_pad_pin="A[23:0],B[31:0],CLK,CE,SCLR,S[31:0]" */;
input [23:0]A;
input [31:0]B;
input CLK;
input CE;
input SCLR;
output [31:0]S;
endmodule
@@ -0,0 +1,35 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:37 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/add_s24_s32_s32_synth_1/add_s24_s32_s32_stub.vhdl
-- Design : add_s24_s32_s32
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity add_s24_s32_s32 is
Port (
A : in STD_LOGIC_VECTOR ( 23 downto 0 );
B : in STD_LOGIC_VECTOR ( 31 downto 0 );
CLK : in STD_LOGIC;
CE : in STD_LOGIC;
SCLR : in STD_LOGIC;
S : out STD_LOGIC_VECTOR ( 31 downto 0 )
);
end add_s24_s32_s32;
architecture stub of add_s24_s32_s32 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 "A[23:0],B[31:0],CLK,CE,SCLR,S[31:0]";
attribute x_core_info : string;
attribute x_core_info of stub : architecture is "c_addsub_v12_0_13,Vivado 2019.1.3";
begin
end;
@@ -0,0 +1,174 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:c_addsub:12.0
-- IP Revision: 13
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY c_addsub_v12_0_13;
USE c_addsub_v12_0_13.c_addsub_v12_0_13;
ENTITY add_s24_s32_s32 IS
PORT (
A : IN STD_LOGIC_VECTOR(23 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
CLK : IN STD_LOGIC;
CE : IN STD_LOGIC;
SCLR : IN STD_LOGIC;
S : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
);
END add_s24_s32_s32;
ARCHITECTURE add_s24_s32_s32_arch OF add_s24_s32_s32 IS
ATTRIBUTE DowngradeIPIdentifiedWarnings : STRING;
ATTRIBUTE DowngradeIPIdentifiedWarnings OF add_s24_s32_s32_arch: ARCHITECTURE IS "yes";
COMPONENT c_addsub_v12_0_13 IS
GENERIC (
C_VERBOSITY : INTEGER;
C_XDEVICEFAMILY : STRING;
C_IMPLEMENTATION : INTEGER;
C_A_WIDTH : INTEGER;
C_B_WIDTH : INTEGER;
C_OUT_WIDTH : INTEGER;
C_CE_OVERRIDES_SCLR : INTEGER;
C_A_TYPE : INTEGER;
C_B_TYPE : INTEGER;
C_LATENCY : INTEGER;
C_ADD_MODE : INTEGER;
C_B_CONSTANT : INTEGER;
C_B_VALUE : STRING;
C_AINIT_VAL : STRING;
C_SINIT_VAL : STRING;
C_CE_OVERRIDES_BYPASS : INTEGER;
C_BYPASS_LOW : INTEGER;
C_SCLR_OVERRIDES_SSET : INTEGER;
C_HAS_C_IN : INTEGER;
C_HAS_C_OUT : INTEGER;
C_BORROW_LOW : INTEGER;
C_HAS_CE : INTEGER;
C_HAS_BYPASS : INTEGER;
C_HAS_SCLR : INTEGER;
C_HAS_SSET : INTEGER;
C_HAS_SINIT : INTEGER
);
PORT (
A : IN STD_LOGIC_VECTOR(23 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
CLK : IN STD_LOGIC;
ADD : IN STD_LOGIC;
C_IN : IN STD_LOGIC;
CE : IN STD_LOGIC;
BYPASS : IN STD_LOGIC;
SCLR : IN STD_LOGIC;
SSET : IN STD_LOGIC;
SINIT : IN STD_LOGIC;
C_OUT : OUT STD_LOGIC;
S : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
);
END COMPONENT c_addsub_v12_0_13;
ATTRIBUTE X_INTERFACE_INFO : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER OF S: SIGNAL IS "XIL_INTERFACENAME s_intf, LAYERED_METADATA undef";
ATTRIBUTE X_INTERFACE_INFO OF S: SIGNAL IS "xilinx.com:signal:data:1.0 s_intf DATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF SCLR: SIGNAL IS "XIL_INTERFACENAME sclr_intf, POLARITY ACTIVE_HIGH, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF SCLR: SIGNAL IS "xilinx.com:signal:reset:1.0 sclr_intf RST";
ATTRIBUTE X_INTERFACE_PARAMETER OF CE: SIGNAL IS "XIL_INTERFACENAME ce_intf, POLARITY ACTIVE_LOW";
ATTRIBUTE X_INTERFACE_INFO OF CE: SIGNAL IS "xilinx.com:signal:clockenable:1.0 ce_intf CE";
ATTRIBUTE X_INTERFACE_PARAMETER OF CLK: SIGNAL IS "XIL_INTERFACENAME clk_intf, ASSOCIATED_BUSIF s_intf:c_out_intf:sinit_intf:sset_intf:bypass_intf:c_in_intf:add_intf:b_intf:a_intf, ASSOCIATED_RESET SCLR, ASSOCIATED_CLKEN CE, FREQ_HZ 100000000, PHASE 0.000, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF CLK: SIGNAL IS "xilinx.com:signal:clock:1.0 clk_intf CLK";
ATTRIBUTE X_INTERFACE_PARAMETER OF B: SIGNAL IS "XIL_INTERFACENAME b_intf, LAYERED_METADATA undef";
ATTRIBUTE X_INTERFACE_INFO OF B: SIGNAL IS "xilinx.com:signal:data:1.0 b_intf DATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF A: SIGNAL IS "XIL_INTERFACENAME a_intf, LAYERED_METADATA undef";
ATTRIBUTE X_INTERFACE_INFO OF A: SIGNAL IS "xilinx.com:signal:data:1.0 a_intf DATA";
BEGIN
U0 : c_addsub_v12_0_13
GENERIC MAP (
C_VERBOSITY => 0,
C_XDEVICEFAMILY => "kintex7",
C_IMPLEMENTATION => 0,
C_A_WIDTH => 24,
C_B_WIDTH => 32,
C_OUT_WIDTH => 32,
C_CE_OVERRIDES_SCLR => 0,
C_A_TYPE => 0,
C_B_TYPE => 0,
C_LATENCY => 1,
C_ADD_MODE => 0,
C_B_CONSTANT => 0,
C_B_VALUE => "00000000000000000000000000000000",
C_AINIT_VAL => "0",
C_SINIT_VAL => "0",
C_CE_OVERRIDES_BYPASS => 1,
C_BYPASS_LOW => 0,
C_SCLR_OVERRIDES_SSET => 1,
C_HAS_C_IN => 0,
C_HAS_C_OUT => 0,
C_BORROW_LOW => 1,
C_HAS_CE => 1,
C_HAS_BYPASS => 0,
C_HAS_SCLR => 1,
C_HAS_SSET => 0,
C_HAS_SINIT => 0
)
PORT MAP (
A => A,
B => B,
CLK => CLK,
ADD => '1',
C_IN => '0',
CE => CE,
BYPASS => '0',
SCLR => SCLR,
SSET => '0',
SINIT => '0',
S => S
);
END add_s24_s32_s32_arch;
@@ -0,0 +1,92 @@
// file: ant_clk_gen_stg1.v
//
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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.
//
//----------------------------------------------------------------------------
// User entered comments
//----------------------------------------------------------------------------
// None
//
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1____96.000______0.000______50.0______168.397____161.614
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary_____________250____________0.010
`timescale 1ps/1ps
(* CORE_GENERATION_INFO = "ant_clk_gen_stg1,clk_wiz_v6_0_3_0_0,{component_name=ant_clk_gen_stg1,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=1,clkin1_period=4.000,clkin2_period=10.0,use_power_down=false,use_reset=false,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *)
module ant_clk_gen_stg1
(
// Clock out ports
output clk_out1,
// Status and control signals
output locked,
// Clock in ports
input clk_in1_p,
input clk_in1_n
);
ant_clk_gen_stg1_clk_wiz inst
(
// Clock out ports
.clk_out1(clk_out1),
// Status and control signals
.locked(locked),
// Clock in ports
.clk_in1_p(clk_in1_p),
.clk_in1_n(clk_in1_n)
);
endmodule
@@ -0,0 +1,80 @@
//
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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.
//
//----------------------------------------------------------------------------
// User entered comments
//----------------------------------------------------------------------------
// None
//
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1____96.000______0.000______50.0______168.397____161.614
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary_____________250____________0.010
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
ant_clk_gen_stg1 instance_name
(
// Clock out ports
.clk_out1(clk_out1), // output clk_out1
// Status and control signals
.locked(locked), // output locked
// Clock in ports
.clk_in1_p(clk_in1_p), // input clk_in1_p
.clk_in1_n(clk_in1_n)); // input clk_in1_n
// INST_TAG_END ------ End INSTANTIATION Template ---------
@@ -0,0 +1,203 @@
// file: ant_clk_gen_stg1.v
//
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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.
//
//----------------------------------------------------------------------------
// User entered comments
//----------------------------------------------------------------------------
// None
//
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1____96.000______0.000______50.0______168.397____161.614
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary_____________250____________0.010
`timescale 1ps/1ps
module ant_clk_gen_stg1_clk_wiz
(// Clock in ports
// Clock out ports
output clk_out1,
// Status and control signals
output locked,
input clk_in1_p,
input clk_in1_n
);
// Input buffering
//------------------------------------
wire clk_in1_ant_clk_gen_stg1;
wire clk_in2_ant_clk_gen_stg1;
IBUFDS clkin1_ibufgds
(.O (clk_in1_ant_clk_gen_stg1),
.I (clk_in1_p),
.IB (clk_in1_n));
// Clocking PRIMITIVE
//------------------------------------
// Instantiation of the MMCM PRIMITIVE
// * Unused inputs are tied off
// * Unused outputs are labeled unused
wire clk_out1_ant_clk_gen_stg1;
wire clk_out2_ant_clk_gen_stg1;
wire clk_out3_ant_clk_gen_stg1;
wire clk_out4_ant_clk_gen_stg1;
wire clk_out5_ant_clk_gen_stg1;
wire clk_out6_ant_clk_gen_stg1;
wire clk_out7_ant_clk_gen_stg1;
wire [15:0] do_unused;
wire drdy_unused;
wire psdone_unused;
wire locked_int;
wire clkfbout_ant_clk_gen_stg1;
wire clkfbout_buf_ant_clk_gen_stg1;
wire clkfboutb_unused;
wire clkout0b_unused;
wire clkout1_unused;
wire clkout1b_unused;
wire clkout2_unused;
wire clkout2b_unused;
wire clkout3_unused;
wire clkout3b_unused;
wire clkout4_unused;
wire clkout5_unused;
wire clkout6_unused;
wire clkfbstopped_unused;
wire clkinstopped_unused;
MMCME2_ADV
#(.BANDWIDTH ("OPTIMIZED"),
.CLKOUT4_CASCADE ("FALSE"),
.COMPENSATION ("ZHOLD"),
.STARTUP_WAIT ("FALSE"),
.DIVCLK_DIVIDE (5),
.CLKFBOUT_MULT_F (18.000),
.CLKFBOUT_PHASE (0.000),
.CLKFBOUT_USE_FINE_PS ("FALSE"),
.CLKOUT0_DIVIDE_F (9.375),
.CLKOUT0_PHASE (0.000),
.CLKOUT0_DUTY_CYCLE (0.500),
.CLKOUT0_USE_FINE_PS ("FALSE"),
.CLKIN1_PERIOD (4.000))
mmcm_adv_inst
// Output clocks
(
.CLKFBOUT (clkfbout_ant_clk_gen_stg1),
.CLKFBOUTB (clkfboutb_unused),
.CLKOUT0 (clk_out1_ant_clk_gen_stg1),
.CLKOUT0B (clkout0b_unused),
.CLKOUT1 (clkout1_unused),
.CLKOUT1B (clkout1b_unused),
.CLKOUT2 (clkout2_unused),
.CLKOUT2B (clkout2b_unused),
.CLKOUT3 (clkout3_unused),
.CLKOUT3B (clkout3b_unused),
.CLKOUT4 (clkout4_unused),
.CLKOUT5 (clkout5_unused),
.CLKOUT6 (clkout6_unused),
// Input clock control
.CLKFBIN (clkfbout_buf_ant_clk_gen_stg1),
.CLKIN1 (clk_in1_ant_clk_gen_stg1),
.CLKIN2 (1'b0),
// Tied to always select the primary input clock
.CLKINSEL (1'b1),
// Ports for dynamic reconfiguration
.DADDR (7'h0),
.DCLK (1'b0),
.DEN (1'b0),
.DI (16'h0),
.DO (do_unused),
.DRDY (drdy_unused),
.DWE (1'b0),
// Ports for dynamic phase shift
.PSCLK (1'b0),
.PSEN (1'b0),
.PSINCDEC (1'b0),
.PSDONE (psdone_unused),
// Other control and status signals
.LOCKED (locked_int),
.CLKINSTOPPED (clkinstopped_unused),
.CLKFBSTOPPED (clkfbstopped_unused),
.PWRDWN (1'b0),
.RST (1'b0));
assign locked = locked_int;
// Clock Monitor clock assigning
//--------------------------------------
// Output buffering
//-----------------------------------
BUFG clkf_buf
(.O (clkfbout_buf_ant_clk_gen_stg1),
.I (clkfbout_ant_clk_gen_stg1));
BUFG clkout1_buf
(.O (clk_out1),
.I (clk_out1_ant_clk_gen_stg1));
endmodule
@@ -0,0 +1,246 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:33 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode funcsim
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ant_clk_gen_stg1_synth_1/ant_clk_gen_stg1_sim_netlist.v
// Design : ant_clk_gen_stg1
// Purpose : This verilog netlist is a functional simulation representation of the design and should not be modified
// or synthesized. This netlist cannot be used for SDF annotated simulation.
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
`timescale 1 ps / 1 ps
(* NotValidForBitStream *)
module ant_clk_gen_stg1
(clk_out1,
locked,
clk_in1_p,
clk_in1_n);
output clk_out1;
output locked;
input clk_in1_p;
input clk_in1_n;
(* DIFF_TERM = 0 *) (* IBUF_LOW_PWR *) wire clk_in1_n;
(* DIFF_TERM = 0 *) (* IBUF_LOW_PWR *) wire clk_in1_p;
wire clk_out1;
wire locked;
ant_clk_gen_stg1_ant_clk_gen_stg1_clk_wiz inst
(.clk_in1_n(clk_in1_n),
.clk_in1_p(clk_in1_p),
.clk_out1(clk_out1),
.locked(locked));
endmodule
(* ORIG_REF_NAME = "ant_clk_gen_stg1_clk_wiz" *)
module ant_clk_gen_stg1_ant_clk_gen_stg1_clk_wiz
(clk_out1,
locked,
clk_in1_p,
clk_in1_n);
output clk_out1;
output locked;
input clk_in1_p;
input clk_in1_n;
wire clk_in1_ant_clk_gen_stg1;
wire clk_in1_n;
wire clk_in1_p;
wire clk_out1;
wire clk_out1_ant_clk_gen_stg1;
wire clkfbout_ant_clk_gen_stg1;
wire clkfbout_buf_ant_clk_gen_stg1;
wire locked;
wire NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT1_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT2_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT3_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED;
wire NLW_mmcm_adv_inst_DRDY_UNCONNECTED;
wire NLW_mmcm_adv_inst_PSDONE_UNCONNECTED;
wire [15:0]NLW_mmcm_adv_inst_DO_UNCONNECTED;
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkf_buf
(.I(clkfbout_ant_clk_gen_stg1),
.O(clkfbout_buf_ant_clk_gen_stg1));
(* BOX_TYPE = "PRIMITIVE" *)
(* CAPACITANCE = "DONT_CARE" *)
(* IBUF_DELAY_VALUE = "0" *)
(* IFD_DELAY_VALUE = "AUTO" *)
IBUFDS #(
.IOSTANDARD("DEFAULT"))
clkin1_ibufgds
(.I(clk_in1_p),
.IB(clk_in1_n),
.O(clk_in1_ant_clk_gen_stg1));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkout1_buf
(.I(clk_out1_ant_clk_gen_stg1),
.O(clk_out1));
(* BOX_TYPE = "PRIMITIVE" *)
MMCME2_ADV #(
.BANDWIDTH("OPTIMIZED"),
.CLKFBOUT_MULT_F(18.000000),
.CLKFBOUT_PHASE(0.000000),
.CLKFBOUT_USE_FINE_PS("FALSE"),
.CLKIN1_PERIOD(4.000000),
.CLKIN2_PERIOD(0.000000),
.CLKOUT0_DIVIDE_F(9.375000),
.CLKOUT0_DUTY_CYCLE(0.500000),
.CLKOUT0_PHASE(0.000000),
.CLKOUT0_USE_FINE_PS("FALSE"),
.CLKOUT1_DIVIDE(1),
.CLKOUT1_DUTY_CYCLE(0.500000),
.CLKOUT1_PHASE(0.000000),
.CLKOUT1_USE_FINE_PS("FALSE"),
.CLKOUT2_DIVIDE(1),
.CLKOUT2_DUTY_CYCLE(0.500000),
.CLKOUT2_PHASE(0.000000),
.CLKOUT2_USE_FINE_PS("FALSE"),
.CLKOUT3_DIVIDE(1),
.CLKOUT3_DUTY_CYCLE(0.500000),
.CLKOUT3_PHASE(0.000000),
.CLKOUT3_USE_FINE_PS("FALSE"),
.CLKOUT4_CASCADE("FALSE"),
.CLKOUT4_DIVIDE(1),
.CLKOUT4_DUTY_CYCLE(0.500000),
.CLKOUT4_PHASE(0.000000),
.CLKOUT4_USE_FINE_PS("FALSE"),
.CLKOUT5_DIVIDE(1),
.CLKOUT5_DUTY_CYCLE(0.500000),
.CLKOUT5_PHASE(0.000000),
.CLKOUT5_USE_FINE_PS("FALSE"),
.CLKOUT6_DIVIDE(1),
.CLKOUT6_DUTY_CYCLE(0.500000),
.CLKOUT6_PHASE(0.000000),
.CLKOUT6_USE_FINE_PS("FALSE"),
.COMPENSATION("ZHOLD"),
.DIVCLK_DIVIDE(5),
.IS_CLKINSEL_INVERTED(1'b0),
.IS_PSEN_INVERTED(1'b0),
.IS_PSINCDEC_INVERTED(1'b0),
.IS_PWRDWN_INVERTED(1'b0),
.IS_RST_INVERTED(1'b0),
.REF_JITTER1(0.010000),
.REF_JITTER2(0.010000),
.SS_EN("FALSE"),
.SS_MODE("CENTER_HIGH"),
.SS_MOD_PERIOD(10000),
.STARTUP_WAIT("FALSE"))
mmcm_adv_inst
(.CLKFBIN(clkfbout_buf_ant_clk_gen_stg1),
.CLKFBOUT(clkfbout_ant_clk_gen_stg1),
.CLKFBOUTB(NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED),
.CLKFBSTOPPED(NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED),
.CLKIN1(clk_in1_ant_clk_gen_stg1),
.CLKIN2(1'b0),
.CLKINSEL(1'b1),
.CLKINSTOPPED(NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED),
.CLKOUT0(clk_out1_ant_clk_gen_stg1),
.CLKOUT0B(NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED),
.CLKOUT1(NLW_mmcm_adv_inst_CLKOUT1_UNCONNECTED),
.CLKOUT1B(NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED),
.CLKOUT2(NLW_mmcm_adv_inst_CLKOUT2_UNCONNECTED),
.CLKOUT2B(NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED),
.CLKOUT3(NLW_mmcm_adv_inst_CLKOUT3_UNCONNECTED),
.CLKOUT3B(NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED),
.CLKOUT4(NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED),
.CLKOUT5(NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED),
.CLKOUT6(NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED),
.DADDR({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.DCLK(1'b0),
.DEN(1'b0),
.DI({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.DO(NLW_mmcm_adv_inst_DO_UNCONNECTED[15:0]),
.DRDY(NLW_mmcm_adv_inst_DRDY_UNCONNECTED),
.DWE(1'b0),
.LOCKED(locked),
.PSCLK(1'b0),
.PSDONE(NLW_mmcm_adv_inst_PSDONE_UNCONNECTED),
.PSEN(1'b0),
.PSINCDEC(1'b0),
.PWRDWN(1'b0),
.RST(1'b0));
endmodule
`ifndef GLBL
`define GLBL
`timescale 1 ps / 1 ps
module glbl ();
parameter ROC_WIDTH = 100000;
parameter TOC_WIDTH = 0;
//-------- STARTUP Globals --------------
wire GSR;
wire GTS;
wire GWE;
wire PRLD;
tri1 p_up_tmp;
tri (weak1, strong0) PLL_LOCKG = p_up_tmp;
wire PROGB_GLBL;
wire CCLKO_GLBL;
wire FCSBO_GLBL;
wire [3:0] DO_GLBL;
wire [3:0] DI_GLBL;
reg GSR_int;
reg GTS_int;
reg PRLD_int;
//-------- JTAG Globals --------------
wire JTAG_TDO_GLBL;
wire JTAG_TCK_GLBL;
wire JTAG_TDI_GLBL;
wire JTAG_TMS_GLBL;
wire JTAG_TRST_GLBL;
reg JTAG_CAPTURE_GLBL;
reg JTAG_RESET_GLBL;
reg JTAG_SHIFT_GLBL;
reg JTAG_UPDATE_GLBL;
reg JTAG_RUNTEST_GLBL;
reg JTAG_SEL1_GLBL = 0;
reg JTAG_SEL2_GLBL = 0 ;
reg JTAG_SEL3_GLBL = 0;
reg JTAG_SEL4_GLBL = 0;
reg JTAG_USER_TDO1_GLBL = 1'bz;
reg JTAG_USER_TDO2_GLBL = 1'bz;
reg JTAG_USER_TDO3_GLBL = 1'bz;
reg JTAG_USER_TDO4_GLBL = 1'bz;
assign (strong1, weak0) GSR = GSR_int;
assign (strong1, weak0) GTS = GTS_int;
assign (weak1, weak0) PRLD = PRLD_int;
initial begin
GSR_int = 1'b1;
PRLD_int = 1'b1;
#(ROC_WIDTH)
GSR_int = 1'b0;
PRLD_int = 1'b0;
end
initial begin
GTS_int = 1'b1;
#(TOC_WIDTH)
GTS_int = 1'b0;
end
endmodule
`endif
@@ -0,0 +1,191 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:33 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode funcsim
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ant_clk_gen_stg1_synth_1/ant_clk_gen_stg1_sim_netlist.vhdl
-- Design : ant_clk_gen_stg1
-- Purpose : This VHDL netlist is a functional simulation representation of the design and should not be modified or
-- synthesized. This netlist cannot be used for SDF annotated simulation.
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity ant_clk_gen_stg1_ant_clk_gen_stg1_clk_wiz is
port (
clk_out1 : out STD_LOGIC;
locked : out STD_LOGIC;
clk_in1_p : in STD_LOGIC;
clk_in1_n : in STD_LOGIC
);
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of ant_clk_gen_stg1_ant_clk_gen_stg1_clk_wiz : entity is "ant_clk_gen_stg1_clk_wiz";
end ant_clk_gen_stg1_ant_clk_gen_stg1_clk_wiz;
architecture STRUCTURE of ant_clk_gen_stg1_ant_clk_gen_stg1_clk_wiz is
signal clk_in1_ant_clk_gen_stg1 : STD_LOGIC;
signal clk_out1_ant_clk_gen_stg1 : STD_LOGIC;
signal clkfbout_ant_clk_gen_stg1 : STD_LOGIC;
signal clkfbout_buf_ant_clk_gen_stg1 : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT1_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT2_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT3_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_DRDY_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_PSDONE_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_DO_UNCONNECTED : STD_LOGIC_VECTOR ( 15 downto 0 );
attribute BOX_TYPE : string;
attribute BOX_TYPE of clkf_buf : label is "PRIMITIVE";
attribute BOX_TYPE of clkin1_ibufgds : label is "PRIMITIVE";
attribute CAPACITANCE : string;
attribute CAPACITANCE of clkin1_ibufgds : label is "DONT_CARE";
attribute IBUF_DELAY_VALUE : string;
attribute IBUF_DELAY_VALUE of clkin1_ibufgds : label is "0";
attribute IFD_DELAY_VALUE : string;
attribute IFD_DELAY_VALUE of clkin1_ibufgds : label is "AUTO";
attribute BOX_TYPE of clkout1_buf : label is "PRIMITIVE";
attribute BOX_TYPE of mmcm_adv_inst : label is "PRIMITIVE";
begin
clkf_buf: unisim.vcomponents.BUFG
port map (
I => clkfbout_ant_clk_gen_stg1,
O => clkfbout_buf_ant_clk_gen_stg1
);
clkin1_ibufgds: unisim.vcomponents.IBUFDS
generic map(
IOSTANDARD => "DEFAULT"
)
port map (
I => clk_in1_p,
IB => clk_in1_n,
O => clk_in1_ant_clk_gen_stg1
);
clkout1_buf: unisim.vcomponents.BUFG
port map (
I => clk_out1_ant_clk_gen_stg1,
O => clk_out1
);
mmcm_adv_inst: unisim.vcomponents.MMCME2_ADV
generic map(
BANDWIDTH => "OPTIMIZED",
CLKFBOUT_MULT_F => 18.000000,
CLKFBOUT_PHASE => 0.000000,
CLKFBOUT_USE_FINE_PS => false,
CLKIN1_PERIOD => 4.000000,
CLKIN2_PERIOD => 0.000000,
CLKOUT0_DIVIDE_F => 9.375000,
CLKOUT0_DUTY_CYCLE => 0.500000,
CLKOUT0_PHASE => 0.000000,
CLKOUT0_USE_FINE_PS => false,
CLKOUT1_DIVIDE => 1,
CLKOUT1_DUTY_CYCLE => 0.500000,
CLKOUT1_PHASE => 0.000000,
CLKOUT1_USE_FINE_PS => false,
CLKOUT2_DIVIDE => 1,
CLKOUT2_DUTY_CYCLE => 0.500000,
CLKOUT2_PHASE => 0.000000,
CLKOUT2_USE_FINE_PS => false,
CLKOUT3_DIVIDE => 1,
CLKOUT3_DUTY_CYCLE => 0.500000,
CLKOUT3_PHASE => 0.000000,
CLKOUT3_USE_FINE_PS => false,
CLKOUT4_CASCADE => false,
CLKOUT4_DIVIDE => 1,
CLKOUT4_DUTY_CYCLE => 0.500000,
CLKOUT4_PHASE => 0.000000,
CLKOUT4_USE_FINE_PS => false,
CLKOUT5_DIVIDE => 1,
CLKOUT5_DUTY_CYCLE => 0.500000,
CLKOUT5_PHASE => 0.000000,
CLKOUT5_USE_FINE_PS => false,
CLKOUT6_DIVIDE => 1,
CLKOUT6_DUTY_CYCLE => 0.500000,
CLKOUT6_PHASE => 0.000000,
CLKOUT6_USE_FINE_PS => false,
COMPENSATION => "ZHOLD",
DIVCLK_DIVIDE => 5,
IS_CLKINSEL_INVERTED => '0',
IS_PSEN_INVERTED => '0',
IS_PSINCDEC_INVERTED => '0',
IS_PWRDWN_INVERTED => '0',
IS_RST_INVERTED => '0',
REF_JITTER1 => 0.010000,
REF_JITTER2 => 0.010000,
SS_EN => "FALSE",
SS_MODE => "CENTER_HIGH",
SS_MOD_PERIOD => 10000,
STARTUP_WAIT => false
)
port map (
CLKFBIN => clkfbout_buf_ant_clk_gen_stg1,
CLKFBOUT => clkfbout_ant_clk_gen_stg1,
CLKFBOUTB => NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED,
CLKFBSTOPPED => NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED,
CLKIN1 => clk_in1_ant_clk_gen_stg1,
CLKIN2 => '0',
CLKINSEL => '1',
CLKINSTOPPED => NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED,
CLKOUT0 => clk_out1_ant_clk_gen_stg1,
CLKOUT0B => NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED,
CLKOUT1 => NLW_mmcm_adv_inst_CLKOUT1_UNCONNECTED,
CLKOUT1B => NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED,
CLKOUT2 => NLW_mmcm_adv_inst_CLKOUT2_UNCONNECTED,
CLKOUT2B => NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED,
CLKOUT3 => NLW_mmcm_adv_inst_CLKOUT3_UNCONNECTED,
CLKOUT3B => NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED,
CLKOUT4 => NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED,
CLKOUT5 => NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED,
CLKOUT6 => NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED,
DADDR(6 downto 0) => B"0000000",
DCLK => '0',
DEN => '0',
DI(15 downto 0) => B"0000000000000000",
DO(15 downto 0) => NLW_mmcm_adv_inst_DO_UNCONNECTED(15 downto 0),
DRDY => NLW_mmcm_adv_inst_DRDY_UNCONNECTED,
DWE => '0',
LOCKED => locked,
PSCLK => '0',
PSDONE => NLW_mmcm_adv_inst_PSDONE_UNCONNECTED,
PSEN => '0',
PSINCDEC => '0',
PWRDWN => '0',
RST => '0'
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity ant_clk_gen_stg1 is
port (
clk_out1 : out STD_LOGIC;
locked : out STD_LOGIC;
clk_in1_p : in STD_LOGIC;
clk_in1_n : in STD_LOGIC
);
attribute NotValidForBitStream : boolean;
attribute NotValidForBitStream of ant_clk_gen_stg1 : entity is true;
end ant_clk_gen_stg1;
architecture STRUCTURE of ant_clk_gen_stg1 is
begin
inst: entity work.ant_clk_gen_stg1_ant_clk_gen_stg1_clk_wiz
port map (
clk_in1_n => clk_in1_n,
clk_in1_p => clk_in1_p,
clk_out1 => clk_out1,
locked => locked
);
end STRUCTURE;
@@ -0,0 +1,22 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:33 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ant_clk_gen_stg1_synth_1/ant_clk_gen_stg1_stub.v
// Design : ant_clk_gen_stg1
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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.
module ant_clk_gen_stg1(clk_out1, locked, clk_in1_p, clk_in1_n)
/* synthesis syn_black_box black_box_pad_pin="clk_out1,locked,clk_in1_p,clk_in1_n" */;
output clk_out1;
output locked;
input clk_in1_p;
input clk_in1_n;
endmodule
@@ -0,0 +1,31 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:33 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ant_clk_gen_stg1_synth_1/ant_clk_gen_stg1_stub.vhdl
-- Design : ant_clk_gen_stg1
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity ant_clk_gen_stg1 is
Port (
clk_out1 : out STD_LOGIC;
locked : out STD_LOGIC;
clk_in1_p : in STD_LOGIC;
clk_in1_n : in STD_LOGIC
);
end ant_clk_gen_stg1;
architecture stub of ant_clk_gen_stg1 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 "clk_out1,locked,clk_in1_p,clk_in1_n";
begin
end;
@@ -0,0 +1,99 @@
// file: ant_clk_gen_stg2.v
//
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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.
//
//----------------------------------------------------------------------------
// User entered comments
//----------------------------------------------------------------------------
// None
//
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1____96.000______0.000______50.0______136.435____101.715
// clk_out2____48.000______0.000______50.0______158.351____101.715
// clk_out3____32.000______0.000______50.0______172.426____101.715
// clk_out4____19.200______0.000______50.0______190.665____101.715
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary______________96____________0.010
`timescale 1ps/1ps
(* CORE_GENERATION_INFO = "ant_clk_gen_stg2,clk_wiz_v6_0_3_0_0,{component_name=ant_clk_gen_stg2,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=4,clkin1_period=10.417,clkin2_period=10.000,use_power_down=false,use_reset=false,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *)
module ant_clk_gen_stg2
(
// Clock out ports
output clk_out1,
output clk_out2,
output clk_out3,
output clk_out4,
// Status and control signals
output locked,
// Clock in ports
input clk_in1
);
ant_clk_gen_stg2_clk_wiz inst
(
// Clock out ports
.clk_out1(clk_out1),
.clk_out2(clk_out2),
.clk_out3(clk_out3),
.clk_out4(clk_out4),
// Status and control signals
.locked(locked),
// Clock in ports
.clk_in1(clk_in1)
);
endmodule
@@ -0,0 +1,85 @@
//
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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.
//
//----------------------------------------------------------------------------
// User entered comments
//----------------------------------------------------------------------------
// None
//
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1____96.000______0.000______50.0______136.435____101.715
// clk_out2____48.000______0.000______50.0______158.351____101.715
// clk_out3____32.000______0.000______50.0______172.426____101.715
// clk_out4____19.200______0.000______50.0______190.665____101.715
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary______________96____________0.010
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
ant_clk_gen_stg2 instance_name
(
// Clock out ports
.clk_out1(clk_out1), // output clk_out1
.clk_out2(clk_out2), // output clk_out2
.clk_out3(clk_out3), // output clk_out3
.clk_out4(clk_out4), // output clk_out4
// Status and control signals
.locked(locked), // output locked
// Clock in ports
.clk_in1(clk_in1)); // input clk_in1
// INST_TAG_END ------ End INSTANTIATION Template ---------
@@ -0,0 +1,228 @@
// file: ant_clk_gen_stg2.v
//
// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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.
//
//----------------------------------------------------------------------------
// User entered comments
//----------------------------------------------------------------------------
// None
//
//----------------------------------------------------------------------------
// Output Output Phase Duty Cycle Pk-to-Pk Phase
// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)
//----------------------------------------------------------------------------
// clk_out1____96.000______0.000______50.0______136.435____101.715
// clk_out2____48.000______0.000______50.0______158.351____101.715
// clk_out3____32.000______0.000______50.0______172.426____101.715
// clk_out4____19.200______0.000______50.0______190.665____101.715
//
//----------------------------------------------------------------------------
// Input Clock Freq (MHz) Input Jitter (UI)
//----------------------------------------------------------------------------
// __primary______________96____________0.010
`timescale 1ps/1ps
module ant_clk_gen_stg2_clk_wiz
(// Clock in ports
// Clock out ports
output clk_out1,
output clk_out2,
output clk_out3,
output clk_out4,
// Status and control signals
output locked,
input clk_in1
);
// Input buffering
//------------------------------------
wire clk_in1_ant_clk_gen_stg2;
wire clk_in2_ant_clk_gen_stg2;
BUFG clkin1_bufg
(.O (clk_in1_ant_clk_gen_stg2),
.I (clk_in1));
// Clocking PRIMITIVE
//------------------------------------
// Instantiation of the MMCM PRIMITIVE
// * Unused inputs are tied off
// * Unused outputs are labeled unused
wire clk_out1_ant_clk_gen_stg2;
wire clk_out2_ant_clk_gen_stg2;
wire clk_out3_ant_clk_gen_stg2;
wire clk_out4_ant_clk_gen_stg2;
wire clk_out5_ant_clk_gen_stg2;
wire clk_out6_ant_clk_gen_stg2;
wire clk_out7_ant_clk_gen_stg2;
wire [15:0] do_unused;
wire drdy_unused;
wire psdone_unused;
wire locked_int;
wire clkfbout_ant_clk_gen_stg2;
wire clkfbout_buf_ant_clk_gen_stg2;
wire clkfboutb_unused;
wire clkout0b_unused;
wire clkout1b_unused;
wire clkout2b_unused;
wire clkout3b_unused;
wire clkout4_unused;
wire clkout5_unused;
wire clkout6_unused;
wire clkfbstopped_unused;
wire clkinstopped_unused;
MMCME2_ADV
#(.BANDWIDTH ("OPTIMIZED"),
.CLKOUT4_CASCADE ("FALSE"),
.COMPENSATION ("ZHOLD"),
.STARTUP_WAIT ("FALSE"),
.DIVCLK_DIVIDE (1),
.CLKFBOUT_MULT_F (10.000),
.CLKFBOUT_PHASE (0.000),
.CLKFBOUT_USE_FINE_PS ("FALSE"),
.CLKOUT0_DIVIDE_F (10.000),
.CLKOUT0_PHASE (0.000),
.CLKOUT0_DUTY_CYCLE (0.500),
.CLKOUT0_USE_FINE_PS ("FALSE"),
.CLKOUT1_DIVIDE (20),
.CLKOUT1_PHASE (0.000),
.CLKOUT1_DUTY_CYCLE (0.500),
.CLKOUT1_USE_FINE_PS ("FALSE"),
.CLKOUT2_DIVIDE (30),
.CLKOUT2_PHASE (0.000),
.CLKOUT2_DUTY_CYCLE (0.500),
.CLKOUT2_USE_FINE_PS ("FALSE"),
.CLKOUT3_DIVIDE (50),
.CLKOUT3_PHASE (0.000),
.CLKOUT3_DUTY_CYCLE (0.500),
.CLKOUT3_USE_FINE_PS ("FALSE"),
.CLKIN1_PERIOD (10.417))
mmcm_adv_inst
// Output clocks
(
.CLKFBOUT (clkfbout_ant_clk_gen_stg2),
.CLKFBOUTB (clkfboutb_unused),
.CLKOUT0 (clk_out1_ant_clk_gen_stg2),
.CLKOUT0B (clkout0b_unused),
.CLKOUT1 (clk_out2_ant_clk_gen_stg2),
.CLKOUT1B (clkout1b_unused),
.CLKOUT2 (clk_out3_ant_clk_gen_stg2),
.CLKOUT2B (clkout2b_unused),
.CLKOUT3 (clk_out4_ant_clk_gen_stg2),
.CLKOUT3B (clkout3b_unused),
.CLKOUT4 (clkout4_unused),
.CLKOUT5 (clkout5_unused),
.CLKOUT6 (clkout6_unused),
// Input clock control
.CLKFBIN (clkfbout_buf_ant_clk_gen_stg2),
.CLKIN1 (clk_in1_ant_clk_gen_stg2),
.CLKIN2 (1'b0),
// Tied to always select the primary input clock
.CLKINSEL (1'b1),
// Ports for dynamic reconfiguration
.DADDR (7'h0),
.DCLK (1'b0),
.DEN (1'b0),
.DI (16'h0),
.DO (do_unused),
.DRDY (drdy_unused),
.DWE (1'b0),
// Ports for dynamic phase shift
.PSCLK (1'b0),
.PSEN (1'b0),
.PSINCDEC (1'b0),
.PSDONE (psdone_unused),
// Other control and status signals
.LOCKED (locked_int),
.CLKINSTOPPED (clkinstopped_unused),
.CLKFBSTOPPED (clkfbstopped_unused),
.PWRDWN (1'b0),
.RST (1'b0));
assign locked = locked_int;
// Clock Monitor clock assigning
//--------------------------------------
// Output buffering
//-----------------------------------
BUFG clkf_buf
(.O (clkfbout_buf_ant_clk_gen_stg2),
.I (clkfbout_ant_clk_gen_stg2));
BUFG clkout1_buf
(.O (clk_out1),
.I (clk_out1_ant_clk_gen_stg2));
BUFG clkout2_buf
(.O (clk_out2),
.I (clk_out2_ant_clk_gen_stg2));
BUFG clkout3_buf
(.O (clk_out3),
.I (clk_out3_ant_clk_gen_stg2));
BUFG clkout4_buf
(.O (clk_out4),
.I (clk_out4_ant_clk_gen_stg2));
endmodule
@@ -0,0 +1,266 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:33 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode funcsim
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ant_clk_gen_stg2_synth_1/ant_clk_gen_stg2_sim_netlist.v
// Design : ant_clk_gen_stg2
// Purpose : This verilog netlist is a functional simulation representation of the design and should not be modified
// or synthesized. This netlist cannot be used for SDF annotated simulation.
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
`timescale 1 ps / 1 ps
(* NotValidForBitStream *)
module ant_clk_gen_stg2
(clk_out1,
clk_out2,
clk_out3,
clk_out4,
locked,
clk_in1);
output clk_out1;
output clk_out2;
output clk_out3;
output clk_out4;
output locked;
input clk_in1;
wire clk_in1;
wire clk_out1;
wire clk_out2;
wire clk_out3;
wire clk_out4;
wire locked;
ant_clk_gen_stg2_ant_clk_gen_stg2_clk_wiz inst
(.clk_in1(clk_in1),
.clk_out1(clk_out1),
.clk_out2(clk_out2),
.clk_out3(clk_out3),
.clk_out4(clk_out4),
.locked(locked));
endmodule
(* ORIG_REF_NAME = "ant_clk_gen_stg2_clk_wiz" *)
module ant_clk_gen_stg2_ant_clk_gen_stg2_clk_wiz
(clk_out1,
clk_out2,
clk_out3,
clk_out4,
locked,
clk_in1);
output clk_out1;
output clk_out2;
output clk_out3;
output clk_out4;
output locked;
input clk_in1;
wire clk_in1;
wire clk_in1_ant_clk_gen_stg2;
wire clk_out1;
wire clk_out1_ant_clk_gen_stg2;
wire clk_out2;
wire clk_out2_ant_clk_gen_stg2;
wire clk_out3;
wire clk_out3_ant_clk_gen_stg2;
wire clk_out4;
wire clk_out4_ant_clk_gen_stg2;
wire clkfbout_ant_clk_gen_stg2;
wire clkfbout_buf_ant_clk_gen_stg2;
wire locked;
wire NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED;
wire NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED;
wire NLW_mmcm_adv_inst_DRDY_UNCONNECTED;
wire NLW_mmcm_adv_inst_PSDONE_UNCONNECTED;
wire [15:0]NLW_mmcm_adv_inst_DO_UNCONNECTED;
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkf_buf
(.I(clkfbout_ant_clk_gen_stg2),
.O(clkfbout_buf_ant_clk_gen_stg2));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkin1_bufg
(.I(clk_in1),
.O(clk_in1_ant_clk_gen_stg2));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkout1_buf
(.I(clk_out1_ant_clk_gen_stg2),
.O(clk_out1));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkout2_buf
(.I(clk_out2_ant_clk_gen_stg2),
.O(clk_out2));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkout3_buf
(.I(clk_out3_ant_clk_gen_stg2),
.O(clk_out3));
(* BOX_TYPE = "PRIMITIVE" *)
BUFG clkout4_buf
(.I(clk_out4_ant_clk_gen_stg2),
.O(clk_out4));
(* BOX_TYPE = "PRIMITIVE" *)
MMCME2_ADV #(
.BANDWIDTH("OPTIMIZED"),
.CLKFBOUT_MULT_F(10.000000),
.CLKFBOUT_PHASE(0.000000),
.CLKFBOUT_USE_FINE_PS("FALSE"),
.CLKIN1_PERIOD(10.417000),
.CLKIN2_PERIOD(0.000000),
.CLKOUT0_DIVIDE_F(10.000000),
.CLKOUT0_DUTY_CYCLE(0.500000),
.CLKOUT0_PHASE(0.000000),
.CLKOUT0_USE_FINE_PS("FALSE"),
.CLKOUT1_DIVIDE(20),
.CLKOUT1_DUTY_CYCLE(0.500000),
.CLKOUT1_PHASE(0.000000),
.CLKOUT1_USE_FINE_PS("FALSE"),
.CLKOUT2_DIVIDE(30),
.CLKOUT2_DUTY_CYCLE(0.500000),
.CLKOUT2_PHASE(0.000000),
.CLKOUT2_USE_FINE_PS("FALSE"),
.CLKOUT3_DIVIDE(50),
.CLKOUT3_DUTY_CYCLE(0.500000),
.CLKOUT3_PHASE(0.000000),
.CLKOUT3_USE_FINE_PS("FALSE"),
.CLKOUT4_CASCADE("FALSE"),
.CLKOUT4_DIVIDE(1),
.CLKOUT4_DUTY_CYCLE(0.500000),
.CLKOUT4_PHASE(0.000000),
.CLKOUT4_USE_FINE_PS("FALSE"),
.CLKOUT5_DIVIDE(1),
.CLKOUT5_DUTY_CYCLE(0.500000),
.CLKOUT5_PHASE(0.000000),
.CLKOUT5_USE_FINE_PS("FALSE"),
.CLKOUT6_DIVIDE(1),
.CLKOUT6_DUTY_CYCLE(0.500000),
.CLKOUT6_PHASE(0.000000),
.CLKOUT6_USE_FINE_PS("FALSE"),
.COMPENSATION("BUF_IN"),
.DIVCLK_DIVIDE(1),
.IS_CLKINSEL_INVERTED(1'b0),
.IS_PSEN_INVERTED(1'b0),
.IS_PSINCDEC_INVERTED(1'b0),
.IS_PWRDWN_INVERTED(1'b0),
.IS_RST_INVERTED(1'b0),
.REF_JITTER1(0.010000),
.REF_JITTER2(0.010000),
.SS_EN("FALSE"),
.SS_MODE("CENTER_HIGH"),
.SS_MOD_PERIOD(10000),
.STARTUP_WAIT("FALSE"))
mmcm_adv_inst
(.CLKFBIN(clkfbout_buf_ant_clk_gen_stg2),
.CLKFBOUT(clkfbout_ant_clk_gen_stg2),
.CLKFBOUTB(NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED),
.CLKFBSTOPPED(NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED),
.CLKIN1(clk_in1_ant_clk_gen_stg2),
.CLKIN2(1'b0),
.CLKINSEL(1'b1),
.CLKINSTOPPED(NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED),
.CLKOUT0(clk_out1_ant_clk_gen_stg2),
.CLKOUT0B(NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED),
.CLKOUT1(clk_out2_ant_clk_gen_stg2),
.CLKOUT1B(NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED),
.CLKOUT2(clk_out3_ant_clk_gen_stg2),
.CLKOUT2B(NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED),
.CLKOUT3(clk_out4_ant_clk_gen_stg2),
.CLKOUT3B(NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED),
.CLKOUT4(NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED),
.CLKOUT5(NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED),
.CLKOUT6(NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED),
.DADDR({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.DCLK(1'b0),
.DEN(1'b0),
.DI({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.DO(NLW_mmcm_adv_inst_DO_UNCONNECTED[15:0]),
.DRDY(NLW_mmcm_adv_inst_DRDY_UNCONNECTED),
.DWE(1'b0),
.LOCKED(locked),
.PSCLK(1'b0),
.PSDONE(NLW_mmcm_adv_inst_PSDONE_UNCONNECTED),
.PSEN(1'b0),
.PSINCDEC(1'b0),
.PWRDWN(1'b0),
.RST(1'b0));
endmodule
`ifndef GLBL
`define GLBL
`timescale 1 ps / 1 ps
module glbl ();
parameter ROC_WIDTH = 100000;
parameter TOC_WIDTH = 0;
//-------- STARTUP Globals --------------
wire GSR;
wire GTS;
wire GWE;
wire PRLD;
tri1 p_up_tmp;
tri (weak1, strong0) PLL_LOCKG = p_up_tmp;
wire PROGB_GLBL;
wire CCLKO_GLBL;
wire FCSBO_GLBL;
wire [3:0] DO_GLBL;
wire [3:0] DI_GLBL;
reg GSR_int;
reg GTS_int;
reg PRLD_int;
//-------- JTAG Globals --------------
wire JTAG_TDO_GLBL;
wire JTAG_TCK_GLBL;
wire JTAG_TDI_GLBL;
wire JTAG_TMS_GLBL;
wire JTAG_TRST_GLBL;
reg JTAG_CAPTURE_GLBL;
reg JTAG_RESET_GLBL;
reg JTAG_SHIFT_GLBL;
reg JTAG_UPDATE_GLBL;
reg JTAG_RUNTEST_GLBL;
reg JTAG_SEL1_GLBL = 0;
reg JTAG_SEL2_GLBL = 0 ;
reg JTAG_SEL3_GLBL = 0;
reg JTAG_SEL4_GLBL = 0;
reg JTAG_USER_TDO1_GLBL = 1'bz;
reg JTAG_USER_TDO2_GLBL = 1'bz;
reg JTAG_USER_TDO3_GLBL = 1'bz;
reg JTAG_USER_TDO4_GLBL = 1'bz;
assign (strong1, weak0) GSR = GSR_int;
assign (strong1, weak0) GTS = GTS_int;
assign (weak1, weak0) PRLD = PRLD_int;
initial begin
GSR_int = 1'b1;
PRLD_int = 1'b1;
#(ROC_WIDTH)
GSR_int = 1'b0;
PRLD_int = 1'b0;
end
initial begin
GTS_int = 1'b1;
#(TOC_WIDTH)
GTS_int = 1'b0;
end
endmodule
`endif
@@ -0,0 +1,205 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:33 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode funcsim
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ant_clk_gen_stg2_synth_1/ant_clk_gen_stg2_sim_netlist.vhdl
-- Design : ant_clk_gen_stg2
-- Purpose : This VHDL netlist is a functional simulation representation of the design and should not be modified or
-- synthesized. This netlist cannot be used for SDF annotated simulation.
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity ant_clk_gen_stg2_ant_clk_gen_stg2_clk_wiz is
port (
clk_out1 : out STD_LOGIC;
clk_out2 : out STD_LOGIC;
clk_out3 : out STD_LOGIC;
clk_out4 : out STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
);
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of ant_clk_gen_stg2_ant_clk_gen_stg2_clk_wiz : entity is "ant_clk_gen_stg2_clk_wiz";
end ant_clk_gen_stg2_ant_clk_gen_stg2_clk_wiz;
architecture STRUCTURE of ant_clk_gen_stg2_ant_clk_gen_stg2_clk_wiz is
signal clk_in1_ant_clk_gen_stg2 : STD_LOGIC;
signal clk_out1_ant_clk_gen_stg2 : STD_LOGIC;
signal clk_out2_ant_clk_gen_stg2 : STD_LOGIC;
signal clk_out3_ant_clk_gen_stg2 : STD_LOGIC;
signal clk_out4_ant_clk_gen_stg2 : STD_LOGIC;
signal clkfbout_ant_clk_gen_stg2 : STD_LOGIC;
signal clkfbout_buf_ant_clk_gen_stg2 : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_DRDY_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_PSDONE_UNCONNECTED : STD_LOGIC;
signal NLW_mmcm_adv_inst_DO_UNCONNECTED : STD_LOGIC_VECTOR ( 15 downto 0 );
attribute BOX_TYPE : string;
attribute BOX_TYPE of clkf_buf : label is "PRIMITIVE";
attribute BOX_TYPE of clkin1_bufg : label is "PRIMITIVE";
attribute BOX_TYPE of clkout1_buf : label is "PRIMITIVE";
attribute BOX_TYPE of clkout2_buf : label is "PRIMITIVE";
attribute BOX_TYPE of clkout3_buf : label is "PRIMITIVE";
attribute BOX_TYPE of clkout4_buf : label is "PRIMITIVE";
attribute BOX_TYPE of mmcm_adv_inst : label is "PRIMITIVE";
begin
clkf_buf: unisim.vcomponents.BUFG
port map (
I => clkfbout_ant_clk_gen_stg2,
O => clkfbout_buf_ant_clk_gen_stg2
);
clkin1_bufg: unisim.vcomponents.BUFG
port map (
I => clk_in1,
O => clk_in1_ant_clk_gen_stg2
);
clkout1_buf: unisim.vcomponents.BUFG
port map (
I => clk_out1_ant_clk_gen_stg2,
O => clk_out1
);
clkout2_buf: unisim.vcomponents.BUFG
port map (
I => clk_out2_ant_clk_gen_stg2,
O => clk_out2
);
clkout3_buf: unisim.vcomponents.BUFG
port map (
I => clk_out3_ant_clk_gen_stg2,
O => clk_out3
);
clkout4_buf: unisim.vcomponents.BUFG
port map (
I => clk_out4_ant_clk_gen_stg2,
O => clk_out4
);
mmcm_adv_inst: unisim.vcomponents.MMCME2_ADV
generic map(
BANDWIDTH => "OPTIMIZED",
CLKFBOUT_MULT_F => 10.000000,
CLKFBOUT_PHASE => 0.000000,
CLKFBOUT_USE_FINE_PS => false,
CLKIN1_PERIOD => 10.417000,
CLKIN2_PERIOD => 0.000000,
CLKOUT0_DIVIDE_F => 10.000000,
CLKOUT0_DUTY_CYCLE => 0.500000,
CLKOUT0_PHASE => 0.000000,
CLKOUT0_USE_FINE_PS => false,
CLKOUT1_DIVIDE => 20,
CLKOUT1_DUTY_CYCLE => 0.500000,
CLKOUT1_PHASE => 0.000000,
CLKOUT1_USE_FINE_PS => false,
CLKOUT2_DIVIDE => 30,
CLKOUT2_DUTY_CYCLE => 0.500000,
CLKOUT2_PHASE => 0.000000,
CLKOUT2_USE_FINE_PS => false,
CLKOUT3_DIVIDE => 50,
CLKOUT3_DUTY_CYCLE => 0.500000,
CLKOUT3_PHASE => 0.000000,
CLKOUT3_USE_FINE_PS => false,
CLKOUT4_CASCADE => false,
CLKOUT4_DIVIDE => 1,
CLKOUT4_DUTY_CYCLE => 0.500000,
CLKOUT4_PHASE => 0.000000,
CLKOUT4_USE_FINE_PS => false,
CLKOUT5_DIVIDE => 1,
CLKOUT5_DUTY_CYCLE => 0.500000,
CLKOUT5_PHASE => 0.000000,
CLKOUT5_USE_FINE_PS => false,
CLKOUT6_DIVIDE => 1,
CLKOUT6_DUTY_CYCLE => 0.500000,
CLKOUT6_PHASE => 0.000000,
CLKOUT6_USE_FINE_PS => false,
COMPENSATION => "BUF_IN",
DIVCLK_DIVIDE => 1,
IS_CLKINSEL_INVERTED => '0',
IS_PSEN_INVERTED => '0',
IS_PSINCDEC_INVERTED => '0',
IS_PWRDWN_INVERTED => '0',
IS_RST_INVERTED => '0',
REF_JITTER1 => 0.010000,
REF_JITTER2 => 0.010000,
SS_EN => "FALSE",
SS_MODE => "CENTER_HIGH",
SS_MOD_PERIOD => 10000,
STARTUP_WAIT => false
)
port map (
CLKFBIN => clkfbout_buf_ant_clk_gen_stg2,
CLKFBOUT => clkfbout_ant_clk_gen_stg2,
CLKFBOUTB => NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED,
CLKFBSTOPPED => NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED,
CLKIN1 => clk_in1_ant_clk_gen_stg2,
CLKIN2 => '0',
CLKINSEL => '1',
CLKINSTOPPED => NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED,
CLKOUT0 => clk_out1_ant_clk_gen_stg2,
CLKOUT0B => NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED,
CLKOUT1 => clk_out2_ant_clk_gen_stg2,
CLKOUT1B => NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED,
CLKOUT2 => clk_out3_ant_clk_gen_stg2,
CLKOUT2B => NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED,
CLKOUT3 => clk_out4_ant_clk_gen_stg2,
CLKOUT3B => NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED,
CLKOUT4 => NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED,
CLKOUT5 => NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED,
CLKOUT6 => NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED,
DADDR(6 downto 0) => B"0000000",
DCLK => '0',
DEN => '0',
DI(15 downto 0) => B"0000000000000000",
DO(15 downto 0) => NLW_mmcm_adv_inst_DO_UNCONNECTED(15 downto 0),
DRDY => NLW_mmcm_adv_inst_DRDY_UNCONNECTED,
DWE => '0',
LOCKED => locked,
PSCLK => '0',
PSDONE => NLW_mmcm_adv_inst_PSDONE_UNCONNECTED,
PSEN => '0',
PSINCDEC => '0',
PWRDWN => '0',
RST => '0'
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity ant_clk_gen_stg2 is
port (
clk_out1 : out STD_LOGIC;
clk_out2 : out STD_LOGIC;
clk_out3 : out STD_LOGIC;
clk_out4 : out STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
);
attribute NotValidForBitStream : boolean;
attribute NotValidForBitStream of ant_clk_gen_stg2 : entity is true;
end ant_clk_gen_stg2;
architecture STRUCTURE of ant_clk_gen_stg2 is
begin
inst: entity work.ant_clk_gen_stg2_ant_clk_gen_stg2_clk_wiz
port map (
clk_in1 => clk_in1,
clk_out1 => clk_out1,
clk_out2 => clk_out2,
clk_out3 => clk_out3,
clk_out4 => clk_out4,
locked => locked
);
end STRUCTURE;
@@ -0,0 +1,25 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:33 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ant_clk_gen_stg2_synth_1/ant_clk_gen_stg2_stub.v
// Design : ant_clk_gen_stg2
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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.
module ant_clk_gen_stg2(clk_out1, clk_out2, clk_out3, clk_out4, locked,
clk_in1)
/* synthesis syn_black_box black_box_pad_pin="clk_out1,clk_out2,clk_out3,clk_out4,locked,clk_in1" */;
output clk_out1;
output clk_out2;
output clk_out3;
output clk_out4;
output locked;
input clk_in1;
endmodule
@@ -0,0 +1,33 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:33 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/ant_clk_gen_stg2_synth_1/ant_clk_gen_stg2_stub.vhdl
-- Design : ant_clk_gen_stg2
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity ant_clk_gen_stg2 is
Port (
clk_out1 : out STD_LOGIC;
clk_out2 : out STD_LOGIC;
clk_out3 : out STD_LOGIC;
clk_out4 : out STD_LOGIC;
locked : out STD_LOGIC;
clk_in1 : in STD_LOGIC
);
end ant_clk_gen_stg2;
architecture stub of ant_clk_gen_stg2 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 "clk_out1,clk_out2,clk_out3,clk_out4,locked,clk_in1";
begin
end;
@@ -0,0 +1,69 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:cordic:6.0
// IP Revision: 15
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
atan2_16b your_instance_name (
.aclk(aclk), // input wire aclk
.s_axis_cartesian_tvalid(s_axis_cartesian_tvalid), // input wire s_axis_cartesian_tvalid
.s_axis_cartesian_tdata(s_axis_cartesian_tdata), // input wire [31 : 0] s_axis_cartesian_tdata
.m_axis_dout_tvalid(m_axis_dout_tvalid), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(m_axis_dout_tdata) // output wire [15 : 0] m_axis_dout_tdata
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file atan2_16b.v when simulating
// the core, atan2_16b. When compiling the wrapper file, be sure to
// reference the Verilog simulation library.
@@ -0,0 +1,83 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:cordic:6.0
-- IP Revision: 15
-- The following code must appear in the VHDL architecture header.
------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT atan2_16b
PORT (
aclk : IN STD_LOGIC;
s_axis_cartesian_tvalid : IN STD_LOGIC;
s_axis_cartesian_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
m_axis_dout_tvalid : OUT STD_LOGIC;
m_axis_dout_tdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------
-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.
------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : atan2_16b
PORT MAP (
aclk => aclk,
s_axis_cartesian_tvalid => s_axis_cartesian_tvalid,
s_axis_cartesian_tdata => s_axis_cartesian_tdata,
m_axis_dout_tvalid => m_axis_dout_tvalid,
m_axis_dout_tdata => m_axis_dout_tdata
);
-- INST_TAG_END ------ End INSTANTIATION Template ---------
-- You must compile the wrapper file atan2_16b.vhd when simulating
-- the core, atan2_16b. When compiling the wrapper file, be sure to
-- reference the VHDL simulation library.
@@ -0,0 +1,25 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:34:07 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/atan2_16b_synth_1/atan2_16b_stub.v
// Design : atan2_16b
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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 = "cordic_v6_0_15,Vivado 2019.1.3" *)
module atan2_16b(aclk, s_axis_cartesian_tvalid,
s_axis_cartesian_tdata, m_axis_dout_tvalid, m_axis_dout_tdata)
/* synthesis syn_black_box black_box_pad_pin="aclk,s_axis_cartesian_tvalid,s_axis_cartesian_tdata[31:0],m_axis_dout_tvalid,m_axis_dout_tdata[15:0]" */;
input aclk;
input s_axis_cartesian_tvalid;
input [31:0]s_axis_cartesian_tdata;
output m_axis_dout_tvalid;
output [15:0]m_axis_dout_tdata;
endmodule
@@ -0,0 +1,34 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:34:07 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/atan2_16b_synth_1/atan2_16b_stub.vhdl
-- Design : atan2_16b
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity atan2_16b is
Port (
aclk : in STD_LOGIC;
s_axis_cartesian_tvalid : in STD_LOGIC;
s_axis_cartesian_tdata : in STD_LOGIC_VECTOR ( 31 downto 0 );
m_axis_dout_tvalid : out STD_LOGIC;
m_axis_dout_tdata : out STD_LOGIC_VECTOR ( 15 downto 0 )
);
end atan2_16b;
architecture stub of atan2_16b 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,s_axis_cartesian_tvalid,s_axis_cartesian_tdata[31:0],m_axis_dout_tvalid,m_axis_dout_tdata[15:0]";
attribute x_core_info : string;
attribute x_core_info of stub : architecture is "cordic_v6_0_15,Vivado 2019.1.3";
begin
end;
@@ -0,0 +1,376 @@
--------------------------------------------------------------------------------
-- (c) Copyright 2011 - 2013 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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.
--------------------------------------------------------------------------------
-- Description:
-- This is an example testbench for the CORDIC IP core.
-- The testbench has been generated by Vivado to accompany the IP core
-- instance you have generated.
--
-- This testbench is for demonstration purposes only. See note below for
-- instructions on how to use it with your core.
--
-- See the CORDIC product guide for further information
-- about this core.
--
--------------------------------------------------------------------------------
-- Using this testbench
--
-- This testbench instantiates your generated CORDIC core
-- instance named "atan2_16b".
--
-- Use Vivado's Run Simulation flow to run this testbench. See the Vivado
-- documentation for details.
--------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;
entity tb_atan2_16b is
end tb_atan2_16b;
architecture tb of tb_atan2_16b is
-----------------------------------------------------------------------
-- Timing constants
-----------------------------------------------------------------------
constant CLOCK_PERIOD : time := 100 ns;
constant T_HOLD : time := 10 ns;
constant T_STROBE : time := CLOCK_PERIOD - (1 ns);
constant TEST_CYCLES : integer := 3000;
constant PHASE_CYCLES : integer := 1000;
-----------------------------------------------------------------------
-- DUT input signals
-----------------------------------------------------------------------
-- General inputs
signal aclk : std_logic := '0'; -- the master clock
-- Slave channel CARTESIAN inputs
signal s_axis_cartesian_tvalid : std_logic := '0'; -- TVALID for channel S_AXIS_CARTESIAN
signal s_axis_cartesian_tdata : std_logic_vector(31 downto 0) := (others => 'X'); -- TDATA for channel S_AXIS_CARTESIAN
-- Slave channel PHASE inputs
signal s_axis_phase_tvalid : std_logic := '0'; -- TVALID for channel S_AXIS_PHASE
signal s_axis_phase_tdata : std_logic_vector(15 downto 0) := (others => 'X'); -- TDATA for channel S_AXIS_PHASE
-----------------------------------------------------------------------
-- DUT output signals
-----------------------------------------------------------------------
-- Master channel DOUT outputs
signal m_axis_dout_tvalid : std_logic := '0'; -- TVALID for channel M_AXIS_DOUT
signal m_axis_dout_tdata : std_logic_vector(15 downto 0) := (others => '0'); -- TDATA for channel M_AXIS_DOUT
-----------------------------------------------------------------------
-- Aliases for AXI channel TDATA fields
-- These are a convenience for viewing data in a simulator waveform viewer.
-- If using ModelSim or Questa, add "-voptargs=+acc=n" to the vsim command
-- to prevent the simulator optimizing away these signals.
-----------------------------------------------------------------------
signal s_axis_cartesian_tdata_real : std_logic_vector(15 downto 0) := (others => '0');
signal s_axis_cartesian_tdata_imag : std_logic_vector(15 downto 0) := (others => '0');
signal s_axis_phase_tdata_real : std_logic_vector(15 downto 0) := (others => '0');
signal m_axis_dout_tdata_real : std_logic_vector(15 downto 0) := (others => '0');
signal m_axis_dout_tdata_imag : std_logic_vector(15 downto 0) := (others => '0');
signal m_axis_dout_tdata_phase : std_logic_vector(15 downto 0) := (others => '0');
-----------------------------------------------------------------------
-- Testbench signals
-----------------------------------------------------------------------
signal cycles : integer := 0; -- Clock cycle counter
-----------------------------------------------------------------------
-- Constants, types and functions to create input data
-- The CORDIC is fed two sinusoids exp(+/-jwt) of different frequencies and amplitudes:
-- channel CARTESIAN: exp(+jwt), frequency = clock / 30,
-- channel PHASE: exp(-jwt), frequency = clock / 32,
-----------------------------------------------------------------------
constant IP_CARTESIAN_DEPTH : integer := 30;
constant IP_CARTESIAN_WIDTH : integer := 16;
constant IP_CARTESIAN_SHIFT : integer := 3; -- bit shift for amplitude
constant IP_PHASE_DEPTH : integer := 32;
constant IP_PHASE_WIDTH : integer := 16;
constant IP_PHASE_SHIFT : integer := 0; -- no bit shift, max amplitude
type T_IP_INT_ENTRY is record
re : integer;
im : integer;
end record;
type T_IP_CARTESIAN_ENTRY is record
re : std_logic_vector(IP_CARTESIAN_WIDTH-1 downto 0);
im : std_logic_vector(IP_CARTESIAN_WIDTH-1 downto 0);
end record;
type T_IP_PHASE_ENTRY is record
re : std_logic_vector(IP_PHASE_WIDTH-1 downto 0);
end record;
type T_IP_CARTESIAN_TABLE is array (0 to IP_CARTESIAN_DEPTH-1) of T_IP_CARTESIAN_ENTRY;
type T_IP_PHASE_TABLE is array (0 to IP_PHASE_DEPTH-1) of T_IP_PHASE_ENTRY;
-- Common function to calculate sine and cosine values
function create_ip_entry(index, depth, width : integer) return T_IP_INT_ENTRY is
variable result : T_IP_INT_ENTRY;
variable theta : real;
variable limited_width : integer := width - 2;
begin
if limited_width > 30 then
limited_width := 30; --avoid integer overflow
end if;
theta := real(index) / real(depth) * 2.0 * MATH_PI;
result.re := integer(round(cos(theta) * real(2**limited_width)));
result.im := integer(round(sin(theta) * real(2**limited_width)));
return result;
end function create_ip_entry;
-- Use separate functions to calculate channel S_AXIS_CARTESIAN and S_AXIS_PHASE sinusoids as they return different types
function create_ip_cartesian_table return T_IP_CARTESIAN_TABLE is
variable result : T_IP_CARTESIAN_TABLE;
variable entry_int : T_IP_INT_ENTRY;
begin
for i in 0 to IP_CARTESIAN_DEPTH-1 loop
entry_int := create_ip_entry(i, IP_CARTESIAN_DEPTH, IP_CARTESIAN_WIDTH - IP_CARTESIAN_SHIFT);
result(i).re := std_logic_vector(to_signed(entry_int.re, IP_CARTESIAN_WIDTH));
result(i).im := std_logic_vector(to_signed(entry_int.im, IP_CARTESIAN_WIDTH));
end loop;
return result;
end function create_ip_cartesian_table;
function create_ip_phase_table return T_IP_PHASE_TABLE is
variable result : T_IP_PHASE_TABLE;
variable entry_int : T_IP_INT_ENTRY;
begin
for i in 0 to IP_PHASE_DEPTH-1 loop
entry_int := create_ip_entry(IP_PHASE_DEPTH-1-i, IP_PHASE_DEPTH, IP_PHASE_WIDTH - IP_PHASE_SHIFT); -- note rotation direction
result(i).re := std_logic_vector(to_signed(entry_int.re, IP_PHASE_WIDTH));
end loop;
return result;
end function create_ip_phase_table;
-- Call the functions to create the data
constant IP_CARTESIAN_DATA : T_IP_CARTESIAN_TABLE := create_ip_cartesian_table;
constant IP_PHASE_DATA : T_IP_PHASE_TABLE := create_ip_phase_table;
begin
-----------------------------------------------------------------------
-- Instantiate the DUT
-----------------------------------------------------------------------
dut : entity work.atan2_16b
port map (
aclk => aclk,
s_axis_cartesian_tvalid => s_axis_cartesian_tvalid,
s_axis_cartesian_tdata => s_axis_cartesian_tdata,
m_axis_dout_tvalid => m_axis_dout_tvalid,
m_axis_dout_tdata => m_axis_dout_tdata
);
-----------------------------------------------------------------------
-- Generate clock
-----------------------------------------------------------------------
clock_gen : process
begin
aclk <= '0';
wait for CLOCK_PERIOD;
loop
cycles <= cycles + 1;
aclk <= '0';
wait for CLOCK_PERIOD/2;
aclk <= '1';
wait for CLOCK_PERIOD/2;
if cycles >= TEST_CYCLES then
report "Not a real failure. Simulation finished successfully. Test completed successfully" severity failure;
wait;
end if;
end loop;
end process clock_gen;
-----------------------------------------------------------------------
-- Generate inputs
-----------------------------------------------------------------------
stimuli : process
variable ip_cartesian_index : integer := 0;
variable ip_phase_index : integer := 0;
variable cartesian_tvalid_nxt : std_logic := '0';
variable phase_tvalid_nxt : std_logic := '0';
variable phase2_cycles : integer := 1;
variable phase2_count : integer := 0;
constant PHASE2_LIMIT : integer := 30;
begin
-- Test is stopped in clock_gen process, use endless loop here
loop
-- Drive inputs T_HOLD time after rising edge of clock
wait until rising_edge(aclk);
wait for T_HOLD;
-- Drive AXI TVALID signals to demonstrate different types of operation
case cycles is -- do different types of operation at different phases of the test
when 0 to PHASE_CYCLES * 1 - 1 =>
-- Phase 1: inputs always valid, no missing input data
cartesian_tvalid_nxt := '1';
phase_tvalid_nxt := '1';
when PHASE_CYCLES * 1 to PHASE_CYCLES * 2 - 1 =>
-- Phase 2: deprive channel S_AXIS_CARTESIAN of valid transactions at an increasing rate
phase_tvalid_nxt := '1';
if phase2_count < phase2_cycles then
cartesian_tvalid_nxt := '0';
else
cartesian_tvalid_nxt := '1';
end if;
phase2_count := phase2_count + 1;
if phase2_count >= PHASE2_LIMIT then
phase2_count := 0;
phase2_cycles := phase2_cycles + 1;
end if;
when PHASE_CYCLES * 2 to PHASE_CYCLES * 3 - 1 =>
-- Phase 3: deprive channel S_AXIS_CARTESIAN of 1 out of 2 transactions, and channel S_AXIS_PHASE of 1 out of 3 transactions
if cycles mod 2 = 0 then
cartesian_tvalid_nxt := '0';
else
cartesian_tvalid_nxt := '1';
end if;
if cycles mod 3 = 0 then
phase_tvalid_nxt := '0';
else
phase_tvalid_nxt := '1';
end if;
when others =>
-- Test will stop imminently - do nothing
null;
end case;
-- Drive handshake signals with local variable values
s_axis_cartesian_tvalid <= cartesian_tvalid_nxt;
s_axis_phase_tvalid <= phase_tvalid_nxt;
-- Drive AXI slave channel CARTESIAN payload
-- Drive 'X's on payload signals when not valid
if cartesian_tvalid_nxt /= '1' then
s_axis_cartesian_tdata <= (others => 'X');
else
-- TDATA: Real and imaginary components are each 16 bits wide and byte-aligned at their LSBs
s_axis_cartesian_tdata(15 downto 0) <= IP_CARTESIAN_DATA(ip_cartesian_index).re;
s_axis_cartesian_tdata(31 downto 16) <= IP_CARTESIAN_DATA(ip_cartesian_index).im;
end if;
-- Drive AXI slave channel PHASE payload
-- Drive 'X's on payload signals when not valid
if phase_tvalid_nxt /= '1' then
s_axis_phase_tdata <= (others => 'X');
else
-- TDATA: Real component is 16 bits wide and byte-aligned at its LSBs
s_axis_phase_tdata(15 downto 0) <= IP_PHASE_DATA(ip_phase_index).re;
end if;
-- Increment input data indices
if cartesian_tvalid_nxt = '1' then
ip_cartesian_index := ip_cartesian_index + 1;
if ip_cartesian_index = IP_CARTESIAN_DEPTH then
ip_cartesian_index := 0;
end if;
end if;
if phase_tvalid_nxt = '1' then
ip_phase_index := ip_phase_index + 1;
if ip_phase_index = IP_PHASE_DEPTH then
ip_phase_index := 0;
end if;
end if;
end loop;
end process stimuli;
-----------------------------------------------------------------------
-- Check outputs
-----------------------------------------------------------------------
check_outputs : process
variable check_ok : boolean := true;
begin
-- Check outputs T_STROBE time after rising edge of clock
wait until rising_edge(aclk);
wait for T_STROBE;
-- Do not check the output payload values, as this requires the behavioral model
-- which would make this demonstration testbench unwieldy.
-- Instead, check the protocol of the DOUT channel:
-- check that the payload is valid (not X) when TVALID is high
if m_axis_dout_tvalid = '1' then
if is_x(m_axis_dout_tdata) then
report "ERROR: m_axis_dout_tdata is invalid when m_axis_dout_tvalid is high" severity error;
check_ok := false;
end if;
end if;
assert check_ok
report "ERROR: terminating test with failures." severity failure;
end process check_outputs;
-----------------------------------------------------------------------
-- Assign TDATA fields to aliases, for easy simulator waveform viewing
-----------------------------------------------------------------------
s_axis_cartesian_tdata_real <= s_axis_cartesian_tdata(15 downto 0);
s_axis_cartesian_tdata_imag <= s_axis_cartesian_tdata(31 downto 16);
m_axis_dout_tdata_phase <= m_axis_dout_tdata(15 downto 0);
end tb;
@@ -0,0 +1,186 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:cordic:6.0
-- IP Revision: 15
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY cordic_v6_0_15;
USE cordic_v6_0_15.cordic_v6_0_15;
ENTITY atan2_16b IS
PORT (
aclk : IN STD_LOGIC;
s_axis_cartesian_tvalid : IN STD_LOGIC;
s_axis_cartesian_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
m_axis_dout_tvalid : OUT STD_LOGIC;
m_axis_dout_tdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END atan2_16b;
ARCHITECTURE atan2_16b_arch OF atan2_16b IS
ATTRIBUTE DowngradeIPIdentifiedWarnings : STRING;
ATTRIBUTE DowngradeIPIdentifiedWarnings OF atan2_16b_arch: ARCHITECTURE IS "yes";
COMPONENT cordic_v6_0_15 IS
GENERIC (
C_ARCHITECTURE : INTEGER;
C_CORDIC_FUNCTION : INTEGER;
C_COARSE_ROTATE : INTEGER;
C_DATA_FORMAT : INTEGER;
C_XDEVICEFAMILY : STRING;
C_HAS_ACLKEN : INTEGER;
C_HAS_ACLK : INTEGER;
C_HAS_S_AXIS_CARTESIAN : INTEGER;
C_HAS_S_AXIS_PHASE : INTEGER;
C_HAS_ARESETN : INTEGER;
C_INPUT_WIDTH : INTEGER;
C_ITERATIONS : INTEGER;
C_OUTPUT_WIDTH : INTEGER;
C_PHASE_FORMAT : INTEGER;
C_PIPELINE_MODE : INTEGER;
C_PRECISION : INTEGER;
C_ROUND_MODE : INTEGER;
C_SCALE_COMP : INTEGER;
C_THROTTLE_SCHEME : INTEGER;
C_TLAST_RESOLUTION : INTEGER;
C_HAS_S_AXIS_PHASE_TUSER : INTEGER;
C_HAS_S_AXIS_PHASE_TLAST : INTEGER;
C_S_AXIS_PHASE_TDATA_WIDTH : INTEGER;
C_S_AXIS_PHASE_TUSER_WIDTH : INTEGER;
C_HAS_S_AXIS_CARTESIAN_TUSER : INTEGER;
C_HAS_S_AXIS_CARTESIAN_TLAST : INTEGER;
C_S_AXIS_CARTESIAN_TDATA_WIDTH : INTEGER;
C_S_AXIS_CARTESIAN_TUSER_WIDTH : INTEGER;
C_M_AXIS_DOUT_TDATA_WIDTH : INTEGER;
C_M_AXIS_DOUT_TUSER_WIDTH : INTEGER
);
PORT (
aclk : IN STD_LOGIC;
aclken : IN STD_LOGIC;
aresetn : IN STD_LOGIC;
s_axis_phase_tvalid : IN STD_LOGIC;
s_axis_phase_tready : OUT STD_LOGIC;
s_axis_phase_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_phase_tlast : IN STD_LOGIC;
s_axis_phase_tdata : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
s_axis_cartesian_tvalid : IN STD_LOGIC;
s_axis_cartesian_tready : OUT STD_LOGIC;
s_axis_cartesian_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_cartesian_tlast : IN STD_LOGIC;
s_axis_cartesian_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
m_axis_dout_tvalid : OUT STD_LOGIC;
m_axis_dout_tready : IN STD_LOGIC;
m_axis_dout_tuser : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
m_axis_dout_tlast : OUT STD_LOGIC;
m_axis_dout_tdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
);
END COMPONENT cordic_v6_0_15;
ATTRIBUTE X_INTERFACE_INFO : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER : STRING;
ATTRIBUTE X_INTERFACE_INFO OF m_axis_dout_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DOUT TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF m_axis_dout_tvalid: SIGNAL IS "XIL_INTERFACENAME M_AXIS_DOUT, TDATA_NUM_BYTES 2, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF m_axis_dout_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DOUT TVALID";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_cartesian_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_CARTESIAN TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF s_axis_cartesian_tvalid: SIGNAL IS "XIL_INTERFACENAME S_AXIS_CARTESIAN, TDATA_NUM_BYTES 4, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_cartesian_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_CARTESIAN TVALID";
ATTRIBUTE X_INTERFACE_PARAMETER OF aclk: SIGNAL IS "XIL_INTERFACENAME aclk_intf, ASSOCIATED_BUSIF M_AXIS_DOUT:S_AXIS_PHASE:S_AXIS_CARTESIAN, ASSOCIATED_RESET aresetn, ASSOCIATED_CLKEN aclken, FREQ_HZ 1000000, PHASE 0.000, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF aclk: SIGNAL IS "xilinx.com:signal:clock:1.0 aclk_intf CLK";
BEGIN
U0 : cordic_v6_0_15
GENERIC MAP (
C_ARCHITECTURE => 2,
C_CORDIC_FUNCTION => 3,
C_COARSE_ROTATE => 1,
C_DATA_FORMAT => 0,
C_XDEVICEFAMILY => "kintex7",
C_HAS_ACLKEN => 0,
C_HAS_ACLK => 1,
C_HAS_S_AXIS_CARTESIAN => 1,
C_HAS_S_AXIS_PHASE => 0,
C_HAS_ARESETN => 0,
C_INPUT_WIDTH => 16,
C_ITERATIONS => 0,
C_OUTPUT_WIDTH => 16,
C_PHASE_FORMAT => 1,
C_PIPELINE_MODE => -2,
C_PRECISION => 0,
C_ROUND_MODE => 0,
C_SCALE_COMP => 0,
C_THROTTLE_SCHEME => 3,
C_TLAST_RESOLUTION => 0,
C_HAS_S_AXIS_PHASE_TUSER => 0,
C_HAS_S_AXIS_PHASE_TLAST => 0,
C_S_AXIS_PHASE_TDATA_WIDTH => 16,
C_S_AXIS_PHASE_TUSER_WIDTH => 1,
C_HAS_S_AXIS_CARTESIAN_TUSER => 0,
C_HAS_S_AXIS_CARTESIAN_TLAST => 0,
C_S_AXIS_CARTESIAN_TDATA_WIDTH => 32,
C_S_AXIS_CARTESIAN_TUSER_WIDTH => 1,
C_M_AXIS_DOUT_TDATA_WIDTH => 16,
C_M_AXIS_DOUT_TUSER_WIDTH => 1
)
PORT MAP (
aclk => aclk,
aclken => '1',
aresetn => '1',
s_axis_phase_tvalid => '0',
s_axis_phase_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_phase_tlast => '0',
s_axis_phase_tdata => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 16)),
s_axis_cartesian_tvalid => s_axis_cartesian_tvalid,
s_axis_cartesian_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_cartesian_tlast => '0',
s_axis_cartesian_tdata => s_axis_cartesian_tdata,
m_axis_dout_tvalid => m_axis_dout_tvalid,
m_axis_dout_tready => '0',
m_axis_dout_tdata => m_axis_dout_tdata
);
END atan2_16b_arch;
@@ -0,0 +1,71 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:cmpy:6.0
// IP Revision: 17
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
cmpy_12x12 your_instance_name (
.aclk(aclk), // input wire aclk
.s_axis_a_tvalid(s_axis_a_tvalid), // input wire s_axis_a_tvalid
.s_axis_a_tdata(s_axis_a_tdata), // input wire [31 : 0] s_axis_a_tdata
.s_axis_b_tvalid(s_axis_b_tvalid), // input wire s_axis_b_tvalid
.s_axis_b_tdata(s_axis_b_tdata), // input wire [31 : 0] s_axis_b_tdata
.m_axis_dout_tvalid(m_axis_dout_tvalid), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(m_axis_dout_tdata) // output wire [63 : 0] m_axis_dout_tdata
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file cmpy_12x12.v when simulating
// the core, cmpy_12x12. When compiling the wrapper file, be sure to
// reference the Verilog simulation library.
@@ -0,0 +1,87 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:cmpy:6.0
-- IP Revision: 17
-- The following code must appear in the VHDL architecture header.
------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT cmpy_12x12
PORT (
aclk : IN STD_LOGIC;
s_axis_a_tvalid : IN STD_LOGIC;
s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
s_axis_b_tvalid : IN STD_LOGIC;
s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
m_axis_dout_tvalid : OUT STD_LOGIC;
m_axis_dout_tdata : OUT STD_LOGIC_VECTOR(63 DOWNTO 0)
);
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------
-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.
------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : cmpy_12x12
PORT MAP (
aclk => aclk,
s_axis_a_tvalid => s_axis_a_tvalid,
s_axis_a_tdata => s_axis_a_tdata,
s_axis_b_tvalid => s_axis_b_tvalid,
s_axis_b_tdata => s_axis_b_tdata,
m_axis_dout_tvalid => m_axis_dout_tvalid,
m_axis_dout_tdata => m_axis_dout_tdata
);
-- INST_TAG_END ------ End INSTANTIATION Template ---------
-- You must compile the wrapper file cmpy_12x12.vhd when simulating
-- the core, cmpy_12x12. When compiling the wrapper file, be sure to
-- reference the VHDL simulation library.
@@ -0,0 +1,27 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:47 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/cmpy_12x12_synth_1/cmpy_12x12_stub.v
// Design : cmpy_12x12
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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 = "cmpy_v6_0_17,Vivado 2019.1.3" *)
module cmpy_12x12(aclk, s_axis_a_tvalid, s_axis_a_tdata,
s_axis_b_tvalid, s_axis_b_tdata, m_axis_dout_tvalid, m_axis_dout_tdata)
/* synthesis syn_black_box black_box_pad_pin="aclk,s_axis_a_tvalid,s_axis_a_tdata[31:0],s_axis_b_tvalid,s_axis_b_tdata[31:0],m_axis_dout_tvalid,m_axis_dout_tdata[63:0]" */;
input aclk;
input s_axis_a_tvalid;
input [31:0]s_axis_a_tdata;
input s_axis_b_tvalid;
input [31:0]s_axis_b_tdata;
output m_axis_dout_tvalid;
output [63:0]m_axis_dout_tdata;
endmodule
@@ -0,0 +1,36 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:47 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/cmpy_12x12_synth_1/cmpy_12x12_stub.vhdl
-- Design : cmpy_12x12
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity cmpy_12x12 is
Port (
aclk : in STD_LOGIC;
s_axis_a_tvalid : in STD_LOGIC;
s_axis_a_tdata : in STD_LOGIC_VECTOR ( 31 downto 0 );
s_axis_b_tvalid : in STD_LOGIC;
s_axis_b_tdata : in STD_LOGIC_VECTOR ( 31 downto 0 );
m_axis_dout_tvalid : out STD_LOGIC;
m_axis_dout_tdata : out STD_LOGIC_VECTOR ( 63 downto 0 )
);
end cmpy_12x12;
architecture stub of cmpy_12x12 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,s_axis_a_tvalid,s_axis_a_tdata[31:0],s_axis_b_tvalid,s_axis_b_tdata[31:0],m_axis_dout_tvalid,m_axis_dout_tdata[63:0]";
attribute x_core_info : string;
attribute x_core_info of stub : architecture is "cmpy_v6_0_17,Vivado 2019.1.3";
begin
end;
@@ -0,0 +1,389 @@
--------------------------------------------------------------------------------
-- (c) Copyright 2011 - 2013 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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.
--------------------------------------------------------------------------------
-- Description:
-- This is an example testbench for the Complex Multiplier IP core.
-- The testbench has been generated by Vivado to accompany the IP core
-- instance you have generated.
--
-- This testbench is for demonstration purposes only. See note below for
-- instructions on how to use it with your core.
--
-- See the Complex Multiplier product guide for further information
-- about this core.
--
--------------------------------------------------------------------------------
-- Using this testbench
--
-- This testbench instantiates your generated Complex Multiplier core
-- instance named "cmpy_12x12".
--
-- Use Vivado's Run Simulation flow to run this testbench. See the Vivado
-- documentation for details.
--------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;
entity tb_cmpy_12x12 is
end tb_cmpy_12x12;
architecture tb of tb_cmpy_12x12 is
-----------------------------------------------------------------------
-- Timing constants
-----------------------------------------------------------------------
constant CLOCK_PERIOD : time := 100 ns;
constant T_HOLD : time := 10 ns;
constant T_STROBE : time := CLOCK_PERIOD - (1 ns);
constant TEST_CYCLES : integer := 3000;
constant PHASE_CYCLES : integer := 1000;
-----------------------------------------------------------------------
-- DUT input signals
-----------------------------------------------------------------------
-- General inputs
signal aclk : std_logic := '0'; -- the master clock
-- Slave channel A inputs
signal s_axis_a_tvalid : std_logic := '0'; -- TVALID for channel A
signal s_axis_a_tdata : std_logic_vector(31 downto 0) := (others => '0'); -- TDATA for channel A
-- Slave channel B inputs
signal s_axis_b_tvalid : std_logic := '0'; -- TVALID for channel B
signal s_axis_b_tdata : std_logic_vector(31 downto 0) := (others => '0'); -- TDATA for channel B
-----------------------------------------------------------------------
-- DUT output signals
-----------------------------------------------------------------------
-- Master channel DOUT outputs
signal m_axis_dout_tvalid : std_logic := '0'; -- TVALID for channel DOUT
signal m_axis_dout_tdata : std_logic_vector(63 downto 0) := (others => '0'); -- TDATA for channel DOUT
-----------------------------------------------------------------------
-- Aliases for AXI channel TDATA fields
-- These are a convenience for viewing data in a simulator waveform viewer.
-- If using ModelSim or Questa, add "-voptargs=+acc=n" to the vsim command
-- to prevent the simulator optimizing away these signals.
-----------------------------------------------------------------------
signal s_axis_a_tdata_real : std_logic_vector(11 downto 0) := (others => '0');
signal s_axis_a_tdata_imag : std_logic_vector(11 downto 0) := (others => '0');
signal s_axis_b_tdata_real : std_logic_vector(11 downto 0) := (others => '0');
signal s_axis_b_tdata_imag : std_logic_vector(11 downto 0) := (others => '0');
signal m_axis_dout_tdata_real : std_logic_vector(24 downto 0) := (others => '0');
signal m_axis_dout_tdata_imag : std_logic_vector(24 downto 0) := (others => '0');
-----------------------------------------------------------------------
-- Testbench signals
-----------------------------------------------------------------------
signal cycles : integer := 0; -- Clock cycle counter
-----------------------------------------------------------------------
-- Constants, types and functions to create input data
-- Treat the complex multiplier as a mixer that is combining two
-- sinusoids exp(+/-jwt) of different frequencies and amplitudes:
-- channel A: exp(+jwt), frequency = clock / 30, amplitude = fullscale >> 3
-- channel B: exp(-jwt), frequency = clock / 32, amplitude = fullscale
-- The output of the complex multiplier is a sinusoid with a frequency
-- equal to the difference between the input frequencies.
-----------------------------------------------------------------------
constant IP_A_DEPTH : integer := 30;
constant IP_A_WIDTH : integer := 12;
constant IP_A_SHIFT : integer := 3; -- bit shift for amplitude
constant IP_B_DEPTH : integer := 32;
constant IP_B_WIDTH : integer := 12;
constant IP_B_SHIFT : integer := 0; -- no bit shift, max amplitude
type T_IP_INT_ENTRY is record
re : integer;
im : integer;
end record;
type T_IP_A_ENTRY is record
re : std_logic_vector(IP_A_WIDTH-1 downto 0);
im : std_logic_vector(IP_A_WIDTH-1 downto 0);
end record;
type T_IP_B_ENTRY is record
re : std_logic_vector(IP_B_WIDTH-1 downto 0);
im : std_logic_vector(IP_B_WIDTH-1 downto 0);
end record;
type T_IP_A_TABLE is array (0 to IP_A_DEPTH-1) of T_IP_A_ENTRY;
type T_IP_B_TABLE is array (0 to IP_B_DEPTH-1) of T_IP_B_ENTRY;
-- Common function to calculate sine and cosine values
function create_ip_entry(index, depth, width : integer) return T_IP_INT_ENTRY is
variable result : T_IP_INT_ENTRY;
variable theta : real;
variable limited_width : integer := width - 2;
begin
if limited_width > 30 then
limited_width := 30;
end if;
theta := real(index) / real(depth) * 2.0 * MATH_PI;
result.re := integer(round(cos(theta) * real(2**limited_width-1)));
result.im := integer(round(sin(theta) * real(2**limited_width-1)));
return result;
end function create_ip_entry;
-- Use separate functions to calculate channel A and B sinusoids as they return different types
function create_ip_a_table return T_IP_A_TABLE is
variable result : T_IP_A_TABLE;
variable entry_int : T_IP_INT_ENTRY;
begin
for i in 0 to IP_A_DEPTH-1 loop
entry_int := create_ip_entry(i, IP_A_DEPTH, IP_A_WIDTH - IP_A_SHIFT);
result(i).re := std_logic_vector(to_signed(entry_int.re, IP_A_WIDTH));
result(i).im := std_logic_vector(to_signed(entry_int.im, IP_A_WIDTH));
end loop;
return result;
end function create_ip_a_table;
function create_ip_b_table return T_IP_B_TABLE is
variable result : T_IP_B_TABLE;
variable entry_int : T_IP_INT_ENTRY;
begin
for i in 0 to IP_B_DEPTH-1 loop
entry_int := create_ip_entry(IP_B_DEPTH-1-i, IP_B_DEPTH, IP_B_WIDTH - IP_B_SHIFT); -- note rotation direction
result(i).re := std_logic_vector(to_signed(entry_int.re, IP_B_WIDTH));
result(i).im := std_logic_vector(to_signed(entry_int.im, IP_B_WIDTH));
end loop;
return result;
end function create_ip_b_table;
-- Call the functions to create the data
constant IP_A_DATA : T_IP_A_TABLE := create_ip_a_table;
constant IP_B_DATA : T_IP_B_TABLE := create_ip_b_table;
begin
-----------------------------------------------------------------------
-- Instantiate the DUT
-----------------------------------------------------------------------
dut : entity work.cmpy_12x12
port map (
aclk => aclk,
s_axis_a_tvalid => s_axis_a_tvalid,
s_axis_a_tdata => s_axis_a_tdata,
s_axis_b_tvalid => s_axis_b_tvalid,
s_axis_b_tdata => s_axis_b_tdata,
m_axis_dout_tvalid => m_axis_dout_tvalid,
m_axis_dout_tdata => m_axis_dout_tdata
);
-----------------------------------------------------------------------
-- Generate clock
-----------------------------------------------------------------------
clock_gen : process
begin
aclk <= '0';
wait for CLOCK_PERIOD;
loop
cycles <= cycles + 1;
aclk <= '0';
wait for CLOCK_PERIOD/2;
aclk <= '1';
wait for CLOCK_PERIOD/2;
if cycles >= TEST_CYCLES then
report "Not a real failure. Simulation finished successfully. Test completed successfully" severity failure;
wait;
end if;
end loop;
end process clock_gen;
-----------------------------------------------------------------------
-- Generate inputs
-----------------------------------------------------------------------
stimuli : process
variable ip_a_index : integer := 0;
variable ip_b_index : integer := 0;
variable a_tvalid_nxt : std_logic := '0';
variable b_tvalid_nxt : std_logic := '0';
variable phase2_cycles : integer := 1;
variable phase2_count : integer := 0;
constant PHASE2_LIMIT : integer := 30;
begin
-- Test is stopped in clock_gen process, use endless loop here
loop
-- Drive inputs T_HOLD time after rising edge of clock
wait until rising_edge(aclk);
wait for T_HOLD;
-- Drive AXI TVALID signals to demonstrate different types of operation
case cycles is -- do different types of operation at different phases of the test
when 0 to PHASE_CYCLES * 1 - 1 =>
-- Phase 1: inputs always valid, no missing input data
a_tvalid_nxt := '1';
b_tvalid_nxt := '1';
when PHASE_CYCLES * 1 to PHASE_CYCLES * 2 - 1 =>
-- Phase 2: deprive channel A of valid transactions at an increasing rate
b_tvalid_nxt := '1';
if phase2_count < phase2_cycles then
a_tvalid_nxt := '0';
else
a_tvalid_nxt := '1';
end if;
phase2_count := phase2_count + 1;
if phase2_count >= PHASE2_LIMIT then
phase2_count := 0;
phase2_cycles := phase2_cycles + 1;
end if;
when PHASE_CYCLES * 2 to PHASE_CYCLES * 3 - 1 =>
-- Phase 3: deprive channel A of 1 out of 2 transactions, and channel B of 1 out of 3 transactions
if cycles mod 2 = 0 then
a_tvalid_nxt := '0';
else
a_tvalid_nxt := '1';
end if;
if cycles mod 3 = 0 then
b_tvalid_nxt := '0';
else
b_tvalid_nxt := '1';
end if;
when others =>
-- Test will stop imminently - do nothing
null;
end case;
-- Drive handshake signals with local variable values
s_axis_a_tvalid <= a_tvalid_nxt;
s_axis_b_tvalid <= b_tvalid_nxt;
-- Drive AXI slave channel A payload
-- Drive '0's on payload signals when not valid
if a_tvalid_nxt /= '1' then
s_axis_a_tdata <= (others => '0');
else
-- TDATA: Real and imaginary components are each 12 bits wide and byte-aligned at their LSBs
s_axis_a_tdata(11 downto 0) <= IP_A_DATA(ip_a_index).re;
s_axis_a_tdata(15 downto 12) <= (others => IP_A_DATA(ip_a_index).re(11)); -- sign-extend;
s_axis_a_tdata(27 downto 16) <= IP_A_DATA(ip_a_index).im;
s_axis_a_tdata(31 downto 28) <= (others => IP_A_DATA(ip_a_index).im(11)); -- sign-extend;
end if;
-- Drive AXI slave channel B payload
-- Drive '0's on payload signals when not valid
if b_tvalid_nxt /= '1' then
s_axis_b_tdata <= (others => '0');
else
-- TDATA: Real and imaginary components are each 12 bits wide and byte-aligned at their LSBs
s_axis_b_tdata(11 downto 0) <= IP_B_DATA(ip_b_index).re;
s_axis_b_tdata(15 downto 12) <= (others => IP_B_DATA(ip_b_index).re(11)); -- sign-extend
s_axis_b_tdata(27 downto 16) <= IP_B_DATA(ip_b_index).im;
s_axis_b_tdata(31 downto 28) <= (others => IP_B_DATA(ip_b_index).im(11)); -- sign-extend
end if;
-- Increment input data indices
if a_tvalid_nxt = '1' then
ip_a_index := ip_a_index + 1;
if ip_a_index = IP_A_DEPTH then
ip_a_index := 0;
end if;
end if;
if b_tvalid_nxt = '1' then
ip_b_index := ip_b_index + 1;
if ip_b_index = IP_B_DEPTH then
ip_b_index := 0;
end if;
end if;
end loop;
end process stimuli;
-----------------------------------------------------------------------
-- Check outputs
-----------------------------------------------------------------------
check_outputs : process
variable check_ok : boolean := true;
begin
-- Check outputs T_STROBE time after rising edge of clock
wait until rising_edge(aclk);
wait for T_STROBE;
-- Do not check the output payload values, as this requires the behavioral model
-- which would make this demonstration testbench unwieldy.
-- Instead, check the protocol of the DOUT channel:
-- check that the payload is valid (not X) when TVALID is high
if m_axis_dout_tvalid = '1' then
if is_x(m_axis_dout_tdata) then
report "ERROR: m_axis_dout_tdata is invalid when m_axis_dout_tvalid is high" severity error;
check_ok := false;
end if;
end if;
assert check_ok
report "ERROR: terminating test with failures." severity failure;
end process check_outputs;
-----------------------------------------------------------------------
-- Assign TDATA fields to aliases, for easy simulator waveform viewing
-----------------------------------------------------------------------
s_axis_a_tdata_real <= s_axis_a_tdata(11 downto 0);
s_axis_a_tdata_imag <= s_axis_a_tdata(27 downto 16);
s_axis_b_tdata_real <= s_axis_b_tdata(11 downto 0);
s_axis_b_tdata_imag <= s_axis_b_tdata(27 downto 16);
m_axis_dout_tdata_real <= m_axis_dout_tdata(24 downto 0);
m_axis_dout_tdata_imag <= m_axis_dout_tdata(56 downto 32);
end tb;
@@ -0,0 +1,202 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:cmpy:6.0
-- IP Revision: 17
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY cmpy_v6_0_17;
USE cmpy_v6_0_17.cmpy_v6_0_17;
ENTITY cmpy_12x12 IS
PORT (
aclk : IN STD_LOGIC;
s_axis_a_tvalid : IN STD_LOGIC;
s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
s_axis_b_tvalid : IN STD_LOGIC;
s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
m_axis_dout_tvalid : OUT STD_LOGIC;
m_axis_dout_tdata : OUT STD_LOGIC_VECTOR(63 DOWNTO 0)
);
END cmpy_12x12;
ARCHITECTURE cmpy_12x12_arch OF cmpy_12x12 IS
ATTRIBUTE DowngradeIPIdentifiedWarnings : STRING;
ATTRIBUTE DowngradeIPIdentifiedWarnings OF cmpy_12x12_arch: ARCHITECTURE IS "yes";
COMPONENT cmpy_v6_0_17 IS
GENERIC (
C_VERBOSITY : INTEGER;
C_XDEVICEFAMILY : STRING;
C_XDEVICE : STRING;
C_A_WIDTH : INTEGER;
C_B_WIDTH : INTEGER;
C_OUT_WIDTH : INTEGER;
C_LATENCY : INTEGER;
C_MULT_TYPE : INTEGER;
C_OPTIMIZE_GOAL : INTEGER;
HAS_NEGATE : INTEGER;
SINGLE_OUTPUT : INTEGER;
ROUND : INTEGER;
USE_DSP_CASCADES : INTEGER;
C_THROTTLE_SCHEME : INTEGER;
C_HAS_ACLKEN : INTEGER;
C_HAS_ARESETN : INTEGER;
C_HAS_S_AXIS_A_TUSER : INTEGER;
C_HAS_S_AXIS_A_TLAST : INTEGER;
C_HAS_S_AXIS_B_TUSER : INTEGER;
C_HAS_S_AXIS_B_TLAST : INTEGER;
C_HAS_S_AXIS_CTRL_TUSER : INTEGER;
C_HAS_S_AXIS_CTRL_TLAST : INTEGER;
C_TLAST_RESOLUTION : INTEGER;
C_S_AXIS_A_TDATA_WIDTH : INTEGER;
C_S_AXIS_A_TUSER_WIDTH : INTEGER;
C_S_AXIS_B_TDATA_WIDTH : INTEGER;
C_S_AXIS_B_TUSER_WIDTH : INTEGER;
C_S_AXIS_CTRL_TDATA_WIDTH : INTEGER;
C_S_AXIS_CTRL_TUSER_WIDTH : INTEGER;
C_M_AXIS_DOUT_TDATA_WIDTH : INTEGER;
C_M_AXIS_DOUT_TUSER_WIDTH : INTEGER
);
PORT (
aclk : IN STD_LOGIC;
aclken : IN STD_LOGIC;
aresetn : IN STD_LOGIC;
s_axis_a_tvalid : IN STD_LOGIC;
s_axis_a_tready : OUT STD_LOGIC;
s_axis_a_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_a_tlast : IN STD_LOGIC;
s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
s_axis_b_tvalid : IN STD_LOGIC;
s_axis_b_tready : OUT STD_LOGIC;
s_axis_b_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_b_tlast : IN STD_LOGIC;
s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
s_axis_ctrl_tvalid : IN STD_LOGIC;
s_axis_ctrl_tready : OUT STD_LOGIC;
s_axis_ctrl_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_ctrl_tlast : IN STD_LOGIC;
s_axis_ctrl_tdata : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
m_axis_dout_tvalid : OUT STD_LOGIC;
m_axis_dout_tready : IN STD_LOGIC;
m_axis_dout_tuser : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
m_axis_dout_tlast : OUT STD_LOGIC;
m_axis_dout_tdata : OUT STD_LOGIC_VECTOR(63 DOWNTO 0)
);
END COMPONENT cmpy_v6_0_17;
ATTRIBUTE X_INTERFACE_INFO : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER : STRING;
ATTRIBUTE X_INTERFACE_INFO OF m_axis_dout_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DOUT TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF m_axis_dout_tvalid: SIGNAL IS "XIL_INTERFACENAME M_AXIS_DOUT, TDATA_NUM_BYTES 8, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF m_axis_dout_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DOUT TVALID";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_b_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_B TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF s_axis_b_tvalid: SIGNAL IS "XIL_INTERFACENAME S_AXIS_B, TDATA_NUM_BYTES 4, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_b_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_B TVALID";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_a_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_A TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF s_axis_a_tvalid: SIGNAL IS "XIL_INTERFACENAME S_AXIS_A, TDATA_NUM_BYTES 4, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_a_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_A TVALID";
ATTRIBUTE X_INTERFACE_PARAMETER OF aclk: SIGNAL IS "XIL_INTERFACENAME aclk_intf, ASSOCIATED_BUSIF S_AXIS_CTRL:S_AXIS_B:S_AXIS_A:M_AXIS_DOUT, ASSOCIATED_RESET aresetn, ASSOCIATED_CLKEN aclken, FREQ_HZ 10000000, PHASE 0.000, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF aclk: SIGNAL IS "xilinx.com:signal:clock:1.0 aclk_intf CLK";
BEGIN
U0 : cmpy_v6_0_17
GENERIC MAP (
C_VERBOSITY => 0,
C_XDEVICEFAMILY => "kintex7",
C_XDEVICE => "xc7k410t",
C_A_WIDTH => 12,
C_B_WIDTH => 12,
C_OUT_WIDTH => 25,
C_LATENCY => 5,
C_MULT_TYPE => 0,
C_OPTIMIZE_GOAL => 0,
HAS_NEGATE => 0,
SINGLE_OUTPUT => 0,
ROUND => 0,
USE_DSP_CASCADES => 1,
C_THROTTLE_SCHEME => 3,
C_HAS_ACLKEN => 0,
C_HAS_ARESETN => 0,
C_HAS_S_AXIS_A_TUSER => 0,
C_HAS_S_AXIS_A_TLAST => 0,
C_HAS_S_AXIS_B_TUSER => 0,
C_HAS_S_AXIS_B_TLAST => 0,
C_HAS_S_AXIS_CTRL_TUSER => 0,
C_HAS_S_AXIS_CTRL_TLAST => 0,
C_TLAST_RESOLUTION => 0,
C_S_AXIS_A_TDATA_WIDTH => 32,
C_S_AXIS_A_TUSER_WIDTH => 1,
C_S_AXIS_B_TDATA_WIDTH => 32,
C_S_AXIS_B_TUSER_WIDTH => 1,
C_S_AXIS_CTRL_TDATA_WIDTH => 8,
C_S_AXIS_CTRL_TUSER_WIDTH => 1,
C_M_AXIS_DOUT_TDATA_WIDTH => 64,
C_M_AXIS_DOUT_TUSER_WIDTH => 1
)
PORT MAP (
aclk => aclk,
aclken => '1',
aresetn => '1',
s_axis_a_tvalid => s_axis_a_tvalid,
s_axis_a_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_a_tlast => '0',
s_axis_a_tdata => s_axis_a_tdata,
s_axis_b_tvalid => s_axis_b_tvalid,
s_axis_b_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_b_tlast => '0',
s_axis_b_tdata => s_axis_b_tdata,
s_axis_ctrl_tvalid => '0',
s_axis_ctrl_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_ctrl_tlast => '0',
s_axis_ctrl_tdata => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 8)),
m_axis_dout_tvalid => m_axis_dout_tvalid,
m_axis_dout_tready => '0',
m_axis_dout_tdata => m_axis_dout_tdata
);
END cmpy_12x12_arch;
@@ -0,0 +1,71 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:cmpy:6.0
// IP Revision: 17
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
cmpy_16x12 your_instance_name (
.aclk(aclk), // input wire aclk
.s_axis_a_tvalid(s_axis_a_tvalid), // input wire s_axis_a_tvalid
.s_axis_a_tdata(s_axis_a_tdata), // input wire [31 : 0] s_axis_a_tdata
.s_axis_b_tvalid(s_axis_b_tvalid), // input wire s_axis_b_tvalid
.s_axis_b_tdata(s_axis_b_tdata), // input wire [31 : 0] s_axis_b_tdata
.m_axis_dout_tvalid(m_axis_dout_tvalid), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata(m_axis_dout_tdata) // output wire [63 : 0] m_axis_dout_tdata
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file cmpy_16x12.v when simulating
// the core, cmpy_16x12. When compiling the wrapper file, be sure to
// reference the Verilog simulation library.
@@ -0,0 +1,87 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:cmpy:6.0
-- IP Revision: 17
-- The following code must appear in the VHDL architecture header.
------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT cmpy_16x12
PORT (
aclk : IN STD_LOGIC;
s_axis_a_tvalid : IN STD_LOGIC;
s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
s_axis_b_tvalid : IN STD_LOGIC;
s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
m_axis_dout_tvalid : OUT STD_LOGIC;
m_axis_dout_tdata : OUT STD_LOGIC_VECTOR(63 DOWNTO 0)
);
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------
-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.
------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : cmpy_16x12
PORT MAP (
aclk => aclk,
s_axis_a_tvalid => s_axis_a_tvalid,
s_axis_a_tdata => s_axis_a_tdata,
s_axis_b_tvalid => s_axis_b_tvalid,
s_axis_b_tdata => s_axis_b_tdata,
m_axis_dout_tvalid => m_axis_dout_tvalid,
m_axis_dout_tdata => m_axis_dout_tdata
);
-- INST_TAG_END ------ End INSTANTIATION Template ---------
-- You must compile the wrapper file cmpy_16x12.vhd when simulating
-- the core, cmpy_16x12. When compiling the wrapper file, be sure to
-- reference the VHDL simulation library.
@@ -0,0 +1,27 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:49 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/cmpy_16x12_synth_1/cmpy_16x12_stub.v
// Design : cmpy_16x12
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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 = "cmpy_v6_0_17,Vivado 2019.1.3" *)
module cmpy_16x12(aclk, s_axis_a_tvalid, s_axis_a_tdata,
s_axis_b_tvalid, s_axis_b_tdata, m_axis_dout_tvalid, m_axis_dout_tdata)
/* synthesis syn_black_box black_box_pad_pin="aclk,s_axis_a_tvalid,s_axis_a_tdata[31:0],s_axis_b_tvalid,s_axis_b_tdata[31:0],m_axis_dout_tvalid,m_axis_dout_tdata[63:0]" */;
input aclk;
input s_axis_a_tvalid;
input [31:0]s_axis_a_tdata;
input s_axis_b_tvalid;
input [31:0]s_axis_b_tdata;
output m_axis_dout_tvalid;
output [63:0]m_axis_dout_tdata;
endmodule
@@ -0,0 +1,36 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:49 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/cmpy_16x12_synth_1/cmpy_16x12_stub.vhdl
-- Design : cmpy_16x12
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity cmpy_16x12 is
Port (
aclk : in STD_LOGIC;
s_axis_a_tvalid : in STD_LOGIC;
s_axis_a_tdata : in STD_LOGIC_VECTOR ( 31 downto 0 );
s_axis_b_tvalid : in STD_LOGIC;
s_axis_b_tdata : in STD_LOGIC_VECTOR ( 31 downto 0 );
m_axis_dout_tvalid : out STD_LOGIC;
m_axis_dout_tdata : out STD_LOGIC_VECTOR ( 63 downto 0 )
);
end cmpy_16x12;
architecture stub of cmpy_16x12 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,s_axis_a_tvalid,s_axis_a_tdata[31:0],s_axis_b_tvalid,s_axis_b_tdata[31:0],m_axis_dout_tvalid,m_axis_dout_tdata[63:0]";
attribute x_core_info : string;
attribute x_core_info of stub : architecture is "cmpy_v6_0_17,Vivado 2019.1.3";
begin
end;
@@ -0,0 +1,387 @@
--------------------------------------------------------------------------------
-- (c) Copyright 2011 - 2013 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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.
--------------------------------------------------------------------------------
-- Description:
-- This is an example testbench for the Complex Multiplier IP core.
-- The testbench has been generated by Vivado to accompany the IP core
-- instance you have generated.
--
-- This testbench is for demonstration purposes only. See note below for
-- instructions on how to use it with your core.
--
-- See the Complex Multiplier product guide for further information
-- about this core.
--
--------------------------------------------------------------------------------
-- Using this testbench
--
-- This testbench instantiates your generated Complex Multiplier core
-- instance named "cmpy_16x12".
--
-- Use Vivado's Run Simulation flow to run this testbench. See the Vivado
-- documentation for details.
--------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;
entity tb_cmpy_16x12 is
end tb_cmpy_16x12;
architecture tb of tb_cmpy_16x12 is
-----------------------------------------------------------------------
-- Timing constants
-----------------------------------------------------------------------
constant CLOCK_PERIOD : time := 100 ns;
constant T_HOLD : time := 10 ns;
constant T_STROBE : time := CLOCK_PERIOD - (1 ns);
constant TEST_CYCLES : integer := 3000;
constant PHASE_CYCLES : integer := 1000;
-----------------------------------------------------------------------
-- DUT input signals
-----------------------------------------------------------------------
-- General inputs
signal aclk : std_logic := '0'; -- the master clock
-- Slave channel A inputs
signal s_axis_a_tvalid : std_logic := '0'; -- TVALID for channel A
signal s_axis_a_tdata : std_logic_vector(31 downto 0) := (others => '0'); -- TDATA for channel A
-- Slave channel B inputs
signal s_axis_b_tvalid : std_logic := '0'; -- TVALID for channel B
signal s_axis_b_tdata : std_logic_vector(31 downto 0) := (others => '0'); -- TDATA for channel B
-----------------------------------------------------------------------
-- DUT output signals
-----------------------------------------------------------------------
-- Master channel DOUT outputs
signal m_axis_dout_tvalid : std_logic := '0'; -- TVALID for channel DOUT
signal m_axis_dout_tdata : std_logic_vector(63 downto 0) := (others => '0'); -- TDATA for channel DOUT
-----------------------------------------------------------------------
-- Aliases for AXI channel TDATA fields
-- These are a convenience for viewing data in a simulator waveform viewer.
-- If using ModelSim or Questa, add "-voptargs=+acc=n" to the vsim command
-- to prevent the simulator optimizing away these signals.
-----------------------------------------------------------------------
signal s_axis_a_tdata_real : std_logic_vector(15 downto 0) := (others => '0');
signal s_axis_a_tdata_imag : std_logic_vector(15 downto 0) := (others => '0');
signal s_axis_b_tdata_real : std_logic_vector(11 downto 0) := (others => '0');
signal s_axis_b_tdata_imag : std_logic_vector(11 downto 0) := (others => '0');
signal m_axis_dout_tdata_real : std_logic_vector(28 downto 0) := (others => '0');
signal m_axis_dout_tdata_imag : std_logic_vector(28 downto 0) := (others => '0');
-----------------------------------------------------------------------
-- Testbench signals
-----------------------------------------------------------------------
signal cycles : integer := 0; -- Clock cycle counter
-----------------------------------------------------------------------
-- Constants, types and functions to create input data
-- Treat the complex multiplier as a mixer that is combining two
-- sinusoids exp(+/-jwt) of different frequencies and amplitudes:
-- channel A: exp(+jwt), frequency = clock / 30, amplitude = fullscale >> 3
-- channel B: exp(-jwt), frequency = clock / 32, amplitude = fullscale
-- The output of the complex multiplier is a sinusoid with a frequency
-- equal to the difference between the input frequencies.
-----------------------------------------------------------------------
constant IP_A_DEPTH : integer := 30;
constant IP_A_WIDTH : integer := 16;
constant IP_A_SHIFT : integer := 3; -- bit shift for amplitude
constant IP_B_DEPTH : integer := 32;
constant IP_B_WIDTH : integer := 12;
constant IP_B_SHIFT : integer := 0; -- no bit shift, max amplitude
type T_IP_INT_ENTRY is record
re : integer;
im : integer;
end record;
type T_IP_A_ENTRY is record
re : std_logic_vector(IP_A_WIDTH-1 downto 0);
im : std_logic_vector(IP_A_WIDTH-1 downto 0);
end record;
type T_IP_B_ENTRY is record
re : std_logic_vector(IP_B_WIDTH-1 downto 0);
im : std_logic_vector(IP_B_WIDTH-1 downto 0);
end record;
type T_IP_A_TABLE is array (0 to IP_A_DEPTH-1) of T_IP_A_ENTRY;
type T_IP_B_TABLE is array (0 to IP_B_DEPTH-1) of T_IP_B_ENTRY;
-- Common function to calculate sine and cosine values
function create_ip_entry(index, depth, width : integer) return T_IP_INT_ENTRY is
variable result : T_IP_INT_ENTRY;
variable theta : real;
variable limited_width : integer := width - 2;
begin
if limited_width > 30 then
limited_width := 30;
end if;
theta := real(index) / real(depth) * 2.0 * MATH_PI;
result.re := integer(round(cos(theta) * real(2**limited_width-1)));
result.im := integer(round(sin(theta) * real(2**limited_width-1)));
return result;
end function create_ip_entry;
-- Use separate functions to calculate channel A and B sinusoids as they return different types
function create_ip_a_table return T_IP_A_TABLE is
variable result : T_IP_A_TABLE;
variable entry_int : T_IP_INT_ENTRY;
begin
for i in 0 to IP_A_DEPTH-1 loop
entry_int := create_ip_entry(i, IP_A_DEPTH, IP_A_WIDTH - IP_A_SHIFT);
result(i).re := std_logic_vector(to_signed(entry_int.re, IP_A_WIDTH));
result(i).im := std_logic_vector(to_signed(entry_int.im, IP_A_WIDTH));
end loop;
return result;
end function create_ip_a_table;
function create_ip_b_table return T_IP_B_TABLE is
variable result : T_IP_B_TABLE;
variable entry_int : T_IP_INT_ENTRY;
begin
for i in 0 to IP_B_DEPTH-1 loop
entry_int := create_ip_entry(IP_B_DEPTH-1-i, IP_B_DEPTH, IP_B_WIDTH - IP_B_SHIFT); -- note rotation direction
result(i).re := std_logic_vector(to_signed(entry_int.re, IP_B_WIDTH));
result(i).im := std_logic_vector(to_signed(entry_int.im, IP_B_WIDTH));
end loop;
return result;
end function create_ip_b_table;
-- Call the functions to create the data
constant IP_A_DATA : T_IP_A_TABLE := create_ip_a_table;
constant IP_B_DATA : T_IP_B_TABLE := create_ip_b_table;
begin
-----------------------------------------------------------------------
-- Instantiate the DUT
-----------------------------------------------------------------------
dut : entity work.cmpy_16x12
port map (
aclk => aclk,
s_axis_a_tvalid => s_axis_a_tvalid,
s_axis_a_tdata => s_axis_a_tdata,
s_axis_b_tvalid => s_axis_b_tvalid,
s_axis_b_tdata => s_axis_b_tdata,
m_axis_dout_tvalid => m_axis_dout_tvalid,
m_axis_dout_tdata => m_axis_dout_tdata
);
-----------------------------------------------------------------------
-- Generate clock
-----------------------------------------------------------------------
clock_gen : process
begin
aclk <= '0';
wait for CLOCK_PERIOD;
loop
cycles <= cycles + 1;
aclk <= '0';
wait for CLOCK_PERIOD/2;
aclk <= '1';
wait for CLOCK_PERIOD/2;
if cycles >= TEST_CYCLES then
report "Not a real failure. Simulation finished successfully. Test completed successfully" severity failure;
wait;
end if;
end loop;
end process clock_gen;
-----------------------------------------------------------------------
-- Generate inputs
-----------------------------------------------------------------------
stimuli : process
variable ip_a_index : integer := 0;
variable ip_b_index : integer := 0;
variable a_tvalid_nxt : std_logic := '0';
variable b_tvalid_nxt : std_logic := '0';
variable phase2_cycles : integer := 1;
variable phase2_count : integer := 0;
constant PHASE2_LIMIT : integer := 30;
begin
-- Test is stopped in clock_gen process, use endless loop here
loop
-- Drive inputs T_HOLD time after rising edge of clock
wait until rising_edge(aclk);
wait for T_HOLD;
-- Drive AXI TVALID signals to demonstrate different types of operation
case cycles is -- do different types of operation at different phases of the test
when 0 to PHASE_CYCLES * 1 - 1 =>
-- Phase 1: inputs always valid, no missing input data
a_tvalid_nxt := '1';
b_tvalid_nxt := '1';
when PHASE_CYCLES * 1 to PHASE_CYCLES * 2 - 1 =>
-- Phase 2: deprive channel A of valid transactions at an increasing rate
b_tvalid_nxt := '1';
if phase2_count < phase2_cycles then
a_tvalid_nxt := '0';
else
a_tvalid_nxt := '1';
end if;
phase2_count := phase2_count + 1;
if phase2_count >= PHASE2_LIMIT then
phase2_count := 0;
phase2_cycles := phase2_cycles + 1;
end if;
when PHASE_CYCLES * 2 to PHASE_CYCLES * 3 - 1 =>
-- Phase 3: deprive channel A of 1 out of 2 transactions, and channel B of 1 out of 3 transactions
if cycles mod 2 = 0 then
a_tvalid_nxt := '0';
else
a_tvalid_nxt := '1';
end if;
if cycles mod 3 = 0 then
b_tvalid_nxt := '0';
else
b_tvalid_nxt := '1';
end if;
when others =>
-- Test will stop imminently - do nothing
null;
end case;
-- Drive handshake signals with local variable values
s_axis_a_tvalid <= a_tvalid_nxt;
s_axis_b_tvalid <= b_tvalid_nxt;
-- Drive AXI slave channel A payload
-- Drive '0's on payload signals when not valid
if a_tvalid_nxt /= '1' then
s_axis_a_tdata <= (others => '0');
else
-- TDATA: Real and imaginary components are each 16 bits wide and byte-aligned at their LSBs
s_axis_a_tdata(15 downto 0) <= IP_A_DATA(ip_a_index).re;
s_axis_a_tdata(31 downto 16) <= IP_A_DATA(ip_a_index).im;
end if;
-- Drive AXI slave channel B payload
-- Drive '0's on payload signals when not valid
if b_tvalid_nxt /= '1' then
s_axis_b_tdata <= (others => '0');
else
-- TDATA: Real and imaginary components are each 12 bits wide and byte-aligned at their LSBs
s_axis_b_tdata(11 downto 0) <= IP_B_DATA(ip_b_index).re;
s_axis_b_tdata(15 downto 12) <= (others => IP_B_DATA(ip_b_index).re(11)); -- sign-extend
s_axis_b_tdata(27 downto 16) <= IP_B_DATA(ip_b_index).im;
s_axis_b_tdata(31 downto 28) <= (others => IP_B_DATA(ip_b_index).im(11)); -- sign-extend
end if;
-- Increment input data indices
if a_tvalid_nxt = '1' then
ip_a_index := ip_a_index + 1;
if ip_a_index = IP_A_DEPTH then
ip_a_index := 0;
end if;
end if;
if b_tvalid_nxt = '1' then
ip_b_index := ip_b_index + 1;
if ip_b_index = IP_B_DEPTH then
ip_b_index := 0;
end if;
end if;
end loop;
end process stimuli;
-----------------------------------------------------------------------
-- Check outputs
-----------------------------------------------------------------------
check_outputs : process
variable check_ok : boolean := true;
begin
-- Check outputs T_STROBE time after rising edge of clock
wait until rising_edge(aclk);
wait for T_STROBE;
-- Do not check the output payload values, as this requires the behavioral model
-- which would make this demonstration testbench unwieldy.
-- Instead, check the protocol of the DOUT channel:
-- check that the payload is valid (not X) when TVALID is high
if m_axis_dout_tvalid = '1' then
if is_x(m_axis_dout_tdata) then
report "ERROR: m_axis_dout_tdata is invalid when m_axis_dout_tvalid is high" severity error;
check_ok := false;
end if;
end if;
assert check_ok
report "ERROR: terminating test with failures." severity failure;
end process check_outputs;
-----------------------------------------------------------------------
-- Assign TDATA fields to aliases, for easy simulator waveform viewing
-----------------------------------------------------------------------
s_axis_a_tdata_real <= s_axis_a_tdata(15 downto 0);
s_axis_a_tdata_imag <= s_axis_a_tdata(31 downto 16);
s_axis_b_tdata_real <= s_axis_b_tdata(11 downto 0);
s_axis_b_tdata_imag <= s_axis_b_tdata(27 downto 16);
m_axis_dout_tdata_real <= m_axis_dout_tdata(28 downto 0);
m_axis_dout_tdata_imag <= m_axis_dout_tdata(60 downto 32);
end tb;
@@ -0,0 +1,202 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:cmpy:6.0
-- IP Revision: 17
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
LIBRARY cmpy_v6_0_17;
USE cmpy_v6_0_17.cmpy_v6_0_17;
ENTITY cmpy_16x12 IS
PORT (
aclk : IN STD_LOGIC;
s_axis_a_tvalid : IN STD_LOGIC;
s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
s_axis_b_tvalid : IN STD_LOGIC;
s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
m_axis_dout_tvalid : OUT STD_LOGIC;
m_axis_dout_tdata : OUT STD_LOGIC_VECTOR(63 DOWNTO 0)
);
END cmpy_16x12;
ARCHITECTURE cmpy_16x12_arch OF cmpy_16x12 IS
ATTRIBUTE DowngradeIPIdentifiedWarnings : STRING;
ATTRIBUTE DowngradeIPIdentifiedWarnings OF cmpy_16x12_arch: ARCHITECTURE IS "yes";
COMPONENT cmpy_v6_0_17 IS
GENERIC (
C_VERBOSITY : INTEGER;
C_XDEVICEFAMILY : STRING;
C_XDEVICE : STRING;
C_A_WIDTH : INTEGER;
C_B_WIDTH : INTEGER;
C_OUT_WIDTH : INTEGER;
C_LATENCY : INTEGER;
C_MULT_TYPE : INTEGER;
C_OPTIMIZE_GOAL : INTEGER;
HAS_NEGATE : INTEGER;
SINGLE_OUTPUT : INTEGER;
ROUND : INTEGER;
USE_DSP_CASCADES : INTEGER;
C_THROTTLE_SCHEME : INTEGER;
C_HAS_ACLKEN : INTEGER;
C_HAS_ARESETN : INTEGER;
C_HAS_S_AXIS_A_TUSER : INTEGER;
C_HAS_S_AXIS_A_TLAST : INTEGER;
C_HAS_S_AXIS_B_TUSER : INTEGER;
C_HAS_S_AXIS_B_TLAST : INTEGER;
C_HAS_S_AXIS_CTRL_TUSER : INTEGER;
C_HAS_S_AXIS_CTRL_TLAST : INTEGER;
C_TLAST_RESOLUTION : INTEGER;
C_S_AXIS_A_TDATA_WIDTH : INTEGER;
C_S_AXIS_A_TUSER_WIDTH : INTEGER;
C_S_AXIS_B_TDATA_WIDTH : INTEGER;
C_S_AXIS_B_TUSER_WIDTH : INTEGER;
C_S_AXIS_CTRL_TDATA_WIDTH : INTEGER;
C_S_AXIS_CTRL_TUSER_WIDTH : INTEGER;
C_M_AXIS_DOUT_TDATA_WIDTH : INTEGER;
C_M_AXIS_DOUT_TUSER_WIDTH : INTEGER
);
PORT (
aclk : IN STD_LOGIC;
aclken : IN STD_LOGIC;
aresetn : IN STD_LOGIC;
s_axis_a_tvalid : IN STD_LOGIC;
s_axis_a_tready : OUT STD_LOGIC;
s_axis_a_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_a_tlast : IN STD_LOGIC;
s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
s_axis_b_tvalid : IN STD_LOGIC;
s_axis_b_tready : OUT STD_LOGIC;
s_axis_b_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_b_tlast : IN STD_LOGIC;
s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
s_axis_ctrl_tvalid : IN STD_LOGIC;
s_axis_ctrl_tready : OUT STD_LOGIC;
s_axis_ctrl_tuser : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
s_axis_ctrl_tlast : IN STD_LOGIC;
s_axis_ctrl_tdata : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
m_axis_dout_tvalid : OUT STD_LOGIC;
m_axis_dout_tready : IN STD_LOGIC;
m_axis_dout_tuser : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
m_axis_dout_tlast : OUT STD_LOGIC;
m_axis_dout_tdata : OUT STD_LOGIC_VECTOR(63 DOWNTO 0)
);
END COMPONENT cmpy_v6_0_17;
ATTRIBUTE X_INTERFACE_INFO : STRING;
ATTRIBUTE X_INTERFACE_PARAMETER : STRING;
ATTRIBUTE X_INTERFACE_INFO OF m_axis_dout_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DOUT TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF m_axis_dout_tvalid: SIGNAL IS "XIL_INTERFACENAME M_AXIS_DOUT, TDATA_NUM_BYTES 8, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF m_axis_dout_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 M_AXIS_DOUT TVALID";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_b_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_B TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF s_axis_b_tvalid: SIGNAL IS "XIL_INTERFACENAME S_AXIS_B, TDATA_NUM_BYTES 4, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_b_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_B TVALID";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_a_tdata: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_A TDATA";
ATTRIBUTE X_INTERFACE_PARAMETER OF s_axis_a_tvalid: SIGNAL IS "XIL_INTERFACENAME S_AXIS_A, TDATA_NUM_BYTES 4, TDEST_WIDTH 0, TID_WIDTH 0, TUSER_WIDTH 0, HAS_TREADY 0, HAS_TSTRB 0, HAS_TKEEP 0, HAS_TLAST 0, FREQ_HZ 100000000, PHASE 0.000, LAYERED_METADATA undef, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF s_axis_a_tvalid: SIGNAL IS "xilinx.com:interface:axis:1.0 S_AXIS_A TVALID";
ATTRIBUTE X_INTERFACE_PARAMETER OF aclk: SIGNAL IS "XIL_INTERFACENAME aclk_intf, ASSOCIATED_BUSIF S_AXIS_CTRL:S_AXIS_B:S_AXIS_A:M_AXIS_DOUT, ASSOCIATED_RESET aresetn, ASSOCIATED_CLKEN aclken, FREQ_HZ 10000000, PHASE 0.000, INSERT_VIP 0";
ATTRIBUTE X_INTERFACE_INFO OF aclk: SIGNAL IS "xilinx.com:signal:clock:1.0 aclk_intf CLK";
BEGIN
U0 : cmpy_v6_0_17
GENERIC MAP (
C_VERBOSITY => 0,
C_XDEVICEFAMILY => "kintex7",
C_XDEVICE => "xc7k410t",
C_A_WIDTH => 16,
C_B_WIDTH => 12,
C_OUT_WIDTH => 29,
C_LATENCY => 5,
C_MULT_TYPE => 0,
C_OPTIMIZE_GOAL => 0,
HAS_NEGATE => 0,
SINGLE_OUTPUT => 0,
ROUND => 0,
USE_DSP_CASCADES => 1,
C_THROTTLE_SCHEME => 3,
C_HAS_ACLKEN => 0,
C_HAS_ARESETN => 0,
C_HAS_S_AXIS_A_TUSER => 0,
C_HAS_S_AXIS_A_TLAST => 0,
C_HAS_S_AXIS_B_TUSER => 0,
C_HAS_S_AXIS_B_TLAST => 0,
C_HAS_S_AXIS_CTRL_TUSER => 0,
C_HAS_S_AXIS_CTRL_TLAST => 0,
C_TLAST_RESOLUTION => 0,
C_S_AXIS_A_TDATA_WIDTH => 32,
C_S_AXIS_A_TUSER_WIDTH => 1,
C_S_AXIS_B_TDATA_WIDTH => 32,
C_S_AXIS_B_TUSER_WIDTH => 1,
C_S_AXIS_CTRL_TDATA_WIDTH => 8,
C_S_AXIS_CTRL_TUSER_WIDTH => 1,
C_M_AXIS_DOUT_TDATA_WIDTH => 64,
C_M_AXIS_DOUT_TUSER_WIDTH => 1
)
PORT MAP (
aclk => aclk,
aclken => '1',
aresetn => '1',
s_axis_a_tvalid => s_axis_a_tvalid,
s_axis_a_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_a_tlast => '0',
s_axis_a_tdata => s_axis_a_tdata,
s_axis_b_tvalid => s_axis_b_tvalid,
s_axis_b_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_b_tlast => '0',
s_axis_b_tdata => s_axis_b_tdata,
s_axis_ctrl_tvalid => '0',
s_axis_ctrl_tuser => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 1)),
s_axis_ctrl_tlast => '0',
s_axis_ctrl_tdata => STD_LOGIC_VECTOR(TO_UNSIGNED(0, 8)),
m_axis_dout_tvalid => m_axis_dout_tvalid,
m_axis_dout_tready => '0',
m_axis_dout_tdata => m_axis_dout_tdata
);
END cmpy_16x12_arch;
@@ -0,0 +1,68 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:blk_mem_gen:8.4
// IP Revision: 3
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
data_1p5m your_instance_name (
.clka(clka), // input wire clka
.ena(ena), // input wire ena
.addra(addra), // input wire [10 : 0] addra
.douta(douta) // output wire [0 : 0] douta
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file data_1p5m.v when simulating
// the core, data_1p5m. When compiling the wrapper file, be sure to
// reference the Verilog simulation library.
@@ -0,0 +1,81 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:blk_mem_gen:8.4
-- IP Revision: 3
-- The following code must appear in the VHDL architecture header.
------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT data_1p5m
PORT (
clka : IN STD_LOGIC;
ena : IN STD_LOGIC;
addra : IN STD_LOGIC_VECTOR(10 DOWNTO 0);
douta : OUT STD_LOGIC_VECTOR(0 DOWNTO 0)
);
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------
-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.
------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : data_1p5m
PORT MAP (
clka => clka,
ena => ena,
addra => addra,
douta => douta
);
-- INST_TAG_END ------ End INSTANTIATION Template ---------
-- You must compile the wrapper file data_1p5m.vhd when simulating
-- the core, data_1p5m. When compiling the wrapper file, be sure to
-- reference the VHDL simulation library.
@@ -0,0 +1,734 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:34:17 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode funcsim
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/data_1p5m_synth_1/data_1p5m_sim_netlist.v
// Design : data_1p5m
// Purpose : This verilog netlist is a functional simulation representation of the design and should not be modified
// or synthesized. This netlist cannot be used for SDF annotated simulation.
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
`timescale 1 ps / 1 ps
(* CHECK_LICENSE_TYPE = "data_1p5m,blk_mem_gen_v8_4_3,{}" *) (* downgradeipidentifiedwarnings = "yes" *) (* x_core_info = "blk_mem_gen_v8_4_3,Vivado 2019.1.3" *)
(* NotValidForBitStream *)
module data_1p5m
(clka,
ena,
addra,
douta);
(* x_interface_info = "xilinx.com:interface:bram:1.0 BRAM_PORTA CLK" *) (* x_interface_parameter = "XIL_INTERFACENAME BRAM_PORTA, MEM_SIZE 8192, MEM_WIDTH 32, MEM_ECC NONE, MASTER_TYPE OTHER, READ_LATENCY 1" *) input clka;
(* x_interface_info = "xilinx.com:interface:bram:1.0 BRAM_PORTA EN" *) input ena;
(* x_interface_info = "xilinx.com:interface:bram:1.0 BRAM_PORTA ADDR" *) input [10:0]addra;
(* x_interface_info = "xilinx.com:interface:bram:1.0 BRAM_PORTA DOUT" *) output [0:0]douta;
wire [10:0]addra;
wire clka;
wire [0:0]douta;
wire ena;
wire NLW_U0_dbiterr_UNCONNECTED;
wire NLW_U0_rsta_busy_UNCONNECTED;
wire NLW_U0_rstb_busy_UNCONNECTED;
wire NLW_U0_s_axi_arready_UNCONNECTED;
wire NLW_U0_s_axi_awready_UNCONNECTED;
wire NLW_U0_s_axi_bvalid_UNCONNECTED;
wire NLW_U0_s_axi_dbiterr_UNCONNECTED;
wire NLW_U0_s_axi_rlast_UNCONNECTED;
wire NLW_U0_s_axi_rvalid_UNCONNECTED;
wire NLW_U0_s_axi_sbiterr_UNCONNECTED;
wire NLW_U0_s_axi_wready_UNCONNECTED;
wire NLW_U0_sbiterr_UNCONNECTED;
wire [0:0]NLW_U0_doutb_UNCONNECTED;
wire [10:0]NLW_U0_rdaddrecc_UNCONNECTED;
wire [3:0]NLW_U0_s_axi_bid_UNCONNECTED;
wire [1:0]NLW_U0_s_axi_bresp_UNCONNECTED;
wire [10:0]NLW_U0_s_axi_rdaddrecc_UNCONNECTED;
wire [0:0]NLW_U0_s_axi_rdata_UNCONNECTED;
wire [3:0]NLW_U0_s_axi_rid_UNCONNECTED;
wire [1:0]NLW_U0_s_axi_rresp_UNCONNECTED;
(* C_ADDRA_WIDTH = "11" *)
(* C_ADDRB_WIDTH = "11" *)
(* C_ALGORITHM = "1" *)
(* C_AXI_ID_WIDTH = "4" *)
(* C_AXI_SLAVE_TYPE = "0" *)
(* C_AXI_TYPE = "1" *)
(* C_BYTE_SIZE = "9" *)
(* C_COMMON_CLK = "0" *)
(* C_COUNT_18K_BRAM = "1" *)
(* C_COUNT_36K_BRAM = "0" *)
(* C_CTRL_ECC_ALGO = "NONE" *)
(* C_DEFAULT_DATA = "0" *)
(* C_DISABLE_WARN_BHV_COLL = "0" *)
(* C_DISABLE_WARN_BHV_RANGE = "0" *)
(* C_ELABORATION_DIR = "./" *)
(* C_ENABLE_32BIT_ADDRESS = "0" *)
(* C_EN_DEEPSLEEP_PIN = "0" *)
(* C_EN_ECC_PIPE = "0" *)
(* C_EN_RDADDRA_CHG = "0" *)
(* C_EN_RDADDRB_CHG = "0" *)
(* C_EN_SAFETY_CKT = "0" *)
(* C_EN_SHUTDOWN_PIN = "0" *)
(* C_EN_SLEEP_PIN = "0" *)
(* C_EST_POWER_SUMMARY = "Estimated Power for IP : 0.990811 mW" *)
(* C_FAMILY = "kintex7" *)
(* C_HAS_AXI_ID = "0" *)
(* C_HAS_ENA = "1" *)
(* C_HAS_ENB = "0" *)
(* C_HAS_INJECTERR = "0" *)
(* C_HAS_MEM_OUTPUT_REGS_A = "1" *)
(* C_HAS_MEM_OUTPUT_REGS_B = "0" *)
(* C_HAS_MUX_OUTPUT_REGS_A = "1" *)
(* C_HAS_MUX_OUTPUT_REGS_B = "0" *)
(* C_HAS_REGCEA = "0" *)
(* C_HAS_REGCEB = "0" *)
(* C_HAS_RSTA = "0" *)
(* C_HAS_RSTB = "0" *)
(* C_HAS_SOFTECC_INPUT_REGS_A = "0" *)
(* C_HAS_SOFTECC_OUTPUT_REGS_B = "0" *)
(* C_INITA_VAL = "0" *)
(* C_INITB_VAL = "0" *)
(* C_INIT_FILE = "data_1p5m.mem" *)
(* C_INIT_FILE_NAME = "data_1p5m.mif" *)
(* C_INTERFACE_TYPE = "0" *)
(* C_LOAD_INIT_FILE = "1" *)
(* C_MEM_TYPE = "3" *)
(* C_MUX_PIPELINE_STAGES = "0" *)
(* C_PRIM_TYPE = "1" *)
(* C_READ_DEPTH_A = "2048" *)
(* C_READ_DEPTH_B = "2048" *)
(* C_READ_LATENCY_A = "1" *)
(* C_READ_LATENCY_B = "1" *)
(* C_READ_WIDTH_A = "1" *)
(* C_READ_WIDTH_B = "1" *)
(* C_RSTRAM_A = "0" *)
(* C_RSTRAM_B = "0" *)
(* C_RST_PRIORITY_A = "CE" *)
(* C_RST_PRIORITY_B = "CE" *)
(* C_SIM_COLLISION_CHECK = "ALL" *)
(* C_USE_BRAM_BLOCK = "0" *)
(* C_USE_BYTE_WEA = "0" *)
(* C_USE_BYTE_WEB = "0" *)
(* C_USE_DEFAULT_DATA = "0" *)
(* C_USE_ECC = "0" *)
(* C_USE_SOFTECC = "0" *)
(* C_USE_URAM = "0" *)
(* C_WEA_WIDTH = "1" *)
(* C_WEB_WIDTH = "1" *)
(* C_WRITE_DEPTH_A = "2048" *)
(* C_WRITE_DEPTH_B = "2048" *)
(* C_WRITE_MODE_A = "WRITE_FIRST" *)
(* C_WRITE_MODE_B = "WRITE_FIRST" *)
(* C_WRITE_WIDTH_A = "1" *)
(* C_WRITE_WIDTH_B = "1" *)
(* C_XDEVICEFAMILY = "kintex7" *)
(* downgradeipidentifiedwarnings = "yes" *)
data_1p5m_blk_mem_gen_v8_4_3 U0
(.addra(addra),
.addrb({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.clka(clka),
.clkb(1'b0),
.dbiterr(NLW_U0_dbiterr_UNCONNECTED),
.deepsleep(1'b0),
.dina(1'b0),
.dinb(1'b0),
.douta(douta),
.doutb(NLW_U0_doutb_UNCONNECTED[0]),
.eccpipece(1'b0),
.ena(ena),
.enb(1'b0),
.injectdbiterr(1'b0),
.injectsbiterr(1'b0),
.rdaddrecc(NLW_U0_rdaddrecc_UNCONNECTED[10:0]),
.regcea(1'b0),
.regceb(1'b0),
.rsta(1'b0),
.rsta_busy(NLW_U0_rsta_busy_UNCONNECTED),
.rstb(1'b0),
.rstb_busy(NLW_U0_rstb_busy_UNCONNECTED),
.s_aclk(1'b0),
.s_aresetn(1'b0),
.s_axi_araddr({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.s_axi_arburst({1'b0,1'b0}),
.s_axi_arid({1'b0,1'b0,1'b0,1'b0}),
.s_axi_arlen({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.s_axi_arready(NLW_U0_s_axi_arready_UNCONNECTED),
.s_axi_arsize({1'b0,1'b0,1'b0}),
.s_axi_arvalid(1'b0),
.s_axi_awaddr({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.s_axi_awburst({1'b0,1'b0}),
.s_axi_awid({1'b0,1'b0,1'b0,1'b0}),
.s_axi_awlen({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.s_axi_awready(NLW_U0_s_axi_awready_UNCONNECTED),
.s_axi_awsize({1'b0,1'b0,1'b0}),
.s_axi_awvalid(1'b0),
.s_axi_bid(NLW_U0_s_axi_bid_UNCONNECTED[3:0]),
.s_axi_bready(1'b0),
.s_axi_bresp(NLW_U0_s_axi_bresp_UNCONNECTED[1:0]),
.s_axi_bvalid(NLW_U0_s_axi_bvalid_UNCONNECTED),
.s_axi_dbiterr(NLW_U0_s_axi_dbiterr_UNCONNECTED),
.s_axi_injectdbiterr(1'b0),
.s_axi_injectsbiterr(1'b0),
.s_axi_rdaddrecc(NLW_U0_s_axi_rdaddrecc_UNCONNECTED[10:0]),
.s_axi_rdata(NLW_U0_s_axi_rdata_UNCONNECTED[0]),
.s_axi_rid(NLW_U0_s_axi_rid_UNCONNECTED[3:0]),
.s_axi_rlast(NLW_U0_s_axi_rlast_UNCONNECTED),
.s_axi_rready(1'b0),
.s_axi_rresp(NLW_U0_s_axi_rresp_UNCONNECTED[1:0]),
.s_axi_rvalid(NLW_U0_s_axi_rvalid_UNCONNECTED),
.s_axi_sbiterr(NLW_U0_s_axi_sbiterr_UNCONNECTED),
.s_axi_wdata(1'b0),
.s_axi_wlast(1'b0),
.s_axi_wready(NLW_U0_s_axi_wready_UNCONNECTED),
.s_axi_wstrb(1'b0),
.s_axi_wvalid(1'b0),
.sbiterr(NLW_U0_sbiterr_UNCONNECTED),
.shutdown(1'b0),
.sleep(1'b0),
.wea(1'b0),
.web(1'b0));
endmodule
(* ORIG_REF_NAME = "blk_mem_gen_generic_cstr" *)
module data_1p5m_blk_mem_gen_generic_cstr
(douta,
clka,
ena,
addra);
output [0:0]douta;
input clka;
input ena;
input [10:0]addra;
wire [10:0]addra;
wire clka;
wire [0:0]douta;
wire ena;
wire ram_douta;
FDRE #(
.INIT(1'b0))
\mux_a_wire.mux_reg.ce_pri.douta_i_reg[0]
(.C(clka),
.CE(ena),
.D(ram_douta),
.Q(douta),
.R(1'b0));
data_1p5m_blk_mem_gen_prim_width \ramloop[0].ram.r
(.DOADO(ram_douta),
.addra(addra),
.clka(clka),
.ena(ena));
endmodule
(* ORIG_REF_NAME = "blk_mem_gen_prim_width" *)
module data_1p5m_blk_mem_gen_prim_width
(DOADO,
clka,
ena,
addra);
output [0:0]DOADO;
input clka;
input ena;
input [10:0]addra;
wire [0:0]DOADO;
wire [10:0]addra;
wire clka;
wire ena;
data_1p5m_blk_mem_gen_prim_wrapper_init \prim_init.ram
(.DOADO(DOADO),
.addra(addra),
.clka(clka),
.ena(ena));
endmodule
(* ORIG_REF_NAME = "blk_mem_gen_prim_wrapper_init" *)
module data_1p5m_blk_mem_gen_prim_wrapper_init
(DOADO,
clka,
ena,
addra);
output [0:0]DOADO;
input clka;
input ena;
input [10:0]addra;
wire \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_10 ;
wire \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_11 ;
wire \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_12 ;
wire \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_13 ;
wire \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_14 ;
wire \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_33 ;
wire \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_8 ;
wire \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_9 ;
wire [0:0]DOADO;
wire [10:0]addra;
wire clka;
wire ena;
wire [15:8]\NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOADO_UNCONNECTED ;
wire [15:0]\NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOBDO_UNCONNECTED ;
wire [1:1]\NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOPADOP_UNCONNECTED ;
wire [1:0]\NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOPBDOP_UNCONNECTED ;
(* box_type = "PRIMITIVE" *)
RAMB18E1 #(
.DOA_REG(1),
.DOB_REG(0),
.INITP_00(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_01(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_02(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_03(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_04(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_05(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_06(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INITP_07(256'h0000000000000000000000000000000000000000000000000000000000000000),
.INIT_00(256'h0101000001010101000101000001010100010100010101000101000100010001),
.INIT_01(256'h0000010001000000010100000100010100000100010101000100000100000101),
.INIT_02(256'h0001000000010001010000010101000100010100000000010100000001010001),
.INIT_03(256'h0100000101000100010000010000000101010000000001000000000101000001),
.INIT_04(256'h0001010101010000000001000100010100000001010000010001000101010000),
.INIT_05(256'h0101010100010000000101000101010101000100010000010001010000000101),
.INIT_06(256'h0101010100010100010001010001010000000001000001010100000000010101),
.INIT_07(256'h0000010100010000000101010001000000000100010000000100010001000001),
.INIT_08(256'h0101000101010101010000000000000001000000010001000001000100000100),
.INIT_09(256'h0000010000000101000100010001000000000101000001010001010100010001),
.INIT_0A(256'h0000000101000100000001000001000100000100000101010100010100000101),
.INIT_0B(256'h0100010001000000010101000101010001010000010101010101000001010100),
.INIT_0C(256'h0100010101010001000101010101000000010100010100000000000101010100),
.INIT_0D(256'h0001010001010000000000010000010100000000010100010001000001010101),
.INIT_0E(256'h0000010000010001000000000001000100000000010000000101000100000100),
.INIT_0F(256'h0000010101010100000000000000010101010001000001000100010101010101),
.INIT_10(256'h0101000100010001010100010101000101010000010101010000000001000000),
.INIT_11(256'h0101010100000000000001000000010000000100000001000001000001000001),
.INIT_12(256'h0000000101010101000001000100010100010000010000010100010101000101),
.INIT_13(256'h0100000000000000000100000100010000010000000101010101000101000100),
.INIT_14(256'h0101010101010100010001000100010001010100000100000101010101010001),
.INIT_15(256'h0100010000010101000000010001000001000100000001010001010000010000),
.INIT_16(256'h0100000001000101000101010100000100000101000101000101010000010001),
.INIT_17(256'h0100010001000100000101000000010000000000000000010000010001010000),
.INIT_18(256'h0000010100000100000101010101000000000101010101010001010100010100),
.INIT_19(256'h0100000100010001000100010000010000000100000000010001010001010100),
.INIT_1A(256'h0001010100010001000100000100000000010100010001010100010100010001),
.INIT_1B(256'h0100010000000101010000010101010100000000010001000000010000000001),
.INIT_1C(256'h0101000000010100000000010100010100000001000000000100000100010100),
.INIT_1D(256'h0101010101000101000100000100000000000001010001000101010100000001),
.INIT_1E(256'h0101010100010001010000010101000100000100000100000000000101000000),
.INIT_1F(256'h0101010000000100000001010001010001010001000001000001000001000101),
.INIT_20(256'h0101000100010000010001000101010100010000010001010101000100010001),
.INIT_21(256'h0001000001000100010000010101000001000100010101010100010100000101),
.INIT_22(256'h0101000100010101010101010001000100000100000001000000010101000100),
.INIT_23(256'h0000000000010101010100010001010100010101010001000001010100000000),
.INIT_24(256'h0100000000010000000100000100000101000100000100010001010000000001),
.INIT_25(256'h0001010100000001010000010000000001010000000100000100000101010100),
.INIT_26(256'h0001010101010000010101000001000000010001010101000000010000010100),
.INIT_27(256'h0001000000010100010101010001000100000000000000000001010000010101),
.INIT_28(256'h0101010101010001010101010100000100000100000000000001000100000000),
.INIT_29(256'h0100000100010101000001000101010001000001000000010001010001000100),
.INIT_2A(256'h0001000000010000010001000101000101000101010000000100000000000101),
.INIT_2B(256'h0100010101000000000101000101000001000101010101010100000001000101),
.INIT_2C(256'h0101010000000001000001000100010100000000000100010001000101010001),
.INIT_2D(256'h0001010000000101000100000101000000000001000100000100000000010001),
.INIT_2E(256'h0001010101010000010101010000010000000000010001000100000000000001),
.INIT_2F(256'h0000010101000100010000010000000000010101010100000001000001000000),
.INIT_30(256'h0101000100000100010000000000000101010001000100000100000101000101),
.INIT_31(256'h0000000000000001010001000100010001000000010101010001000100000001),
.INIT_32(256'h0101000100010001010101010101000100000101010100000101000101000101),
.INIT_33(256'h0000010101000101000101010001010001010101010000010101010001010101),
.INIT_34(256'h0101000000010001010100010000010100000001000000000101000001010100),
.INIT_35(256'h0001000001000100000101000001000101010001000100010101010100000000),
.INIT_36(256'h0000010100010000010101010001010101000001010101000001000001000101),
.INIT_37(256'h0001000101000101000000010101000101010100000100010101000000010001),
.INIT_38(256'h0000000001010101000000000100000101000001010001000100010100010001),
.INIT_39(256'h0000010101000001000000010000000100010001010100010001010101000101),
.INIT_3A(256'h0101010100000100000000000001000000010100010000010001000101010001),
.INIT_3B(256'h0001010100010101010100000001010101010101010000010001000100010001),
.INIT_3C(256'h0000000001010000000100000101000101000101010100000000010100010101),
.INIT_3D(256'h0001000101000000010000000100010100010101010001000000000000010001),
.INIT_3E(256'h0000000101000100000000010000010000010100010001000000010100000100),
.INIT_3F(256'h0100000000010001000100010100000101000000010100000101010100010000),
.INIT_A(18'h00000),
.INIT_B(18'h00000),
.INIT_FILE("NONE"),
.IS_CLKARDCLK_INVERTED(1'b0),
.IS_CLKBWRCLK_INVERTED(1'b0),
.IS_ENARDEN_INVERTED(1'b0),
.IS_ENBWREN_INVERTED(1'b0),
.IS_RSTRAMARSTRAM_INVERTED(1'b0),
.IS_RSTRAMB_INVERTED(1'b0),
.IS_RSTREGARSTREG_INVERTED(1'b0),
.IS_RSTREGB_INVERTED(1'b0),
.RAM_MODE("TDP"),
.RDADDR_COLLISION_HWCONFIG("PERFORMANCE"),
.READ_WIDTH_A(9),
.READ_WIDTH_B(9),
.RSTREG_PRIORITY_A("REGCE"),
.RSTREG_PRIORITY_B("REGCE"),
.SIM_COLLISION_CHECK("ALL"),
.SIM_DEVICE("7SERIES"),
.SRVAL_A(18'h00000),
.SRVAL_B(18'h00000),
.WRITE_MODE_A("WRITE_FIRST"),
.WRITE_MODE_B("WRITE_FIRST"),
.WRITE_WIDTH_A(9),
.WRITE_WIDTH_B(9))
\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram
(.ADDRARDADDR({addra,1'b0,1'b0,1'b0}),
.ADDRBWRADDR({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.CLKARDCLK(clka),
.CLKBWRCLK(clka),
.DIADI({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.DIBDI({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}),
.DIPADIP({1'b0,1'b0}),
.DIPBDIP({1'b0,1'b0}),
.DOADO({\NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOADO_UNCONNECTED [15:8],\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_8 ,\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_9 ,\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_10 ,\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_11 ,\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_12 ,\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_13 ,\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_14 ,DOADO}),
.DOBDO(\NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOBDO_UNCONNECTED [15:0]),
.DOPADOP({\NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOPADOP_UNCONNECTED [1],\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_33 }),
.DOPBDOP(\NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOPBDOP_UNCONNECTED [1:0]),
.ENARDEN(ena),
.ENBWREN(1'b0),
.REGCEAREGCE(ena),
.REGCEB(1'b0),
.RSTRAMARSTRAM(1'b0),
.RSTRAMB(1'b0),
.RSTREGARSTREG(1'b0),
.RSTREGB(1'b0),
.WEA({1'b0,1'b0}),
.WEBWE({1'b0,1'b0,1'b0,1'b0}));
endmodule
(* ORIG_REF_NAME = "blk_mem_gen_top" *)
module data_1p5m_blk_mem_gen_top
(douta,
clka,
ena,
addra);
output [0:0]douta;
input clka;
input ena;
input [10:0]addra;
wire [10:0]addra;
wire clka;
wire [0:0]douta;
wire ena;
data_1p5m_blk_mem_gen_generic_cstr \valid.cstr
(.addra(addra),
.clka(clka),
.douta(douta),
.ena(ena));
endmodule
(* C_ADDRA_WIDTH = "11" *) (* C_ADDRB_WIDTH = "11" *) (* C_ALGORITHM = "1" *)
(* C_AXI_ID_WIDTH = "4" *) (* C_AXI_SLAVE_TYPE = "0" *) (* C_AXI_TYPE = "1" *)
(* C_BYTE_SIZE = "9" *) (* C_COMMON_CLK = "0" *) (* C_COUNT_18K_BRAM = "1" *)
(* C_COUNT_36K_BRAM = "0" *) (* C_CTRL_ECC_ALGO = "NONE" *) (* C_DEFAULT_DATA = "0" *)
(* C_DISABLE_WARN_BHV_COLL = "0" *) (* C_DISABLE_WARN_BHV_RANGE = "0" *) (* C_ELABORATION_DIR = "./" *)
(* C_ENABLE_32BIT_ADDRESS = "0" *) (* C_EN_DEEPSLEEP_PIN = "0" *) (* C_EN_ECC_PIPE = "0" *)
(* C_EN_RDADDRA_CHG = "0" *) (* C_EN_RDADDRB_CHG = "0" *) (* C_EN_SAFETY_CKT = "0" *)
(* C_EN_SHUTDOWN_PIN = "0" *) (* C_EN_SLEEP_PIN = "0" *) (* C_EST_POWER_SUMMARY = "Estimated Power for IP : 0.990811 mW" *)
(* C_FAMILY = "kintex7" *) (* C_HAS_AXI_ID = "0" *) (* C_HAS_ENA = "1" *)
(* C_HAS_ENB = "0" *) (* C_HAS_INJECTERR = "0" *) (* C_HAS_MEM_OUTPUT_REGS_A = "1" *)
(* C_HAS_MEM_OUTPUT_REGS_B = "0" *) (* C_HAS_MUX_OUTPUT_REGS_A = "1" *) (* C_HAS_MUX_OUTPUT_REGS_B = "0" *)
(* C_HAS_REGCEA = "0" *) (* C_HAS_REGCEB = "0" *) (* C_HAS_RSTA = "0" *)
(* C_HAS_RSTB = "0" *) (* C_HAS_SOFTECC_INPUT_REGS_A = "0" *) (* C_HAS_SOFTECC_OUTPUT_REGS_B = "0" *)
(* C_INITA_VAL = "0" *) (* C_INITB_VAL = "0" *) (* C_INIT_FILE = "data_1p5m.mem" *)
(* C_INIT_FILE_NAME = "data_1p5m.mif" *) (* C_INTERFACE_TYPE = "0" *) (* C_LOAD_INIT_FILE = "1" *)
(* C_MEM_TYPE = "3" *) (* C_MUX_PIPELINE_STAGES = "0" *) (* C_PRIM_TYPE = "1" *)
(* C_READ_DEPTH_A = "2048" *) (* C_READ_DEPTH_B = "2048" *) (* C_READ_LATENCY_A = "1" *)
(* C_READ_LATENCY_B = "1" *) (* C_READ_WIDTH_A = "1" *) (* C_READ_WIDTH_B = "1" *)
(* C_RSTRAM_A = "0" *) (* C_RSTRAM_B = "0" *) (* C_RST_PRIORITY_A = "CE" *)
(* C_RST_PRIORITY_B = "CE" *) (* C_SIM_COLLISION_CHECK = "ALL" *) (* C_USE_BRAM_BLOCK = "0" *)
(* C_USE_BYTE_WEA = "0" *) (* C_USE_BYTE_WEB = "0" *) (* C_USE_DEFAULT_DATA = "0" *)
(* C_USE_ECC = "0" *) (* C_USE_SOFTECC = "0" *) (* C_USE_URAM = "0" *)
(* C_WEA_WIDTH = "1" *) (* C_WEB_WIDTH = "1" *) (* C_WRITE_DEPTH_A = "2048" *)
(* C_WRITE_DEPTH_B = "2048" *) (* C_WRITE_MODE_A = "WRITE_FIRST" *) (* C_WRITE_MODE_B = "WRITE_FIRST" *)
(* C_WRITE_WIDTH_A = "1" *) (* C_WRITE_WIDTH_B = "1" *) (* C_XDEVICEFAMILY = "kintex7" *)
(* ORIG_REF_NAME = "blk_mem_gen_v8_4_3" *) (* downgradeipidentifiedwarnings = "yes" *)
module data_1p5m_blk_mem_gen_v8_4_3
(clka,
rsta,
ena,
regcea,
wea,
addra,
dina,
douta,
clkb,
rstb,
enb,
regceb,
web,
addrb,
dinb,
doutb,
injectsbiterr,
injectdbiterr,
eccpipece,
sbiterr,
dbiterr,
rdaddrecc,
sleep,
deepsleep,
shutdown,
rsta_busy,
rstb_busy,
s_aclk,
s_aresetn,
s_axi_awid,
s_axi_awaddr,
s_axi_awlen,
s_axi_awsize,
s_axi_awburst,
s_axi_awvalid,
s_axi_awready,
s_axi_wdata,
s_axi_wstrb,
s_axi_wlast,
s_axi_wvalid,
s_axi_wready,
s_axi_bid,
s_axi_bresp,
s_axi_bvalid,
s_axi_bready,
s_axi_arid,
s_axi_araddr,
s_axi_arlen,
s_axi_arsize,
s_axi_arburst,
s_axi_arvalid,
s_axi_arready,
s_axi_rid,
s_axi_rdata,
s_axi_rresp,
s_axi_rlast,
s_axi_rvalid,
s_axi_rready,
s_axi_injectsbiterr,
s_axi_injectdbiterr,
s_axi_sbiterr,
s_axi_dbiterr,
s_axi_rdaddrecc);
input clka;
input rsta;
input ena;
input regcea;
input [0:0]wea;
input [10:0]addra;
input [0:0]dina;
output [0:0]douta;
input clkb;
input rstb;
input enb;
input regceb;
input [0:0]web;
input [10:0]addrb;
input [0:0]dinb;
output [0:0]doutb;
input injectsbiterr;
input injectdbiterr;
input eccpipece;
output sbiterr;
output dbiterr;
output [10:0]rdaddrecc;
input sleep;
input deepsleep;
input shutdown;
output rsta_busy;
output rstb_busy;
input s_aclk;
input s_aresetn;
input [3:0]s_axi_awid;
input [31:0]s_axi_awaddr;
input [7:0]s_axi_awlen;
input [2:0]s_axi_awsize;
input [1:0]s_axi_awburst;
input s_axi_awvalid;
output s_axi_awready;
input [0:0]s_axi_wdata;
input [0:0]s_axi_wstrb;
input s_axi_wlast;
input s_axi_wvalid;
output s_axi_wready;
output [3:0]s_axi_bid;
output [1:0]s_axi_bresp;
output s_axi_bvalid;
input s_axi_bready;
input [3:0]s_axi_arid;
input [31:0]s_axi_araddr;
input [7:0]s_axi_arlen;
input [2:0]s_axi_arsize;
input [1:0]s_axi_arburst;
input s_axi_arvalid;
output s_axi_arready;
output [3:0]s_axi_rid;
output [0:0]s_axi_rdata;
output [1:0]s_axi_rresp;
output s_axi_rlast;
output s_axi_rvalid;
input s_axi_rready;
input s_axi_injectsbiterr;
input s_axi_injectdbiterr;
output s_axi_sbiterr;
output s_axi_dbiterr;
output [10:0]s_axi_rdaddrecc;
wire \<const0> ;
wire [10:0]addra;
wire clka;
wire [0:0]douta;
wire ena;
assign dbiterr = \<const0> ;
assign doutb[0] = \<const0> ;
assign rdaddrecc[10] = \<const0> ;
assign rdaddrecc[9] = \<const0> ;
assign rdaddrecc[8] = \<const0> ;
assign rdaddrecc[7] = \<const0> ;
assign rdaddrecc[6] = \<const0> ;
assign rdaddrecc[5] = \<const0> ;
assign rdaddrecc[4] = \<const0> ;
assign rdaddrecc[3] = \<const0> ;
assign rdaddrecc[2] = \<const0> ;
assign rdaddrecc[1] = \<const0> ;
assign rdaddrecc[0] = \<const0> ;
assign rsta_busy = \<const0> ;
assign rstb_busy = \<const0> ;
assign s_axi_arready = \<const0> ;
assign s_axi_awready = \<const0> ;
assign s_axi_bid[3] = \<const0> ;
assign s_axi_bid[2] = \<const0> ;
assign s_axi_bid[1] = \<const0> ;
assign s_axi_bid[0] = \<const0> ;
assign s_axi_bresp[1] = \<const0> ;
assign s_axi_bresp[0] = \<const0> ;
assign s_axi_bvalid = \<const0> ;
assign s_axi_dbiterr = \<const0> ;
assign s_axi_rdaddrecc[10] = \<const0> ;
assign s_axi_rdaddrecc[9] = \<const0> ;
assign s_axi_rdaddrecc[8] = \<const0> ;
assign s_axi_rdaddrecc[7] = \<const0> ;
assign s_axi_rdaddrecc[6] = \<const0> ;
assign s_axi_rdaddrecc[5] = \<const0> ;
assign s_axi_rdaddrecc[4] = \<const0> ;
assign s_axi_rdaddrecc[3] = \<const0> ;
assign s_axi_rdaddrecc[2] = \<const0> ;
assign s_axi_rdaddrecc[1] = \<const0> ;
assign s_axi_rdaddrecc[0] = \<const0> ;
assign s_axi_rdata[0] = \<const0> ;
assign s_axi_rid[3] = \<const0> ;
assign s_axi_rid[2] = \<const0> ;
assign s_axi_rid[1] = \<const0> ;
assign s_axi_rid[0] = \<const0> ;
assign s_axi_rlast = \<const0> ;
assign s_axi_rresp[1] = \<const0> ;
assign s_axi_rresp[0] = \<const0> ;
assign s_axi_rvalid = \<const0> ;
assign s_axi_sbiterr = \<const0> ;
assign s_axi_wready = \<const0> ;
assign sbiterr = \<const0> ;
GND GND
(.G(\<const0> ));
data_1p5m_blk_mem_gen_v8_4_3_synth inst_blk_mem_gen
(.addra(addra),
.clka(clka),
.douta(douta),
.ena(ena));
endmodule
(* ORIG_REF_NAME = "blk_mem_gen_v8_4_3_synth" *)
module data_1p5m_blk_mem_gen_v8_4_3_synth
(douta,
clka,
ena,
addra);
output [0:0]douta;
input clka;
input ena;
input [10:0]addra;
wire [10:0]addra;
wire clka;
wire [0:0]douta;
wire ena;
data_1p5m_blk_mem_gen_top \gnbram.gnativebmg.native_blk_mem_gen
(.addra(addra),
.clka(clka),
.douta(douta),
.ena(ena));
endmodule
`ifndef GLBL
`define GLBL
`timescale 1 ps / 1 ps
module glbl ();
parameter ROC_WIDTH = 100000;
parameter TOC_WIDTH = 0;
//-------- STARTUP Globals --------------
wire GSR;
wire GTS;
wire GWE;
wire PRLD;
tri1 p_up_tmp;
tri (weak1, strong0) PLL_LOCKG = p_up_tmp;
wire PROGB_GLBL;
wire CCLKO_GLBL;
wire FCSBO_GLBL;
wire [3:0] DO_GLBL;
wire [3:0] DI_GLBL;
reg GSR_int;
reg GTS_int;
reg PRLD_int;
//-------- JTAG Globals --------------
wire JTAG_TDO_GLBL;
wire JTAG_TCK_GLBL;
wire JTAG_TDI_GLBL;
wire JTAG_TMS_GLBL;
wire JTAG_TRST_GLBL;
reg JTAG_CAPTURE_GLBL;
reg JTAG_RESET_GLBL;
reg JTAG_SHIFT_GLBL;
reg JTAG_UPDATE_GLBL;
reg JTAG_RUNTEST_GLBL;
reg JTAG_SEL1_GLBL = 0;
reg JTAG_SEL2_GLBL = 0 ;
reg JTAG_SEL3_GLBL = 0;
reg JTAG_SEL4_GLBL = 0;
reg JTAG_USER_TDO1_GLBL = 1'bz;
reg JTAG_USER_TDO2_GLBL = 1'bz;
reg JTAG_USER_TDO3_GLBL = 1'bz;
reg JTAG_USER_TDO4_GLBL = 1'bz;
assign (strong1, weak0) GSR = GSR_int;
assign (strong1, weak0) GTS = GTS_int;
assign (weak1, weak0) PRLD = PRLD_int;
initial begin
GSR_int = 1'b1;
PRLD_int = 1'b1;
#(ROC_WIDTH)
GSR_int = 1'b0;
PRLD_int = 1'b0;
end
initial begin
GTS_int = 1'b1;
#(TOC_WIDTH)
GTS_int = 1'b0;
end
endmodule
`endif
@@ -0,0 +1,849 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:34:17 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode funcsim
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/data_1p5m_synth_1/data_1p5m_sim_netlist.vhdl
-- Design : data_1p5m
-- Purpose : This VHDL netlist is a functional simulation representation of the design and should not be modified or
-- synthesized. This netlist cannot be used for SDF annotated simulation.
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity data_1p5m_blk_mem_gen_prim_wrapper_init is
port (
DOADO : out STD_LOGIC_VECTOR ( 0 to 0 );
clka : in STD_LOGIC;
ena : in STD_LOGIC;
addra : in STD_LOGIC_VECTOR ( 10 downto 0 )
);
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of data_1p5m_blk_mem_gen_prim_wrapper_init : entity is "blk_mem_gen_prim_wrapper_init";
end data_1p5m_blk_mem_gen_prim_wrapper_init;
architecture STRUCTURE of data_1p5m_blk_mem_gen_prim_wrapper_init is
signal \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_10\ : STD_LOGIC;
signal \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_11\ : STD_LOGIC;
signal \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_12\ : STD_LOGIC;
signal \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_13\ : STD_LOGIC;
signal \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_14\ : STD_LOGIC;
signal \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_33\ : STD_LOGIC;
signal \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_8\ : STD_LOGIC;
signal \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_9\ : STD_LOGIC;
signal \NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOADO_UNCONNECTED\ : STD_LOGIC_VECTOR ( 15 downto 8 );
signal \NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOBDO_UNCONNECTED\ : STD_LOGIC_VECTOR ( 15 downto 0 );
signal \NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOPADOP_UNCONNECTED\ : STD_LOGIC_VECTOR ( 1 to 1 );
signal \NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOPBDOP_UNCONNECTED\ : STD_LOGIC_VECTOR ( 1 downto 0 );
attribute box_type : string;
attribute box_type of \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram\ : label is "PRIMITIVE";
begin
\DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram\: unisim.vcomponents.RAMB18E1
generic map(
DOA_REG => 1,
DOB_REG => 0,
INITP_00 => X"0000000000000000000000000000000000000000000000000000000000000000",
INITP_01 => X"0000000000000000000000000000000000000000000000000000000000000000",
INITP_02 => X"0000000000000000000000000000000000000000000000000000000000000000",
INITP_03 => X"0000000000000000000000000000000000000000000000000000000000000000",
INITP_04 => X"0000000000000000000000000000000000000000000000000000000000000000",
INITP_05 => X"0000000000000000000000000000000000000000000000000000000000000000",
INITP_06 => X"0000000000000000000000000000000000000000000000000000000000000000",
INITP_07 => X"0000000000000000000000000000000000000000000000000000000000000000",
INIT_00 => X"0101000001010101000101000001010100010100010101000101000100010001",
INIT_01 => X"0000010001000000010100000100010100000100010101000100000100000101",
INIT_02 => X"0001000000010001010000010101000100010100000000010100000001010001",
INIT_03 => X"0100000101000100010000010000000101010000000001000000000101000001",
INIT_04 => X"0001010101010000000001000100010100000001010000010001000101010000",
INIT_05 => X"0101010100010000000101000101010101000100010000010001010000000101",
INIT_06 => X"0101010100010100010001010001010000000001000001010100000000010101",
INIT_07 => X"0000010100010000000101010001000000000100010000000100010001000001",
INIT_08 => X"0101000101010101010000000000000001000000010001000001000100000100",
INIT_09 => X"0000010000000101000100010001000000000101000001010001010100010001",
INIT_0A => X"0000000101000100000001000001000100000100000101010100010100000101",
INIT_0B => X"0100010001000000010101000101010001010000010101010101000001010100",
INIT_0C => X"0100010101010001000101010101000000010100010100000000000101010100",
INIT_0D => X"0001010001010000000000010000010100000000010100010001000001010101",
INIT_0E => X"0000010000010001000000000001000100000000010000000101000100000100",
INIT_0F => X"0000010101010100000000000000010101010001000001000100010101010101",
INIT_10 => X"0101000100010001010100010101000101010000010101010000000001000000",
INIT_11 => X"0101010100000000000001000000010000000100000001000001000001000001",
INIT_12 => X"0000000101010101000001000100010100010000010000010100010101000101",
INIT_13 => X"0100000000000000000100000100010000010000000101010101000101000100",
INIT_14 => X"0101010101010100010001000100010001010100000100000101010101010001",
INIT_15 => X"0100010000010101000000010001000001000100000001010001010000010000",
INIT_16 => X"0100000001000101000101010100000100000101000101000101010000010001",
INIT_17 => X"0100010001000100000101000000010000000000000000010000010001010000",
INIT_18 => X"0000010100000100000101010101000000000101010101010001010100010100",
INIT_19 => X"0100000100010001000100010000010000000100000000010001010001010100",
INIT_1A => X"0001010100010001000100000100000000010100010001010100010100010001",
INIT_1B => X"0100010000000101010000010101010100000000010001000000010000000001",
INIT_1C => X"0101000000010100000000010100010100000001000000000100000100010100",
INIT_1D => X"0101010101000101000100000100000000000001010001000101010100000001",
INIT_1E => X"0101010100010001010000010101000100000100000100000000000101000000",
INIT_1F => X"0101010000000100000001010001010001010001000001000001000001000101",
INIT_20 => X"0101000100010000010001000101010100010000010001010101000100010001",
INIT_21 => X"0001000001000100010000010101000001000100010101010100010100000101",
INIT_22 => X"0101000100010101010101010001000100000100000001000000010101000100",
INIT_23 => X"0000000000010101010100010001010100010101010001000001010100000000",
INIT_24 => X"0100000000010000000100000100000101000100000100010001010000000001",
INIT_25 => X"0001010100000001010000010000000001010000000100000100000101010100",
INIT_26 => X"0001010101010000010101000001000000010001010101000000010000010100",
INIT_27 => X"0001000000010100010101010001000100000000000000000001010000010101",
INIT_28 => X"0101010101010001010101010100000100000100000000000001000100000000",
INIT_29 => X"0100000100010101000001000101010001000001000000010001010001000100",
INIT_2A => X"0001000000010000010001000101000101000101010000000100000000000101",
INIT_2B => X"0100010101000000000101000101000001000101010101010100000001000101",
INIT_2C => X"0101010000000001000001000100010100000000000100010001000101010001",
INIT_2D => X"0001010000000101000100000101000000000001000100000100000000010001",
INIT_2E => X"0001010101010000010101010000010000000000010001000100000000000001",
INIT_2F => X"0000010101000100010000010000000000010101010100000001000001000000",
INIT_30 => X"0101000100000100010000000000000101010001000100000100000101000101",
INIT_31 => X"0000000000000001010001000100010001000000010101010001000100000001",
INIT_32 => X"0101000100010001010101010101000100000101010100000101000101000101",
INIT_33 => X"0000010101000101000101010001010001010101010000010101010001010101",
INIT_34 => X"0101000000010001010100010000010100000001000000000101000001010100",
INIT_35 => X"0001000001000100000101000001000101010001000100010101010100000000",
INIT_36 => X"0000010100010000010101010001010101000001010101000001000001000101",
INIT_37 => X"0001000101000101000000010101000101010100000100010101000000010001",
INIT_38 => X"0000000001010101000000000100000101000001010001000100010100010001",
INIT_39 => X"0000010101000001000000010000000100010001010100010001010101000101",
INIT_3A => X"0101010100000100000000000001000000010100010000010001000101010001",
INIT_3B => X"0001010100010101010100000001010101010101010000010001000100010001",
INIT_3C => X"0000000001010000000100000101000101000101010100000000010100010101",
INIT_3D => X"0001000101000000010000000100010100010101010001000000000000010001",
INIT_3E => X"0000000101000100000000010000010000010100010001000000010100000100",
INIT_3F => X"0100000000010001000100010100000101000000010100000101010100010000",
INIT_A => X"00000",
INIT_B => X"00000",
INIT_FILE => "NONE",
IS_CLKARDCLK_INVERTED => '0',
IS_CLKBWRCLK_INVERTED => '0',
IS_ENARDEN_INVERTED => '0',
IS_ENBWREN_INVERTED => '0',
IS_RSTRAMARSTRAM_INVERTED => '0',
IS_RSTRAMB_INVERTED => '0',
IS_RSTREGARSTREG_INVERTED => '0',
IS_RSTREGB_INVERTED => '0',
RAM_MODE => "TDP",
RDADDR_COLLISION_HWCONFIG => "PERFORMANCE",
READ_WIDTH_A => 9,
READ_WIDTH_B => 9,
RSTREG_PRIORITY_A => "REGCE",
RSTREG_PRIORITY_B => "REGCE",
SIM_COLLISION_CHECK => "ALL",
SIM_DEVICE => "7SERIES",
SRVAL_A => X"00000",
SRVAL_B => X"00000",
WRITE_MODE_A => "WRITE_FIRST",
WRITE_MODE_B => "WRITE_FIRST",
WRITE_WIDTH_A => 9,
WRITE_WIDTH_B => 9
)
port map (
ADDRARDADDR(13 downto 3) => addra(10 downto 0),
ADDRARDADDR(2 downto 0) => B"000",
ADDRBWRADDR(13 downto 0) => B"00000000000000",
CLKARDCLK => clka,
CLKBWRCLK => clka,
DIADI(15 downto 0) => B"0000000000000000",
DIBDI(15 downto 0) => B"0000000000000000",
DIPADIP(1 downto 0) => B"00",
DIPBDIP(1 downto 0) => B"00",
DOADO(15 downto 8) => \NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOADO_UNCONNECTED\(15 downto 8),
DOADO(7) => \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_8\,
DOADO(6) => \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_9\,
DOADO(5) => \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_10\,
DOADO(4) => \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_11\,
DOADO(3) => \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_12\,
DOADO(2) => \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_13\,
DOADO(1) => \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_14\,
DOADO(0) => DOADO(0),
DOBDO(15 downto 0) => \NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOBDO_UNCONNECTED\(15 downto 0),
DOPADOP(1) => \NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOPADOP_UNCONNECTED\(1),
DOPADOP(0) => \DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_n_33\,
DOPBDOP(1 downto 0) => \NLW_DEVICE_7SERIES.NO_BMM_INFO.SP.SIMPLE_PRIM18.ram_DOPBDOP_UNCONNECTED\(1 downto 0),
ENARDEN => ena,
ENBWREN => '0',
REGCEAREGCE => ena,
REGCEB => '0',
RSTRAMARSTRAM => '0',
RSTRAMB => '0',
RSTREGARSTREG => '0',
RSTREGB => '0',
WEA(1 downto 0) => B"00",
WEBWE(3 downto 0) => B"0000"
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity data_1p5m_blk_mem_gen_prim_width is
port (
DOADO : out STD_LOGIC_VECTOR ( 0 to 0 );
clka : in STD_LOGIC;
ena : in STD_LOGIC;
addra : in STD_LOGIC_VECTOR ( 10 downto 0 )
);
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of data_1p5m_blk_mem_gen_prim_width : entity is "blk_mem_gen_prim_width";
end data_1p5m_blk_mem_gen_prim_width;
architecture STRUCTURE of data_1p5m_blk_mem_gen_prim_width is
begin
\prim_init.ram\: entity work.data_1p5m_blk_mem_gen_prim_wrapper_init
port map (
DOADO(0) => DOADO(0),
addra(10 downto 0) => addra(10 downto 0),
clka => clka,
ena => ena
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity data_1p5m_blk_mem_gen_generic_cstr is
port (
douta : out STD_LOGIC_VECTOR ( 0 to 0 );
clka : in STD_LOGIC;
ena : in STD_LOGIC;
addra : in STD_LOGIC_VECTOR ( 10 downto 0 )
);
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of data_1p5m_blk_mem_gen_generic_cstr : entity is "blk_mem_gen_generic_cstr";
end data_1p5m_blk_mem_gen_generic_cstr;
architecture STRUCTURE of data_1p5m_blk_mem_gen_generic_cstr is
signal ram_douta : STD_LOGIC;
begin
\mux_a_wire.mux_reg.ce_pri.douta_i_reg[0]\: unisim.vcomponents.FDRE
generic map(
INIT => '0'
)
port map (
C => clka,
CE => ena,
D => ram_douta,
Q => douta(0),
R => '0'
);
\ramloop[0].ram.r\: entity work.data_1p5m_blk_mem_gen_prim_width
port map (
DOADO(0) => ram_douta,
addra(10 downto 0) => addra(10 downto 0),
clka => clka,
ena => ena
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity data_1p5m_blk_mem_gen_top is
port (
douta : out STD_LOGIC_VECTOR ( 0 to 0 );
clka : in STD_LOGIC;
ena : in STD_LOGIC;
addra : in STD_LOGIC_VECTOR ( 10 downto 0 )
);
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of data_1p5m_blk_mem_gen_top : entity is "blk_mem_gen_top";
end data_1p5m_blk_mem_gen_top;
architecture STRUCTURE of data_1p5m_blk_mem_gen_top is
begin
\valid.cstr\: entity work.data_1p5m_blk_mem_gen_generic_cstr
port map (
addra(10 downto 0) => addra(10 downto 0),
clka => clka,
douta(0) => douta(0),
ena => ena
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity data_1p5m_blk_mem_gen_v8_4_3_synth is
port (
douta : out STD_LOGIC_VECTOR ( 0 to 0 );
clka : in STD_LOGIC;
ena : in STD_LOGIC;
addra : in STD_LOGIC_VECTOR ( 10 downto 0 )
);
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of data_1p5m_blk_mem_gen_v8_4_3_synth : entity is "blk_mem_gen_v8_4_3_synth";
end data_1p5m_blk_mem_gen_v8_4_3_synth;
architecture STRUCTURE of data_1p5m_blk_mem_gen_v8_4_3_synth is
begin
\gnbram.gnativebmg.native_blk_mem_gen\: entity work.data_1p5m_blk_mem_gen_top
port map (
addra(10 downto 0) => addra(10 downto 0),
clka => clka,
douta(0) => douta(0),
ena => ena
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity data_1p5m_blk_mem_gen_v8_4_3 is
port (
clka : in STD_LOGIC;
rsta : in STD_LOGIC;
ena : in STD_LOGIC;
regcea : in STD_LOGIC;
wea : in STD_LOGIC_VECTOR ( 0 to 0 );
addra : in STD_LOGIC_VECTOR ( 10 downto 0 );
dina : in STD_LOGIC_VECTOR ( 0 to 0 );
douta : out STD_LOGIC_VECTOR ( 0 to 0 );
clkb : in STD_LOGIC;
rstb : in STD_LOGIC;
enb : in STD_LOGIC;
regceb : in STD_LOGIC;
web : in STD_LOGIC_VECTOR ( 0 to 0 );
addrb : in STD_LOGIC_VECTOR ( 10 downto 0 );
dinb : in STD_LOGIC_VECTOR ( 0 to 0 );
doutb : out STD_LOGIC_VECTOR ( 0 to 0 );
injectsbiterr : in STD_LOGIC;
injectdbiterr : in STD_LOGIC;
eccpipece : in STD_LOGIC;
sbiterr : out STD_LOGIC;
dbiterr : out STD_LOGIC;
rdaddrecc : out STD_LOGIC_VECTOR ( 10 downto 0 );
sleep : in STD_LOGIC;
deepsleep : in STD_LOGIC;
shutdown : in STD_LOGIC;
rsta_busy : out STD_LOGIC;
rstb_busy : out STD_LOGIC;
s_aclk : in STD_LOGIC;
s_aresetn : in STD_LOGIC;
s_axi_awid : in STD_LOGIC_VECTOR ( 3 downto 0 );
s_axi_awaddr : in STD_LOGIC_VECTOR ( 31 downto 0 );
s_axi_awlen : in STD_LOGIC_VECTOR ( 7 downto 0 );
s_axi_awsize : in STD_LOGIC_VECTOR ( 2 downto 0 );
s_axi_awburst : in STD_LOGIC_VECTOR ( 1 downto 0 );
s_axi_awvalid : in STD_LOGIC;
s_axi_awready : out STD_LOGIC;
s_axi_wdata : in STD_LOGIC_VECTOR ( 0 to 0 );
s_axi_wstrb : in STD_LOGIC_VECTOR ( 0 to 0 );
s_axi_wlast : in STD_LOGIC;
s_axi_wvalid : in STD_LOGIC;
s_axi_wready : out STD_LOGIC;
s_axi_bid : out STD_LOGIC_VECTOR ( 3 downto 0 );
s_axi_bresp : out STD_LOGIC_VECTOR ( 1 downto 0 );
s_axi_bvalid : out STD_LOGIC;
s_axi_bready : in STD_LOGIC;
s_axi_arid : in STD_LOGIC_VECTOR ( 3 downto 0 );
s_axi_araddr : in STD_LOGIC_VECTOR ( 31 downto 0 );
s_axi_arlen : in STD_LOGIC_VECTOR ( 7 downto 0 );
s_axi_arsize : in STD_LOGIC_VECTOR ( 2 downto 0 );
s_axi_arburst : in STD_LOGIC_VECTOR ( 1 downto 0 );
s_axi_arvalid : in STD_LOGIC;
s_axi_arready : out STD_LOGIC;
s_axi_rid : out STD_LOGIC_VECTOR ( 3 downto 0 );
s_axi_rdata : out STD_LOGIC_VECTOR ( 0 to 0 );
s_axi_rresp : out STD_LOGIC_VECTOR ( 1 downto 0 );
s_axi_rlast : out STD_LOGIC;
s_axi_rvalid : out STD_LOGIC;
s_axi_rready : in STD_LOGIC;
s_axi_injectsbiterr : in STD_LOGIC;
s_axi_injectdbiterr : in STD_LOGIC;
s_axi_sbiterr : out STD_LOGIC;
s_axi_dbiterr : out STD_LOGIC;
s_axi_rdaddrecc : out STD_LOGIC_VECTOR ( 10 downto 0 )
);
attribute C_ADDRA_WIDTH : integer;
attribute C_ADDRA_WIDTH of data_1p5m_blk_mem_gen_v8_4_3 : entity is 11;
attribute C_ADDRB_WIDTH : integer;
attribute C_ADDRB_WIDTH of data_1p5m_blk_mem_gen_v8_4_3 : entity is 11;
attribute C_ALGORITHM : integer;
attribute C_ALGORITHM of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_AXI_ID_WIDTH : integer;
attribute C_AXI_ID_WIDTH of data_1p5m_blk_mem_gen_v8_4_3 : entity is 4;
attribute C_AXI_SLAVE_TYPE : integer;
attribute C_AXI_SLAVE_TYPE of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_AXI_TYPE : integer;
attribute C_AXI_TYPE of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_BYTE_SIZE : integer;
attribute C_BYTE_SIZE of data_1p5m_blk_mem_gen_v8_4_3 : entity is 9;
attribute C_COMMON_CLK : integer;
attribute C_COMMON_CLK of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_COUNT_18K_BRAM : string;
attribute C_COUNT_18K_BRAM of data_1p5m_blk_mem_gen_v8_4_3 : entity is "1";
attribute C_COUNT_36K_BRAM : string;
attribute C_COUNT_36K_BRAM of data_1p5m_blk_mem_gen_v8_4_3 : entity is "0";
attribute C_CTRL_ECC_ALGO : string;
attribute C_CTRL_ECC_ALGO of data_1p5m_blk_mem_gen_v8_4_3 : entity is "NONE";
attribute C_DEFAULT_DATA : string;
attribute C_DEFAULT_DATA of data_1p5m_blk_mem_gen_v8_4_3 : entity is "0";
attribute C_DISABLE_WARN_BHV_COLL : integer;
attribute C_DISABLE_WARN_BHV_COLL of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_DISABLE_WARN_BHV_RANGE : integer;
attribute C_DISABLE_WARN_BHV_RANGE of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_ELABORATION_DIR : string;
attribute C_ELABORATION_DIR of data_1p5m_blk_mem_gen_v8_4_3 : entity is "./";
attribute C_ENABLE_32BIT_ADDRESS : integer;
attribute C_ENABLE_32BIT_ADDRESS of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_EN_DEEPSLEEP_PIN : integer;
attribute C_EN_DEEPSLEEP_PIN of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_EN_ECC_PIPE : integer;
attribute C_EN_ECC_PIPE of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_EN_RDADDRA_CHG : integer;
attribute C_EN_RDADDRA_CHG of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_EN_RDADDRB_CHG : integer;
attribute C_EN_RDADDRB_CHG of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_EN_SAFETY_CKT : integer;
attribute C_EN_SAFETY_CKT of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_EN_SHUTDOWN_PIN : integer;
attribute C_EN_SHUTDOWN_PIN of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_EN_SLEEP_PIN : integer;
attribute C_EN_SLEEP_PIN of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_EST_POWER_SUMMARY : string;
attribute C_EST_POWER_SUMMARY of data_1p5m_blk_mem_gen_v8_4_3 : entity is "Estimated Power for IP : 0.990811 mW";
attribute C_FAMILY : string;
attribute C_FAMILY of data_1p5m_blk_mem_gen_v8_4_3 : entity is "kintex7";
attribute C_HAS_AXI_ID : integer;
attribute C_HAS_AXI_ID of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_ENA : integer;
attribute C_HAS_ENA of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_HAS_ENB : integer;
attribute C_HAS_ENB of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_INJECTERR : integer;
attribute C_HAS_INJECTERR of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_MEM_OUTPUT_REGS_A : integer;
attribute C_HAS_MEM_OUTPUT_REGS_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_HAS_MEM_OUTPUT_REGS_B : integer;
attribute C_HAS_MEM_OUTPUT_REGS_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_MUX_OUTPUT_REGS_A : integer;
attribute C_HAS_MUX_OUTPUT_REGS_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_HAS_MUX_OUTPUT_REGS_B : integer;
attribute C_HAS_MUX_OUTPUT_REGS_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_REGCEA : integer;
attribute C_HAS_REGCEA of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_REGCEB : integer;
attribute C_HAS_REGCEB of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_RSTA : integer;
attribute C_HAS_RSTA of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_RSTB : integer;
attribute C_HAS_RSTB of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_SOFTECC_INPUT_REGS_A : integer;
attribute C_HAS_SOFTECC_INPUT_REGS_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_HAS_SOFTECC_OUTPUT_REGS_B : integer;
attribute C_HAS_SOFTECC_OUTPUT_REGS_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_INITA_VAL : string;
attribute C_INITA_VAL of data_1p5m_blk_mem_gen_v8_4_3 : entity is "0";
attribute C_INITB_VAL : string;
attribute C_INITB_VAL of data_1p5m_blk_mem_gen_v8_4_3 : entity is "0";
attribute C_INIT_FILE : string;
attribute C_INIT_FILE of data_1p5m_blk_mem_gen_v8_4_3 : entity is "data_1p5m.mem";
attribute C_INIT_FILE_NAME : string;
attribute C_INIT_FILE_NAME of data_1p5m_blk_mem_gen_v8_4_3 : entity is "data_1p5m.mif";
attribute C_INTERFACE_TYPE : integer;
attribute C_INTERFACE_TYPE of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_LOAD_INIT_FILE : integer;
attribute C_LOAD_INIT_FILE of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_MEM_TYPE : integer;
attribute C_MEM_TYPE of data_1p5m_blk_mem_gen_v8_4_3 : entity is 3;
attribute C_MUX_PIPELINE_STAGES : integer;
attribute C_MUX_PIPELINE_STAGES of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_PRIM_TYPE : integer;
attribute C_PRIM_TYPE of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_READ_DEPTH_A : integer;
attribute C_READ_DEPTH_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is 2048;
attribute C_READ_DEPTH_B : integer;
attribute C_READ_DEPTH_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is 2048;
attribute C_READ_LATENCY_A : integer;
attribute C_READ_LATENCY_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_READ_LATENCY_B : integer;
attribute C_READ_LATENCY_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_READ_WIDTH_A : integer;
attribute C_READ_WIDTH_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_READ_WIDTH_B : integer;
attribute C_READ_WIDTH_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_RSTRAM_A : integer;
attribute C_RSTRAM_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_RSTRAM_B : integer;
attribute C_RSTRAM_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_RST_PRIORITY_A : string;
attribute C_RST_PRIORITY_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is "CE";
attribute C_RST_PRIORITY_B : string;
attribute C_RST_PRIORITY_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is "CE";
attribute C_SIM_COLLISION_CHECK : string;
attribute C_SIM_COLLISION_CHECK of data_1p5m_blk_mem_gen_v8_4_3 : entity is "ALL";
attribute C_USE_BRAM_BLOCK : integer;
attribute C_USE_BRAM_BLOCK of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_USE_BYTE_WEA : integer;
attribute C_USE_BYTE_WEA of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_USE_BYTE_WEB : integer;
attribute C_USE_BYTE_WEB of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_USE_DEFAULT_DATA : integer;
attribute C_USE_DEFAULT_DATA of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_USE_ECC : integer;
attribute C_USE_ECC of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_USE_SOFTECC : integer;
attribute C_USE_SOFTECC of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_USE_URAM : integer;
attribute C_USE_URAM of data_1p5m_blk_mem_gen_v8_4_3 : entity is 0;
attribute C_WEA_WIDTH : integer;
attribute C_WEA_WIDTH of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_WEB_WIDTH : integer;
attribute C_WEB_WIDTH of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_WRITE_DEPTH_A : integer;
attribute C_WRITE_DEPTH_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is 2048;
attribute C_WRITE_DEPTH_B : integer;
attribute C_WRITE_DEPTH_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is 2048;
attribute C_WRITE_MODE_A : string;
attribute C_WRITE_MODE_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is "WRITE_FIRST";
attribute C_WRITE_MODE_B : string;
attribute C_WRITE_MODE_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is "WRITE_FIRST";
attribute C_WRITE_WIDTH_A : integer;
attribute C_WRITE_WIDTH_A of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_WRITE_WIDTH_B : integer;
attribute C_WRITE_WIDTH_B of data_1p5m_blk_mem_gen_v8_4_3 : entity is 1;
attribute C_XDEVICEFAMILY : string;
attribute C_XDEVICEFAMILY of data_1p5m_blk_mem_gen_v8_4_3 : entity is "kintex7";
attribute ORIG_REF_NAME : string;
attribute ORIG_REF_NAME of data_1p5m_blk_mem_gen_v8_4_3 : entity is "blk_mem_gen_v8_4_3";
attribute downgradeipidentifiedwarnings : string;
attribute downgradeipidentifiedwarnings of data_1p5m_blk_mem_gen_v8_4_3 : entity is "yes";
end data_1p5m_blk_mem_gen_v8_4_3;
architecture STRUCTURE of data_1p5m_blk_mem_gen_v8_4_3 is
signal \<const0>\ : STD_LOGIC;
begin
dbiterr <= \<const0>\;
doutb(0) <= \<const0>\;
rdaddrecc(10) <= \<const0>\;
rdaddrecc(9) <= \<const0>\;
rdaddrecc(8) <= \<const0>\;
rdaddrecc(7) <= \<const0>\;
rdaddrecc(6) <= \<const0>\;
rdaddrecc(5) <= \<const0>\;
rdaddrecc(4) <= \<const0>\;
rdaddrecc(3) <= \<const0>\;
rdaddrecc(2) <= \<const0>\;
rdaddrecc(1) <= \<const0>\;
rdaddrecc(0) <= \<const0>\;
rsta_busy <= \<const0>\;
rstb_busy <= \<const0>\;
s_axi_arready <= \<const0>\;
s_axi_awready <= \<const0>\;
s_axi_bid(3) <= \<const0>\;
s_axi_bid(2) <= \<const0>\;
s_axi_bid(1) <= \<const0>\;
s_axi_bid(0) <= \<const0>\;
s_axi_bresp(1) <= \<const0>\;
s_axi_bresp(0) <= \<const0>\;
s_axi_bvalid <= \<const0>\;
s_axi_dbiterr <= \<const0>\;
s_axi_rdaddrecc(10) <= \<const0>\;
s_axi_rdaddrecc(9) <= \<const0>\;
s_axi_rdaddrecc(8) <= \<const0>\;
s_axi_rdaddrecc(7) <= \<const0>\;
s_axi_rdaddrecc(6) <= \<const0>\;
s_axi_rdaddrecc(5) <= \<const0>\;
s_axi_rdaddrecc(4) <= \<const0>\;
s_axi_rdaddrecc(3) <= \<const0>\;
s_axi_rdaddrecc(2) <= \<const0>\;
s_axi_rdaddrecc(1) <= \<const0>\;
s_axi_rdaddrecc(0) <= \<const0>\;
s_axi_rdata(0) <= \<const0>\;
s_axi_rid(3) <= \<const0>\;
s_axi_rid(2) <= \<const0>\;
s_axi_rid(1) <= \<const0>\;
s_axi_rid(0) <= \<const0>\;
s_axi_rlast <= \<const0>\;
s_axi_rresp(1) <= \<const0>\;
s_axi_rresp(0) <= \<const0>\;
s_axi_rvalid <= \<const0>\;
s_axi_sbiterr <= \<const0>\;
s_axi_wready <= \<const0>\;
sbiterr <= \<const0>\;
GND: unisim.vcomponents.GND
port map (
G => \<const0>\
);
inst_blk_mem_gen: entity work.data_1p5m_blk_mem_gen_v8_4_3_synth
port map (
addra(10 downto 0) => addra(10 downto 0),
clka => clka,
douta(0) => douta(0),
ena => ena
);
end STRUCTURE;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
library UNISIM;
use UNISIM.VCOMPONENTS.ALL;
entity data_1p5m is
port (
clka : in STD_LOGIC;
ena : in STD_LOGIC;
addra : in STD_LOGIC_VECTOR ( 10 downto 0 );
douta : out STD_LOGIC_VECTOR ( 0 to 0 )
);
attribute NotValidForBitStream : boolean;
attribute NotValidForBitStream of data_1p5m : entity is true;
attribute CHECK_LICENSE_TYPE : string;
attribute CHECK_LICENSE_TYPE of data_1p5m : entity is "data_1p5m,blk_mem_gen_v8_4_3,{}";
attribute downgradeipidentifiedwarnings : string;
attribute downgradeipidentifiedwarnings of data_1p5m : entity is "yes";
attribute x_core_info : string;
attribute x_core_info of data_1p5m : entity is "blk_mem_gen_v8_4_3,Vivado 2019.1.3";
end data_1p5m;
architecture STRUCTURE of data_1p5m is
signal NLW_U0_dbiterr_UNCONNECTED : STD_LOGIC;
signal NLW_U0_rsta_busy_UNCONNECTED : STD_LOGIC;
signal NLW_U0_rstb_busy_UNCONNECTED : STD_LOGIC;
signal NLW_U0_s_axi_arready_UNCONNECTED : STD_LOGIC;
signal NLW_U0_s_axi_awready_UNCONNECTED : STD_LOGIC;
signal NLW_U0_s_axi_bvalid_UNCONNECTED : STD_LOGIC;
signal NLW_U0_s_axi_dbiterr_UNCONNECTED : STD_LOGIC;
signal NLW_U0_s_axi_rlast_UNCONNECTED : STD_LOGIC;
signal NLW_U0_s_axi_rvalid_UNCONNECTED : STD_LOGIC;
signal NLW_U0_s_axi_sbiterr_UNCONNECTED : STD_LOGIC;
signal NLW_U0_s_axi_wready_UNCONNECTED : STD_LOGIC;
signal NLW_U0_sbiterr_UNCONNECTED : STD_LOGIC;
signal NLW_U0_doutb_UNCONNECTED : STD_LOGIC_VECTOR ( 0 to 0 );
signal NLW_U0_rdaddrecc_UNCONNECTED : STD_LOGIC_VECTOR ( 10 downto 0 );
signal NLW_U0_s_axi_bid_UNCONNECTED : STD_LOGIC_VECTOR ( 3 downto 0 );
signal NLW_U0_s_axi_bresp_UNCONNECTED : STD_LOGIC_VECTOR ( 1 downto 0 );
signal NLW_U0_s_axi_rdaddrecc_UNCONNECTED : STD_LOGIC_VECTOR ( 10 downto 0 );
signal NLW_U0_s_axi_rdata_UNCONNECTED : STD_LOGIC_VECTOR ( 0 to 0 );
signal NLW_U0_s_axi_rid_UNCONNECTED : STD_LOGIC_VECTOR ( 3 downto 0 );
signal NLW_U0_s_axi_rresp_UNCONNECTED : STD_LOGIC_VECTOR ( 1 downto 0 );
attribute C_ADDRA_WIDTH : integer;
attribute C_ADDRA_WIDTH of U0 : label is 11;
attribute C_ADDRB_WIDTH : integer;
attribute C_ADDRB_WIDTH of U0 : label is 11;
attribute C_ALGORITHM : integer;
attribute C_ALGORITHM of U0 : label is 1;
attribute C_AXI_ID_WIDTH : integer;
attribute C_AXI_ID_WIDTH of U0 : label is 4;
attribute C_AXI_SLAVE_TYPE : integer;
attribute C_AXI_SLAVE_TYPE of U0 : label is 0;
attribute C_AXI_TYPE : integer;
attribute C_AXI_TYPE of U0 : label is 1;
attribute C_BYTE_SIZE : integer;
attribute C_BYTE_SIZE of U0 : label is 9;
attribute C_COMMON_CLK : integer;
attribute C_COMMON_CLK of U0 : label is 0;
attribute C_COUNT_18K_BRAM : string;
attribute C_COUNT_18K_BRAM of U0 : label is "1";
attribute C_COUNT_36K_BRAM : string;
attribute C_COUNT_36K_BRAM of U0 : label is "0";
attribute C_CTRL_ECC_ALGO : string;
attribute C_CTRL_ECC_ALGO of U0 : label is "NONE";
attribute C_DEFAULT_DATA : string;
attribute C_DEFAULT_DATA of U0 : label is "0";
attribute C_DISABLE_WARN_BHV_COLL : integer;
attribute C_DISABLE_WARN_BHV_COLL of U0 : label is 0;
attribute C_DISABLE_WARN_BHV_RANGE : integer;
attribute C_DISABLE_WARN_BHV_RANGE of U0 : label is 0;
attribute C_ELABORATION_DIR : string;
attribute C_ELABORATION_DIR of U0 : label is "./";
attribute C_ENABLE_32BIT_ADDRESS : integer;
attribute C_ENABLE_32BIT_ADDRESS of U0 : label is 0;
attribute C_EN_DEEPSLEEP_PIN : integer;
attribute C_EN_DEEPSLEEP_PIN of U0 : label is 0;
attribute C_EN_ECC_PIPE : integer;
attribute C_EN_ECC_PIPE of U0 : label is 0;
attribute C_EN_RDADDRA_CHG : integer;
attribute C_EN_RDADDRA_CHG of U0 : label is 0;
attribute C_EN_RDADDRB_CHG : integer;
attribute C_EN_RDADDRB_CHG of U0 : label is 0;
attribute C_EN_SAFETY_CKT : integer;
attribute C_EN_SAFETY_CKT of U0 : label is 0;
attribute C_EN_SHUTDOWN_PIN : integer;
attribute C_EN_SHUTDOWN_PIN of U0 : label is 0;
attribute C_EN_SLEEP_PIN : integer;
attribute C_EN_SLEEP_PIN of U0 : label is 0;
attribute C_EST_POWER_SUMMARY : string;
attribute C_EST_POWER_SUMMARY of U0 : label is "Estimated Power for IP : 0.990811 mW";
attribute C_FAMILY : string;
attribute C_FAMILY of U0 : label is "kintex7";
attribute C_HAS_AXI_ID : integer;
attribute C_HAS_AXI_ID of U0 : label is 0;
attribute C_HAS_ENA : integer;
attribute C_HAS_ENA of U0 : label is 1;
attribute C_HAS_ENB : integer;
attribute C_HAS_ENB of U0 : label is 0;
attribute C_HAS_INJECTERR : integer;
attribute C_HAS_INJECTERR of U0 : label is 0;
attribute C_HAS_MEM_OUTPUT_REGS_A : integer;
attribute C_HAS_MEM_OUTPUT_REGS_A of U0 : label is 1;
attribute C_HAS_MEM_OUTPUT_REGS_B : integer;
attribute C_HAS_MEM_OUTPUT_REGS_B of U0 : label is 0;
attribute C_HAS_MUX_OUTPUT_REGS_A : integer;
attribute C_HAS_MUX_OUTPUT_REGS_A of U0 : label is 1;
attribute C_HAS_MUX_OUTPUT_REGS_B : integer;
attribute C_HAS_MUX_OUTPUT_REGS_B of U0 : label is 0;
attribute C_HAS_REGCEA : integer;
attribute C_HAS_REGCEA of U0 : label is 0;
attribute C_HAS_REGCEB : integer;
attribute C_HAS_REGCEB of U0 : label is 0;
attribute C_HAS_RSTA : integer;
attribute C_HAS_RSTA of U0 : label is 0;
attribute C_HAS_RSTB : integer;
attribute C_HAS_RSTB of U0 : label is 0;
attribute C_HAS_SOFTECC_INPUT_REGS_A : integer;
attribute C_HAS_SOFTECC_INPUT_REGS_A of U0 : label is 0;
attribute C_HAS_SOFTECC_OUTPUT_REGS_B : integer;
attribute C_HAS_SOFTECC_OUTPUT_REGS_B of U0 : label is 0;
attribute C_INITA_VAL : string;
attribute C_INITA_VAL of U0 : label is "0";
attribute C_INITB_VAL : string;
attribute C_INITB_VAL of U0 : label is "0";
attribute C_INIT_FILE : string;
attribute C_INIT_FILE of U0 : label is "data_1p5m.mem";
attribute C_INIT_FILE_NAME : string;
attribute C_INIT_FILE_NAME of U0 : label is "data_1p5m.mif";
attribute C_INTERFACE_TYPE : integer;
attribute C_INTERFACE_TYPE of U0 : label is 0;
attribute C_LOAD_INIT_FILE : integer;
attribute C_LOAD_INIT_FILE of U0 : label is 1;
attribute C_MEM_TYPE : integer;
attribute C_MEM_TYPE of U0 : label is 3;
attribute C_MUX_PIPELINE_STAGES : integer;
attribute C_MUX_PIPELINE_STAGES of U0 : label is 0;
attribute C_PRIM_TYPE : integer;
attribute C_PRIM_TYPE of U0 : label is 1;
attribute C_READ_DEPTH_A : integer;
attribute C_READ_DEPTH_A of U0 : label is 2048;
attribute C_READ_DEPTH_B : integer;
attribute C_READ_DEPTH_B of U0 : label is 2048;
attribute C_READ_LATENCY_A : integer;
attribute C_READ_LATENCY_A of U0 : label is 1;
attribute C_READ_LATENCY_B : integer;
attribute C_READ_LATENCY_B of U0 : label is 1;
attribute C_READ_WIDTH_A : integer;
attribute C_READ_WIDTH_A of U0 : label is 1;
attribute C_READ_WIDTH_B : integer;
attribute C_READ_WIDTH_B of U0 : label is 1;
attribute C_RSTRAM_A : integer;
attribute C_RSTRAM_A of U0 : label is 0;
attribute C_RSTRAM_B : integer;
attribute C_RSTRAM_B of U0 : label is 0;
attribute C_RST_PRIORITY_A : string;
attribute C_RST_PRIORITY_A of U0 : label is "CE";
attribute C_RST_PRIORITY_B : string;
attribute C_RST_PRIORITY_B of U0 : label is "CE";
attribute C_SIM_COLLISION_CHECK : string;
attribute C_SIM_COLLISION_CHECK of U0 : label is "ALL";
attribute C_USE_BRAM_BLOCK : integer;
attribute C_USE_BRAM_BLOCK of U0 : label is 0;
attribute C_USE_BYTE_WEA : integer;
attribute C_USE_BYTE_WEA of U0 : label is 0;
attribute C_USE_BYTE_WEB : integer;
attribute C_USE_BYTE_WEB of U0 : label is 0;
attribute C_USE_DEFAULT_DATA : integer;
attribute C_USE_DEFAULT_DATA of U0 : label is 0;
attribute C_USE_ECC : integer;
attribute C_USE_ECC of U0 : label is 0;
attribute C_USE_SOFTECC : integer;
attribute C_USE_SOFTECC of U0 : label is 0;
attribute C_USE_URAM : integer;
attribute C_USE_URAM of U0 : label is 0;
attribute C_WEA_WIDTH : integer;
attribute C_WEA_WIDTH of U0 : label is 1;
attribute C_WEB_WIDTH : integer;
attribute C_WEB_WIDTH of U0 : label is 1;
attribute C_WRITE_DEPTH_A : integer;
attribute C_WRITE_DEPTH_A of U0 : label is 2048;
attribute C_WRITE_DEPTH_B : integer;
attribute C_WRITE_DEPTH_B of U0 : label is 2048;
attribute C_WRITE_MODE_A : string;
attribute C_WRITE_MODE_A of U0 : label is "WRITE_FIRST";
attribute C_WRITE_MODE_B : string;
attribute C_WRITE_MODE_B of U0 : label is "WRITE_FIRST";
attribute C_WRITE_WIDTH_A : integer;
attribute C_WRITE_WIDTH_A of U0 : label is 1;
attribute C_WRITE_WIDTH_B : integer;
attribute C_WRITE_WIDTH_B of U0 : label is 1;
attribute C_XDEVICEFAMILY : string;
attribute C_XDEVICEFAMILY of U0 : label is "kintex7";
attribute downgradeipidentifiedwarnings of U0 : label is "yes";
attribute x_interface_info : string;
attribute x_interface_info of clka : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTA CLK";
attribute x_interface_parameter : string;
attribute x_interface_parameter of clka : signal is "XIL_INTERFACENAME BRAM_PORTA, MEM_SIZE 8192, MEM_WIDTH 32, MEM_ECC NONE, MASTER_TYPE OTHER, READ_LATENCY 1";
attribute x_interface_info of ena : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTA EN";
attribute x_interface_info of addra : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTA ADDR";
attribute x_interface_info of douta : signal is "xilinx.com:interface:bram:1.0 BRAM_PORTA DOUT";
begin
U0: entity work.data_1p5m_blk_mem_gen_v8_4_3
port map (
addra(10 downto 0) => addra(10 downto 0),
addrb(10 downto 0) => B"00000000000",
clka => clka,
clkb => '0',
dbiterr => NLW_U0_dbiterr_UNCONNECTED,
deepsleep => '0',
dina(0) => '0',
dinb(0) => '0',
douta(0) => douta(0),
doutb(0) => NLW_U0_doutb_UNCONNECTED(0),
eccpipece => '0',
ena => ena,
enb => '0',
injectdbiterr => '0',
injectsbiterr => '0',
rdaddrecc(10 downto 0) => NLW_U0_rdaddrecc_UNCONNECTED(10 downto 0),
regcea => '0',
regceb => '0',
rsta => '0',
rsta_busy => NLW_U0_rsta_busy_UNCONNECTED,
rstb => '0',
rstb_busy => NLW_U0_rstb_busy_UNCONNECTED,
s_aclk => '0',
s_aresetn => '0',
s_axi_araddr(31 downto 0) => B"00000000000000000000000000000000",
s_axi_arburst(1 downto 0) => B"00",
s_axi_arid(3 downto 0) => B"0000",
s_axi_arlen(7 downto 0) => B"00000000",
s_axi_arready => NLW_U0_s_axi_arready_UNCONNECTED,
s_axi_arsize(2 downto 0) => B"000",
s_axi_arvalid => '0',
s_axi_awaddr(31 downto 0) => B"00000000000000000000000000000000",
s_axi_awburst(1 downto 0) => B"00",
s_axi_awid(3 downto 0) => B"0000",
s_axi_awlen(7 downto 0) => B"00000000",
s_axi_awready => NLW_U0_s_axi_awready_UNCONNECTED,
s_axi_awsize(2 downto 0) => B"000",
s_axi_awvalid => '0',
s_axi_bid(3 downto 0) => NLW_U0_s_axi_bid_UNCONNECTED(3 downto 0),
s_axi_bready => '0',
s_axi_bresp(1 downto 0) => NLW_U0_s_axi_bresp_UNCONNECTED(1 downto 0),
s_axi_bvalid => NLW_U0_s_axi_bvalid_UNCONNECTED,
s_axi_dbiterr => NLW_U0_s_axi_dbiterr_UNCONNECTED,
s_axi_injectdbiterr => '0',
s_axi_injectsbiterr => '0',
s_axi_rdaddrecc(10 downto 0) => NLW_U0_s_axi_rdaddrecc_UNCONNECTED(10 downto 0),
s_axi_rdata(0) => NLW_U0_s_axi_rdata_UNCONNECTED(0),
s_axi_rid(3 downto 0) => NLW_U0_s_axi_rid_UNCONNECTED(3 downto 0),
s_axi_rlast => NLW_U0_s_axi_rlast_UNCONNECTED,
s_axi_rready => '0',
s_axi_rresp(1 downto 0) => NLW_U0_s_axi_rresp_UNCONNECTED(1 downto 0),
s_axi_rvalid => NLW_U0_s_axi_rvalid_UNCONNECTED,
s_axi_sbiterr => NLW_U0_s_axi_sbiterr_UNCONNECTED,
s_axi_wdata(0) => '0',
s_axi_wlast => '0',
s_axi_wready => NLW_U0_s_axi_wready_UNCONNECTED,
s_axi_wstrb(0) => '0',
s_axi_wvalid => '0',
sbiterr => NLW_U0_sbiterr_UNCONNECTED,
shutdown => '0',
sleep => '0',
wea(0) => '0',
web(0) => '0'
);
end STRUCTURE;
@@ -0,0 +1,23 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:34:17 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub
// D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/data_1p5m_synth_1/data_1p5m_stub.v
// Design : data_1p5m
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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 = "blk_mem_gen_v8_4_3,Vivado 2019.1.3" *)
module data_1p5m(clka, ena, addra, douta)
/* synthesis syn_black_box black_box_pad_pin="clka,ena,addra[10:0],douta[0:0]" */;
input clka;
input ena;
input [10:0]addra;
output [0:0]douta;
endmodule
@@ -0,0 +1,33 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:34:17 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub
-- D:/vivado-git/projects/datalink_814/dl814_cmos/ip/managed_ip_project/managed_ip_project.runs/data_1p5m_synth_1/data_1p5m_stub.vhdl
-- Design : data_1p5m
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity data_1p5m is
Port (
clka : in STD_LOGIC;
ena : in STD_LOGIC;
addra : in STD_LOGIC_VECTOR ( 10 downto 0 );
douta : out STD_LOGIC_VECTOR ( 0 to 0 )
);
end data_1p5m;
architecture stub of data_1p5m 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 "clka,ena,addra[10:0],douta[0:0]";
attribute x_core_info : string;
attribute x_core_info of stub : architecture is "blk_mem_gen_v8_4_3,Vivado 2019.1.3";
begin
end;
@@ -0,0 +1,214 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:blk_mem_gen:8.4
// IP Revision: 3
`timescale 1ns/1ps
(* DowngradeIPIdentifiedWarnings = "yes" *)
module data_1p5m (
clka,
ena,
addra,
douta
);
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTA CLK" *)
input wire clka;
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTA EN" *)
input wire ena;
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTA ADDR" *)
input wire [10 : 0] addra;
(* X_INTERFACE_PARAMETER = "XIL_INTERFACENAME BRAM_PORTA, MEM_SIZE 8192, MEM_WIDTH 32, MEM_ECC NONE, MASTER_TYPE OTHER, READ_LATENCY 1" *)
(* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 BRAM_PORTA DOUT" *)
output wire [0 : 0] douta;
blk_mem_gen_v8_4_3 #(
.C_FAMILY("kintex7"),
.C_XDEVICEFAMILY("kintex7"),
.C_ELABORATION_DIR("./"),
.C_INTERFACE_TYPE(0),
.C_AXI_TYPE(1),
.C_AXI_SLAVE_TYPE(0),
.C_USE_BRAM_BLOCK(0),
.C_ENABLE_32BIT_ADDRESS(0),
.C_CTRL_ECC_ALGO("NONE"),
.C_HAS_AXI_ID(0),
.C_AXI_ID_WIDTH(4),
.C_MEM_TYPE(3),
.C_BYTE_SIZE(9),
.C_ALGORITHM(1),
.C_PRIM_TYPE(1),
.C_LOAD_INIT_FILE(1),
.C_INIT_FILE_NAME("data_1p5m.mif"),
.C_INIT_FILE("data_1p5m.mem"),
.C_USE_DEFAULT_DATA(0),
.C_DEFAULT_DATA("0"),
.C_HAS_RSTA(0),
.C_RST_PRIORITY_A("CE"),
.C_RSTRAM_A(0),
.C_INITA_VAL("0"),
.C_HAS_ENA(1),
.C_HAS_REGCEA(0),
.C_USE_BYTE_WEA(0),
.C_WEA_WIDTH(1),
.C_WRITE_MODE_A("WRITE_FIRST"),
.C_WRITE_WIDTH_A(1),
.C_READ_WIDTH_A(1),
.C_WRITE_DEPTH_A(2048),
.C_READ_DEPTH_A(2048),
.C_ADDRA_WIDTH(11),
.C_HAS_RSTB(0),
.C_RST_PRIORITY_B("CE"),
.C_RSTRAM_B(0),
.C_INITB_VAL("0"),
.C_HAS_ENB(0),
.C_HAS_REGCEB(0),
.C_USE_BYTE_WEB(0),
.C_WEB_WIDTH(1),
.C_WRITE_MODE_B("WRITE_FIRST"),
.C_WRITE_WIDTH_B(1),
.C_READ_WIDTH_B(1),
.C_WRITE_DEPTH_B(2048),
.C_READ_DEPTH_B(2048),
.C_ADDRB_WIDTH(11),
.C_HAS_MEM_OUTPUT_REGS_A(1),
.C_HAS_MEM_OUTPUT_REGS_B(0),
.C_HAS_MUX_OUTPUT_REGS_A(1),
.C_HAS_MUX_OUTPUT_REGS_B(0),
.C_MUX_PIPELINE_STAGES(0),
.C_HAS_SOFTECC_INPUT_REGS_A(0),
.C_HAS_SOFTECC_OUTPUT_REGS_B(0),
.C_USE_SOFTECC(0),
.C_USE_ECC(0),
.C_EN_ECC_PIPE(0),
.C_READ_LATENCY_A(1),
.C_READ_LATENCY_B(1),
.C_HAS_INJECTERR(0),
.C_SIM_COLLISION_CHECK("ALL"),
.C_COMMON_CLK(0),
.C_DISABLE_WARN_BHV_COLL(0),
.C_EN_SLEEP_PIN(0),
.C_USE_URAM(0),
.C_EN_RDADDRA_CHG(0),
.C_EN_RDADDRB_CHG(0),
.C_EN_DEEPSLEEP_PIN(0),
.C_EN_SHUTDOWN_PIN(0),
.C_EN_SAFETY_CKT(0),
.C_DISABLE_WARN_BHV_RANGE(0),
.C_COUNT_36K_BRAM("0"),
.C_COUNT_18K_BRAM("1"),
.C_EST_POWER_SUMMARY("Estimated Power for IP : 0.990811 mW")
) inst (
.clka(clka),
.rsta(1'D0),
.ena(ena),
.regcea(1'D0),
.wea(1'B0),
.addra(addra),
.dina(1'B0),
.douta(douta),
.clkb(1'D0),
.rstb(1'D0),
.enb(1'D0),
.regceb(1'D0),
.web(1'B0),
.addrb(11'B0),
.dinb(1'B0),
.doutb(),
.injectsbiterr(1'D0),
.injectdbiterr(1'D0),
.eccpipece(1'D0),
.sbiterr(),
.dbiterr(),
.rdaddrecc(),
.sleep(1'D0),
.deepsleep(1'D0),
.shutdown(1'D0),
.rsta_busy(),
.rstb_busy(),
.s_aclk(1'H0),
.s_aresetn(1'D0),
.s_axi_awid(4'B0),
.s_axi_awaddr(32'B0),
.s_axi_awlen(8'B0),
.s_axi_awsize(3'B0),
.s_axi_awburst(2'B0),
.s_axi_awvalid(1'D0),
.s_axi_awready(),
.s_axi_wdata(1'B0),
.s_axi_wstrb(1'B0),
.s_axi_wlast(1'D0),
.s_axi_wvalid(1'D0),
.s_axi_wready(),
.s_axi_bid(),
.s_axi_bresp(),
.s_axi_bvalid(),
.s_axi_bready(1'D0),
.s_axi_arid(4'B0),
.s_axi_araddr(32'B0),
.s_axi_arlen(8'B0),
.s_axi_arsize(3'B0),
.s_axi_arburst(2'B0),
.s_axi_arvalid(1'D0),
.s_axi_arready(),
.s_axi_rid(),
.s_axi_rdata(),
.s_axi_rresp(),
.s_axi_rlast(),
.s_axi_rvalid(),
.s_axi_rready(1'D0),
.s_axi_injectsbiterr(1'D0),
.s_axi_injectdbiterr(1'D0),
.s_axi_sbiterr(),
.s_axi_dbiterr(),
.s_axi_rdaddrecc()
);
endmodule
@@ -0,0 +1,73 @@
// (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
//
// This file contains confidential and proprietary information
// of Xilinx, Inc. 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
// Xilinx, and to the maximum extent permitted by applicable
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
// WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
// possibility of the same.
//
// CRITICAL APPLICATIONS
// Xilinx 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 Xilinx 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:fifo_generator:13.2
// IP Revision: 4
// The following must be inserted into your Verilog file for this
// core to be instantiated. Change the instance name and port connections
// (in parentheses) to your own signal names.
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
fifo_AntCtrl your_instance_name (
.rst(rst), // input wire rst
.wr_clk(wr_clk), // input wire wr_clk
.rd_clk(rd_clk), // input wire rd_clk
.din(din), // input wire [3 : 0] din
.wr_en(wr_en), // input wire wr_en
.rd_en(rd_en), // input wire rd_en
.dout(dout), // output wire [3 : 0] dout
.full(full), // output wire full
.empty(empty) // output wire empty
);
// INST_TAG_END ------ End INSTANTIATION Template ---------
// You must compile the wrapper file fifo_AntCtrl.v when simulating
// the core, fifo_AntCtrl. When compiling the wrapper file, be sure to
// reference the Verilog simulation library.
@@ -0,0 +1,91 @@
-- (c) Copyright 1995-2023 Xilinx, Inc. All rights reserved.
--
-- This file contains confidential and proprietary information
-- of Xilinx, Inc. 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
-- Xilinx, and to the maximum extent permitted by applicable
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
-- WITH ALL FAULTS, AND XILINX 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) Xilinx 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 Xilinx had been advised of the
-- possibility of the same.
--
-- CRITICAL APPLICATIONS
-- Xilinx 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 Xilinx 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:fifo_generator:13.2
-- IP Revision: 4
-- The following code must appear in the VHDL architecture header.
------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG
COMPONENT fifo_AntCtrl
PORT (
rst : IN STD_LOGIC;
wr_clk : IN STD_LOGIC;
rd_clk : IN STD_LOGIC;
din : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
wr_en : IN STD_LOGIC;
rd_en : IN STD_LOGIC;
dout : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
full : OUT STD_LOGIC;
empty : OUT STD_LOGIC
);
END COMPONENT;
-- COMP_TAG_END ------ End COMPONENT Declaration ------------
-- The following code must appear in the VHDL architecture
-- body. Substitute your own instance name and net names.
------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG
your_instance_name : fifo_AntCtrl
PORT MAP (
rst => rst,
wr_clk => wr_clk,
rd_clk => rd_clk,
din => din,
wr_en => wr_en,
rd_en => rd_en,
dout => dout,
full => full,
empty => empty
);
-- INST_TAG_END ------ End INSTANTIATION Template ---------
-- You must compile the wrapper file fifo_AntCtrl.vhd when simulating
-- the core, fifo_AntCtrl. When compiling the wrapper file, be sure to
-- reference the VHDL simulation library.
@@ -0,0 +1,29 @@
// Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
// --------------------------------------------------------------------------------
// Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
// Date : Sat Mar 18 23:33:46 2023
// Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
// Command : write_verilog -force -mode synth_stub -rename_top fifo_AntCtrl -prefix
// fifo_AntCtrl_ fifo_AntCtrl_stub.v
// Design : fifo_AntCtrl
// Purpose : Stub declaration of top-level module interface
// Device : xc7k410tffg900-2
// --------------------------------------------------------------------------------
// 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 = "fifo_generator_v13_2_4,Vivado 2019.1.3" *)
module fifo_AntCtrl(rst, wr_clk, rd_clk, din, wr_en, rd_en, dout, full,
empty)
/* synthesis syn_black_box black_box_pad_pin="rst,wr_clk,rd_clk,din[3:0],wr_en,rd_en,dout[3:0],full,empty" */;
input rst;
input wr_clk;
input rd_clk;
input [3:0]din;
input wr_en;
input rd_en;
output [3:0]dout;
output full;
output empty;
endmodule
@@ -0,0 +1,38 @@
-- Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
-- --------------------------------------------------------------------------------
-- Tool Version: Vivado v.2019.1.3 (win64) Build 2644227 Wed Sep 4 09:45:24 MDT 2019
-- Date : Sat Mar 18 23:33:46 2023
-- Host : JOSH-ASUS-Z690 running 64-bit major release (build 9200)
-- Command : write_vhdl -force -mode synth_stub -rename_top fifo_AntCtrl -prefix
-- fifo_AntCtrl_ fifo_AntCtrl_stub.vhdl
-- Design : fifo_AntCtrl
-- Purpose : Stub declaration of top-level module interface
-- Device : xc7k410tffg900-2
-- --------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity fifo_AntCtrl is
Port (
rst : in STD_LOGIC;
wr_clk : in STD_LOGIC;
rd_clk : in STD_LOGIC;
din : in STD_LOGIC_VECTOR ( 3 downto 0 );
wr_en : in STD_LOGIC;
rd_en : in STD_LOGIC;
dout : out STD_LOGIC_VECTOR ( 3 downto 0 );
full : out STD_LOGIC;
empty : out STD_LOGIC
);
end fifo_AntCtrl;
architecture stub of fifo_AntCtrl 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 "rst,wr_clk,rd_clk,din[3:0],wr_en,rd_en,dout[3:0],full,empty";
attribute x_core_info : string;
attribute x_core_info of stub : architecture is "fifo_generator_v13_2_4,Vivado 2019.1.3";
begin
end;

Some files were not shown because too many files have changed in this diff Show More