Add files via upload
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
// file: Clock_120MHz.v
|
||||
//
|
||||
// (c) Copyright 2008 - 2011 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 Pk-to-Pk Phase"
|
||||
// "Clock Freq (MHz) (degrees) Cycle (%) Jitter (ps) Error (ps)"
|
||||
//----------------------------------------------------------------------------
|
||||
// CLK_OUT1___120.000______0.000______50.0______230.987____300.046
|
||||
// CLK_OUT2____60.000______0.000______50.0______254.384____300.046
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
// "Input Clock Freq (MHz) Input Jitter (UI)"
|
||||
//----------------------------------------------------------------------------
|
||||
// __primary_________100.000____________0.010
|
||||
|
||||
`timescale 1ps/1ps
|
||||
|
||||
(* CORE_GENERATION_INFO = "Clock_120MHz,clk_wiz_v3_6,{component_name=Clock_120MHz,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,feedback_source=FDBK_AUTO,primtype_sel=MMCM_ADV,num_out_clk=2,clkin1_period=10.000,clkin2_period=8.333,use_power_down=false,use_reset=false,use_locked=false,use_inclk_stopped=false,use_status=false,use_freeze=false,use_clk_valid=false,feedback_type=SINGLE,clock_mgr_type=MANUAL,manual_override=false}" *)
|
||||
module Clock_120MHz
|
||||
(// Clock in ports
|
||||
input CLK_IN,
|
||||
// Clock out ports
|
||||
output CLK_OUT_120MHz,
|
||||
output CLK_OUT_60MHz
|
||||
);
|
||||
|
||||
// Input buffering
|
||||
//------------------------------------
|
||||
IBUFG clkin1_buf
|
||||
(.O (clkin1),
|
||||
.I (CLK_IN));
|
||||
|
||||
|
||||
// Clocking primitive
|
||||
//------------------------------------
|
||||
// Instantiation of the MMCM primitive
|
||||
// * Unused inputs are tied off
|
||||
// * Unused outputs are labeled unused
|
||||
wire [15:0] do_unused;
|
||||
wire drdy_unused;
|
||||
wire psdone_unused;
|
||||
wire locked_unused;
|
||||
wire clkfbout;
|
||||
wire clkfbout_buf;
|
||||
wire clkfboutb_unused;
|
||||
wire clkout0b_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 (51.000),
|
||||
.CLKFBOUT_PHASE (0.000),
|
||||
.CLKFBOUT_USE_FINE_PS ("FALSE"),
|
||||
.CLKOUT0_DIVIDE_F (8.500),
|
||||
.CLKOUT0_PHASE (0.000),
|
||||
.CLKOUT0_DUTY_CYCLE (0.500),
|
||||
.CLKOUT0_USE_FINE_PS ("FALSE"),
|
||||
.CLKOUT1_DIVIDE (17),
|
||||
.CLKOUT1_PHASE (0.000),
|
||||
.CLKOUT1_DUTY_CYCLE (0.500),
|
||||
.CLKOUT1_USE_FINE_PS ("FALSE"),
|
||||
.CLKIN1_PERIOD (10.000),
|
||||
.REF_JITTER1 (0.010))
|
||||
mmcm_adv_inst
|
||||
// Output clocks
|
||||
(.CLKFBOUT (clkfbout),
|
||||
.CLKFBOUTB (clkfboutb_unused),
|
||||
.CLKOUT0 (clkout0),
|
||||
.CLKOUT0B (clkout0b_unused),
|
||||
.CLKOUT1 (clkout1),
|
||||
.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),
|
||||
.CLKIN1 (clkin1),
|
||||
.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_unused),
|
||||
.CLKINSTOPPED (clkinstopped_unused),
|
||||
.CLKFBSTOPPED (clkfbstopped_unused),
|
||||
.PWRDWN (1'b0),
|
||||
.RST (1'b0));
|
||||
|
||||
// Output buffering
|
||||
//-----------------------------------
|
||||
BUFG clkf_buf
|
||||
(.O (clkfbout_buf),
|
||||
.I (clkfbout));
|
||||
|
||||
BUFG clkout1_buf
|
||||
(.O (CLK_OUT_120MHz),
|
||||
.I (clkout0));
|
||||
|
||||
|
||||
BUFG clkout2_buf
|
||||
(.O (CLK_OUT_60MHz),
|
||||
.I (clkout1));
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,109 @@
|
||||
############################ CLOCK INPUT SI5351 100MHz ########################
|
||||
NET "CLK_IN" CLOCK_DEDICATED_ROUTE = TRUE;
|
||||
NET "CLK_IN" LOC = N11 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
NET "CLK_IN" TNM_NET = "CLK_IN";
|
||||
TIMESPEC "TS_CLK_IN" = PERIOD "clk_in" 10 ns HIGH 50%;# 100 MHz clock
|
||||
|
||||
############################### Microcontroller ###############################
|
||||
NET "STM32_SCLK" LOC = E12 | IOSTANDARD = LVCMOS33;
|
||||
NET "STM32_MOSI" LOC = H13 | IOSTANDARD = LVCMOS33;
|
||||
NET "STM32_MISO" LOC = G14 | IOSTANDARD = LVCMOS33;
|
||||
NET "STM32_CS_ADAR_1" LOC = F14 | IOSTANDARD = LVCMOS33;
|
||||
NET "STM32_CS_ADAR_2" LOC = H16 | IOSTANDARD = LVCMOS33;
|
||||
NET "STM32_CS_ADAR_3" LOC = G16 | IOSTANDARD = LVCMOS33;
|
||||
NET "STM32_CS_ADAR_4" LOC = J15 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
NET "DIG_0" LOC = F13 | IOSTANDARD = LVCMOS33;
|
||||
NET "DIG_1" LOC = E16 | IOSTANDARD = LVCMOS33;
|
||||
NET "DIG_2" LOC = D16 | IOSTANDARD = LVCMOS33;
|
||||
NET "DIG_3" LOC = F15 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
#NET "DIG_4" LOC = E15 | IOSTANDARD = LVCMOS33;
|
||||
#NET "DIG_5" LOC = H11 | IOSTANDARD = LVCMOS33;
|
||||
#NET "DIG_6" LOC = G12 | IOSTANDARD = LVCMOS33;
|
||||
#NET "DIG_7" LOC = H12 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
############################### DAC AD9708AR ##################################
|
||||
NET "DAC_DATA[0]" LOC = A14 | IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_DATA[1]" LOC = A13 | IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_DATA[2]" LOC = A12 | IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_DATA[3]" LOC = B11 | IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_DATA[4]" LOC = B10 | IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_DATA[5]" LOC = A10 | IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_DATA[6]" LOC = A9 | IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_DATA[7]" LOC = A8 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
NET "DAC_SLEEP" LOC = A15 | IOSTANDARD = LVCMOS33;
|
||||
NET "DAC_CLOCK" LOC = C13 | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = FAST;
|
||||
|
||||
############################### MIXER LTC5552 ##################################
|
||||
NET "MIX_TX_EN" LOC = C11 | IOSTANDARD = LVCMOS33;
|
||||
NET "MIX_RX_EN" LOC = M6 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
############################### ADC MAX1449 ##################################
|
||||
NET "ADC_DATA[0]" LOC = T8 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_DATA[1]" LOC = T9 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_DATA[2]" LOC = T10 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_DATA[3]" LOC = R11 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_DATA[4]" LOC = T12 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_DATA[5]" LOC = T13 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_DATA[6]" LOC = T14 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_DATA[7]" LOC = T15 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_DATA[8]" LOC = R15 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_DATA[9]" LOC = R16 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_PD" LOC = M16 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_OE" LOC = N16 | IOSTANDARD = LVCMOS33;
|
||||
NET "ADC_CLOCK" LOC = P14 | IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = FAST;
|
||||
|
||||
############################# RF SWITCH M3SWA2-34DR+ ##############################
|
||||
NET "M3S_VCTRL" LOC = P8 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
############################### ADAR1000_1_2_3_4 ##################################
|
||||
NET "SPI_SCLK_1V8" LOC = F5 | IOSTANDARD = LVCMOS18 | DRIVE = 16 | SLEW = FAST;
|
||||
NET "SPI_MOSI_1V8" LOC = B5 | IOSTANDARD = LVCMOS18;
|
||||
NET "SPI_MISO_1V8" LOC = A5 | IOSTANDARD = LVCMOS18;
|
||||
NET "CS_ADAR_1V8_1" LOC = E6 | IOSTANDARD = LVCMOS18;
|
||||
NET "CS_ADAR_1V8_2" LOC = B7 | IOSTANDARD = LVCMOS18;
|
||||
NET "CS_ADAR_1V8_3" LOC = A7 | IOSTANDARD = LVCMOS18;
|
||||
NET "CS_ADAR_1V8_4" LOC = B6 | IOSTANDARD = LVCMOS18;
|
||||
|
||||
NET "ADAR_TR1" LOC = A4 | IOSTANDARD = LVCMOS18;
|
||||
NET "ADAR_TR2" LOC = B4 | IOSTANDARD = LVCMOS18;
|
||||
NET "ADAR_TR3" LOC = A3 | IOSTANDARD = LVCMOS18;
|
||||
NET "ADAR_TR4" LOC = C7 | IOSTANDARD = LVCMOS18;
|
||||
|
||||
NET "ADAR_TX_LOAD_1" LOC = C6 | IOSTANDARD = LVCMOS18;
|
||||
NET "ADAR_TX_LOAD_2" LOC = G1 | IOSTANDARD = LVCMOS18;
|
||||
NET "ADAR_TX_LOAD_3" LOC = G4 | IOSTANDARD = LVCMOS18;
|
||||
NET "ADAR_TX_LOAD_4" LOC = E1 | IOSTANDARD = LVCMOS18;
|
||||
|
||||
NET "ADAR_RX_LOAD_1" LOC = D6 | IOSTANDARD = LVCMOS18;
|
||||
NET "ADAR_RX_LOAD_2" LOC = G2 | IOSTANDARD = LVCMOS18;
|
||||
NET "ADAR_RX_LOAD_3" LOC = G5 | IOSTANDARD = LVCMOS18;
|
||||
NET "ADAR_RX_LOAD_4" LOC = F2 | IOSTANDARD = LVCMOS18;
|
||||
|
||||
############################### FT2232HQ ##################################
|
||||
NET "AD_Bus[0]" LOC = N1 | IOSTANDARD = LVCMOS33;
|
||||
NET "AD_Bus[1]" LOC = P1 | IOSTANDARD = LVCMOS33;
|
||||
NET "AD_Bus[2]" LOC = R1 | IOSTANDARD = LVCMOS33;
|
||||
NET "AD_Bus[3]" LOC = N2 | IOSTANDARD = LVCMOS33;
|
||||
NET "AD_Bus[4]" LOC = R2 | IOSTANDARD = LVCMOS33;
|
||||
NET "AD_Bus[5]" LOC = T2 | IOSTANDARD = LVCMOS33;
|
||||
NET "AD_Bus[6]" LOC = N3 | IOSTANDARD = LVCMOS33;
|
||||
NET "AD_Bus[7]" LOC = P3 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
NET "FT_OE" LOC = L5 | IOSTANDARD = LVCMOS33;
|
||||
NET "FT_RD" LOC = L4 | IOSTANDARD = LVCMOS33;
|
||||
NET "FT_WR" LOC = P4 | IOSTANDARD = LVCMOS33;
|
||||
NET "FT_TXE" LOC = N4 | IOSTANDARD = LVCMOS33;
|
||||
#NET "FT_RXF" LOC = T3 | IOSTANDARD = LVCMOS33;
|
||||
#NET "FT_SIWA" LOC = P5 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
|
||||
NET "FT_CLKOUT" CLOCK_DEDICATED_ROUTE = TRUE;
|
||||
NET "FT_CLKOUT" LOC = T4 | IOSTANDARD = LVCMOS33;
|
||||
|
||||
NET "FT_CLKOUT" TNM_NET = "FT_CLKOUT";
|
||||
TIMESPEC "TS_FT_CLKOUT" = PERIOD "FT_CLKOUT" 16.67 ns HIGH 50%;# 60 MHz clock
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,262 @@
|
||||
|
||||
|
||||
############################CLOCK INPUT SI5351 100MHz########################
|
||||
|
||||
set_property PACKAGE_PIN N11 [get_ports CLK_IN]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports CLK_IN]
|
||||
create_clock -period 10.0 [get_ports CLK_IN] #100 MHz clock
|
||||
|
||||
###############################Microcontroller###############################
|
||||
|
||||
set_property PACKAGE_PIN E12 [get_ports STM32_SCLK]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports STM32_SCLK]
|
||||
|
||||
set_property PACKAGE_PIN H13 [get_ports STM32_MOSI]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports STM32_MOSI]
|
||||
|
||||
set_property PACKAGE_PIN G14 [get_ports STM32_MISO]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports STM32_MISO]
|
||||
|
||||
set_property PACKAGE_PIN F14 [get_ports STM32_CS_ADAR_1]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports STM32_CS_ADAR_1]
|
||||
|
||||
set_property PACKAGE_PIN H16 [get_ports STM32_CS_ADAR_2]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports STM32_CS_ADAR_2]
|
||||
|
||||
set_property PACKAGE_PIN G16 [get_ports STM32_CS_ADAR_3]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports STM32_CS_ADAR_3]
|
||||
|
||||
set_property PACKAGE_PIN J15 [get_ports STM32_CS_ADAR_4]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports STM32_CS_ADAR_4]
|
||||
|
||||
set_property PACKAGE_PIN F13 [get_ports DIG_0]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DIG_0]
|
||||
|
||||
set_property PACKAGE_PIN E16 [get_ports DIG_1]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DIG_1]
|
||||
|
||||
set_property PACKAGE_PIN D16 [get_ports DIG_2]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DIG_2]
|
||||
|
||||
set_property PACKAGE_PIN F15 [get_ports DIG_3]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DIG_3
|
||||
|
||||
set_property PACKAGE_PIN E15 [get_ports DIG_4]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DIG_4]
|
||||
|
||||
set_property PACKAGE_PIN H11 [get_ports DIG_5]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DIG_5]
|
||||
|
||||
set_property PACKAGE_PIN G12 [get_ports DIG_6]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DIG_6]
|
||||
|
||||
set_property PACKAGE_PIN H12 [get_ports DIG_7]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DIG_7]
|
||||
|
||||
###############################DAC AD9708AR##################################
|
||||
|
||||
set_property PACKAGE_PIN A14 [get_ports DAC_0] #LSB
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_0]
|
||||
|
||||
set_property PACKAGE_PIN A13 [get_ports DAC_1]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_1]
|
||||
|
||||
set_property PACKAGE_PIN A12 [get_ports DAC_2]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_2]
|
||||
|
||||
set_property PACKAGE_PIN B11 [get_ports DAC_3]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_3]
|
||||
|
||||
set_property PACKAGE_PIN B10 [get_ports DAC_4]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_4]
|
||||
|
||||
set_property PACKAGE_PIN A10 [get_ports DAC_5]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_5]
|
||||
|
||||
set_property PACKAGE_PIN A9 [get_ports DAC_6]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_6]
|
||||
|
||||
set_property PACKAGE_PIN A8 [get_ports DAC_7] #MSB
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_7]
|
||||
|
||||
set_property PACKAGE_PIN A15 [get_ports DAC_SLEEP] #active high
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_SLEEP]
|
||||
|
||||
set_property PACKAGE_PIN C13 [get_ports DAC_CLK] #data latched on pos. edge of clock # C13 should be an MRCC/SRCC pin
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports DAC_CLK]
|
||||
set_property DRIVE 16 [get_ports DAC_CLK] # Adjust drive strength if needed
|
||||
set_property SLEW FAST [get_ports DAC_CLK] # Ensure fast edge transition
|
||||
|
||||
###############################MIXER LTC5552##################################
|
||||
|
||||
set_property PACKAGE_PIN C11 [get_ports MIX_TX_EN]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports MIX_TX_EN]
|
||||
|
||||
set_property PACKAGE_PIN M6 [get_ports MIX_RX_EN]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports MIX_RX_EN]
|
||||
|
||||
###############################ADC MAX1449##################################
|
||||
|
||||
set_property PACKAGE_PIN T8 [get_ports ADC_0] #LSB
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_0]
|
||||
|
||||
set_property PACKAGE_PIN T9 [get_ports ADC_1]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_1]
|
||||
|
||||
set_property PACKAGE_PIN T10 [get_ports ADC_2]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_2]
|
||||
|
||||
set_property PACKAGE_PIN R11 [get_ports ADC_3]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_3]
|
||||
|
||||
set_property PACKAGE_PIN T12 [get_ports ADC_4]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_4]
|
||||
|
||||
set_property PACKAGE_PIN T13 [get_ports ADC_5]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_5]
|
||||
|
||||
set_property PACKAGE_PIN T14 [get_ports ADC_6]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_6]
|
||||
|
||||
set_property PACKAGE_PIN T15 [get_ports ADC_7]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_7]
|
||||
|
||||
set_property PACKAGE_PIN R14 [get_ports ADC_8]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_8]
|
||||
|
||||
set_property PACKAGE_PIN R16 [get_ports ADC_9] #MSB
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_9]
|
||||
|
||||
set_property PACKAGE_PIN M16 [get_ports ADC_PD]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_PD]
|
||||
|
||||
set_property PACKAGE_PIN N16 [get_ports ADC_OE]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_OE]
|
||||
|
||||
set_property PACKAGE_PIN P14 [get_ports ADC_CLK] # P14 should be an MRCC/SRCC pin
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports ADC_CLK]
|
||||
set_property DRIVE 16 [get_ports ADC_CLK] # Adjust drive strength if needed
|
||||
set_property SLEW FAST [get_ports ADC_CLK] # Ensure fast edge transition
|
||||
|
||||
#############################RF SWITCH M3SWA2-34DR+##############################
|
||||
|
||||
set_property PACKAGE_PIN P8 [get_ports M3S_VCTRL]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports M3S_VCTRL]
|
||||
|
||||
###############################ADAR1000_1_2_3_4##################################
|
||||
|
||||
set_property PACKAGE_PIN F5 [get_ports SPI_SCLK_1V8]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports SPI_SCLK_1V8]
|
||||
set_property DRIVE 16 [get_ports SPI_SCLK_1V8] # Adjust drive strength if needed
|
||||
set_property SLEW FAST [get_ports SPI_SCLK_1V8] # Ensure fast edge transition
|
||||
|
||||
set_property PACKAGE_PIN B5 [get_ports SPI_MOSI_1V8]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports SPI_MOSI_1V8]
|
||||
|
||||
set_property PACKAGE_PIN A5 [get_ports SPI_MISO_1V8]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports SPI_MISO_1V8]
|
||||
|
||||
set_property PACKAGE_PIN E6 [get_ports CS_ADAR_1V8_1]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports CS_ADAR_1V8_1]
|
||||
|
||||
set_property PACKAGE_PIN B7 [get_ports CS_ADAR_1V8_2]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports CS_ADAR_1V8_2]
|
||||
|
||||
set_property PACKAGE_PIN A7 [get_ports CS_ADAR_1V8_3]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports CS_ADAR_1V8_3]
|
||||
|
||||
set_property PACKAGE_PIN B6 [get_ports CS_ADAR_1V8_4]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports CS_ADAR_1V8_4]
|
||||
|
||||
set_property PACKAGE_PIN A4 [get_ports ADAR_TR_1]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_TR_1]
|
||||
|
||||
set_property PACKAGE_PIN B4 [get_ports ADAR_TR_2]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_TR_2]
|
||||
|
||||
set_property PACKAGE_PIN A3 [get_ports ADAR_TR_3]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_TR_3]
|
||||
|
||||
set_property PACKAGE_PIN C7 [get_ports ADAR_TR_4]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_TR_4]
|
||||
|
||||
set_property PACKAGE_PIN C6 [get_ports ADAR_TX_LOAD_1]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_TX_LOAD_1]
|
||||
|
||||
set_property PACKAGE_PIN G1 [get_ports ADAR_TX_LOAD_2]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_TX_LOAD_2]
|
||||
|
||||
set_property PACKAGE_PIN G4 [get_ports ADAR_TX_LOAD_3]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_TX_LOAD_3]
|
||||
|
||||
set_property PACKAGE_PIN E1 [get_ports ADAR_TX_LOAD_4]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_TX_LOAD_4]
|
||||
|
||||
set_property PACKAGE_PIN D6 [get_ports ADAR_RX_LOAD_1]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_RX_LOAD_1]
|
||||
|
||||
set_property PACKAGE_PIN G2 [get_ports ADAR_RX_LOAD_2]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_RX_LOAD_2]
|
||||
|
||||
set_property PACKAGE_PIN G5 [get_ports ADAR_RX_LOAD_3]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_RX_LOAD_3]
|
||||
|
||||
set_property PACKAGE_PIN F2 [get_ports ADAR_RX_LOAD_4]
|
||||
set_property IOSTANDARD LVCMOS18 [get_ports ADAR_RX_LOAD_4]
|
||||
|
||||
###############################FT2232HQ##################################
|
||||
|
||||
set_property PACKAGE_PIN N1 [get_ports FT_D0] #LSB
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_D0]
|
||||
|
||||
set_property PACKAGE_PIN P1 [get_ports FT_D1]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_D1]
|
||||
|
||||
set_property PACKAGE_PIN R1 [get_ports FT_D2]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_D2]
|
||||
|
||||
set_property PACKAGE_PIN N2 [get_ports FT_D3]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_D3]
|
||||
|
||||
set_property PACKAGE_PIN R2 [get_ports FT_D4]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_D4]
|
||||
|
||||
set_property PACKAGE_PIN T2 [get_ports FT_D5]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_D5]
|
||||
|
||||
set_property PACKAGE_PIN N3 [get_ports FT_D6]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_D6]
|
||||
|
||||
set_property PACKAGE_PIN P3 [get_ports FT_D7] #MSB
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_D7]
|
||||
|
||||
set_property PACKAGE_PIN L5 [get_ports FT_OE]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_OE]
|
||||
|
||||
set_property PACKAGE_PIN L4 [get_ports FT_RD]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_RD]
|
||||
|
||||
set_property PACKAGE_PIN P4 [get_ports FT_WR]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_WR]
|
||||
|
||||
set_property PACKAGE_PIN N4 [get_ports FT_TXE]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_TXE]
|
||||
|
||||
set_property PACKAGE_PIN T3 [get_ports FT_RXF]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_RXF]
|
||||
|
||||
set_property PACKAGE_PIN P5 [get_ports FT_SIWA]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_SIWA]
|
||||
|
||||
set_property PACKAGE_PIN T4 [get_ports FT_CLKOUT]
|
||||
set_property IOSTANDARD LVCMOS33 [get_ports FT_CLKOUT]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
module adc_interface (
|
||||
input wire CLK_IN, // 100 MHz clock input
|
||||
input wire rst, // Reset signal
|
||||
output wire ADC_CLK, // 60 MHz clock output to ADC
|
||||
output reg ADC_OE, // Output enable (0 = enable)
|
||||
output reg ADC_PD, // Power down (0 = normal operation)
|
||||
input wire [9:0] ADC_DATA, // 10-bit parallel ADC data input
|
||||
output reg [9:0] sampled_data // Captured ADC data
|
||||
);
|
||||
|
||||
// Clocking Wizard or PLL/MMCM should be instantiated here to generate 60MHz ADC_CLK
|
||||
wire clk_60MHz;
|
||||
|
||||
// Instantiate clock generator (example with MMCM/PLL instantiation needed)
|
||||
clk_wiz_0 clk_gen (
|
||||
.clk_in1(CLK_IN),
|
||||
.clk_out1(clk_60MHz), // 60 MHz clock output
|
||||
.reset(1'b0),
|
||||
.locked()
|
||||
);
|
||||
|
||||
assign ADC_CLK = clk_60MHz;
|
||||
|
||||
// ADC control signals initialization
|
||||
always @(posedge CLK_IN or posedge rst) begin
|
||||
if (rst) begin
|
||||
ADC_OE <= 1'b1; // Default disabled
|
||||
ADC_PD <= 1'b1; // Default power down
|
||||
end else begin
|
||||
ADC_OE <= 1'b0; // Enable ADC
|
||||
ADC_PD <= 1'b0; // Normal operation
|
||||
end
|
||||
end
|
||||
|
||||
// Capture ADC data on ADC_CLK rising edge
|
||||
always @(posedge clk_60MHz) begin
|
||||
sampled_data <= ADC_DATA;
|
||||
end
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,137 @@
|
||||
`timescale 1ns / 1ps
|
||||
module ft2232h_245_sync(input clk,//input 50_MHz
|
||||
input reset,
|
||||
input [7:0] DAC_DATA,
|
||||
input [7:0] AD_Bus,
|
||||
output reg oe,
|
||||
output reg rd,
|
||||
input txe,
|
||||
output reg wr,
|
||||
input clkout_ft2232);
|
||||
//output reg oe);
|
||||
|
||||
//wire CLK_OUT_PLL; //Output from PLL_IP_clock
|
||||
|
||||
|
||||
reg txe_n;
|
||||
reg wr_n;
|
||||
|
||||
reg oe_n = 1'b1;
|
||||
reg rd_n = 1'b1;
|
||||
|
||||
reg Flag_tx = 0;
|
||||
|
||||
reg data_en_1 = 0;
|
||||
reg data_en_2 = 0;
|
||||
|
||||
reg [7:0] data_o = 8'b00000000;
|
||||
|
||||
|
||||
parameter TX_RX_0 = 3'b000;
|
||||
parameter TX_1 = 3'b001;
|
||||
parameter TX_2 = 3'b010;
|
||||
parameter TX_3 = 3'b011;
|
||||
|
||||
reg [3:0] state;
|
||||
|
||||
reg [3:0] state_data;
|
||||
|
||||
reg counter = 1'b0;
|
||||
|
||||
begin
|
||||
|
||||
assign AD_Bus = (data_en_1 == 1'b1) ? DAC_DATA : 8'bz;
|
||||
|
||||
always @ (posedge clkout_ft2232)
|
||||
begin
|
||||
if ((txe_n == 0) && Flag_tx)
|
||||
begin
|
||||
data_en_1 = 1'b1;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
always @ (posedge clk)
|
||||
begin
|
||||
wr = wr_n;
|
||||
txe_n = txe;
|
||||
oe = oe_n;
|
||||
rd = rd_n;
|
||||
end
|
||||
|
||||
always @ (posedge clk)
|
||||
if (reset)
|
||||
begin
|
||||
state = TX_RX_0;
|
||||
state_data = 0;
|
||||
counter = 1'b0;
|
||||
wr_n = 1'b1;
|
||||
end
|
||||
else
|
||||
|
||||
begin
|
||||
|
||||
|
||||
case(state)
|
||||
|
||||
TX_RX_0: begin
|
||||
if (txe_n == 0)
|
||||
begin
|
||||
state = TX_1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
state = TX_RX_0;
|
||||
wr_n = 1'b1;
|
||||
end
|
||||
end
|
||||
|
||||
TX_1 : begin
|
||||
if(txe_n == 0)
|
||||
begin
|
||||
counter = counter + 1;
|
||||
if(counter == 1'b1)
|
||||
begin
|
||||
counter = 1'b0;
|
||||
state = TX_2;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
wr_n = 1'b1;
|
||||
state = TX_RX_0;
|
||||
end
|
||||
end
|
||||
|
||||
TX_2 : begin
|
||||
wr_n = 1'b0;
|
||||
counter = counter + 1;
|
||||
if(counter == 1'b1)
|
||||
begin
|
||||
counter = 1'b0;
|
||||
state = TX_3;
|
||||
end
|
||||
end
|
||||
|
||||
TX_3 : begin
|
||||
if(txe_n == 0)
|
||||
begin
|
||||
Flag_tx = 1'b1;
|
||||
state = TX_3;
|
||||
end
|
||||
else
|
||||
begin
|
||||
state = TX_RX_0;
|
||||
wr_n = 1'b1;
|
||||
Flag_tx = 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
endcase
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,253 @@
|
||||
module fpga_controller (
|
||||
input wire CLK_IN, // 100MHz input clock
|
||||
input wire DIG_0, // Control signal
|
||||
input wire DIG_1, //reset from µC
|
||||
input wire [7:0] ADC_DATA, // 8-bit data from ADC
|
||||
output wire DAC_CLOCK, // Clock for DAC
|
||||
output reg [7:0] DAC_DATA, // Data to DAC
|
||||
output reg [7:0] FT_DATA, // Data to FT2232H
|
||||
output reg FT_WR, // Write control for FT2232H
|
||||
input FT_TXE,
|
||||
input wire FT_CLKOUT,
|
||||
output reg FT_OE,
|
||||
output reg FT_RD
|
||||
);
|
||||
|
||||
// Clock generation (assumes DAC needs 120MHz, adjust if needed)
|
||||
reg [2:0] clk_div = 0;
|
||||
reg dac_clk_reg = 0;
|
||||
always @(posedge CLK_IN) begin
|
||||
clk_div <= clk_div + 1;
|
||||
if (clk_div == 2) begin
|
||||
dac_clk_reg <= ~dac_clk_reg;
|
||||
clk_div <= 0;
|
||||
end
|
||||
end
|
||||
assign DAC_CLOCK = dac_clk_reg;
|
||||
|
||||
// Instantiate waveform generator
|
||||
waveform_generator waveform_gen (
|
||||
.CLK_IN(CLK_IN),
|
||||
.DAC_CLOCK(DAC_CLOCK),
|
||||
.DAC_DATA(DAC_DATA)
|
||||
);
|
||||
|
||||
// Instantiate ADC interface
|
||||
wire [7:0] adc_output;
|
||||
adc_interface adc_intf (
|
||||
.CLK_IN(CLK_IN),
|
||||
.ADC_DATA(adc_output)
|
||||
);
|
||||
|
||||
// Instantiate FIFO for FT2232H data buffering
|
||||
ft2232h_245_sync ft2232h_245_sync (
|
||||
.clk,//input 50_MHz
|
||||
.reset,
|
||||
.DAC_DATA,
|
||||
.AD_Bus,
|
||||
.oe,
|
||||
.rd,
|
||||
.txe,
|
||||
.wr,
|
||||
.clkout_ft2232
|
||||
);
|
||||
|
||||
// Data handling logic
|
||||
always @(posedge CLK_IN) begin
|
||||
if (!DIG_0) begin
|
||||
FT_DATA <= fifo_out; // Send ADC data to FT2232H
|
||||
FT_WR <= ~fifo_empty; // Write when FIFO is not empty
|
||||
end else begin
|
||||
FT_WR <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
// Waveform Generator Module
|
||||
module waveform_generator (
|
||||
input wire CLK_IN,
|
||||
output reg DAC_CLOCK,
|
||||
output reg [7:0] DAC_DATA
|
||||
);
|
||||
reg [2:0] clk_div = 0;
|
||||
always @(posedge CLK_IN) begin
|
||||
clk_div <= clk_div + 1;
|
||||
if (clk_div == 2) begin
|
||||
DAC_CLOCK <= ~DAC_CLOCK;
|
||||
clk_div <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
parameter integer n = 31;
|
||||
reg [7:0] waveform_LUT [0:n-1];
|
||||
initial begin
|
||||
waveform_LUT[0] = 8'h80; waveform_LUT[1] = 8'h89;
|
||||
waveform_LUT[2] = 8'h99; waveform_LUT[3] = 8'hAE;
|
||||
waveform_LUT[4] = 8'hC7; waveform_LUT[5] = 8'hE1;
|
||||
waveform_LUT[6] = 8'hF6; waveform_LUT[7] = 8'hFF;
|
||||
waveform_LUT[8] = 8'hF4; waveform_LUT[9] = 8'hCF;
|
||||
waveform_LUT[10] = 8'h92; waveform_LUT[11] = 8'h4B;
|
||||
waveform_LUT[12] = 8'h11; waveform_LUT[13] = 8'h02;
|
||||
waveform_LUT[14] = 8'h2E; waveform_LUT[15] = 8'h8A;
|
||||
waveform_LUT[16] = 8'hE4; waveform_LUT[17] = 8'hFC;
|
||||
waveform_LUT[18] = 8'hB6; waveform_LUT[19] = 8'h3F;
|
||||
waveform_LUT[20] = 8'h00; waveform_LUT[21] = 8'h41;
|
||||
waveform_LUT[22] = 8'hC8; waveform_LUT[23] = 8'hFC;
|
||||
waveform_LUT[24] = 8'h91; waveform_LUT[25] = 8'h0C;
|
||||
waveform_LUT[26] = 8'h2E; waveform_LUT[27] = 8'hD0;
|
||||
waveform_LUT[28] = 8'hED; waveform_LUT[29] = 8'h4A;
|
||||
waveform_LUT[30] = 8'h09;
|
||||
end
|
||||
|
||||
reg [9:0] index = 0;
|
||||
always @(posedge DAC_CLOCK) begin
|
||||
DAC_DATA <= waveform_LUT[index];
|
||||
index <= (index >= n - 1) ? 0 : index + 1;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// ADC Interface Module
|
||||
module adc_interface (
|
||||
input wire CLK_IN,
|
||||
output reg [7:0] ADC_DATA
|
||||
);
|
||||
always @(posedge CLK_IN) begin
|
||||
ADC_DATA <= $random; // Simulate ADC data
|
||||
end
|
||||
endmodule
|
||||
|
||||
// FIFO Transmitter Module
|
||||
module ft2232h_245_sync(input clk,//input 50_MHz
|
||||
input reset,
|
||||
input [7:0] DAC_DATA,
|
||||
input [7:0] AD_Bus,
|
||||
output reg oe,
|
||||
output reg rd,
|
||||
input txe,
|
||||
output reg wr,
|
||||
input clkout_ft2232);
|
||||
//output reg oe);
|
||||
|
||||
//wire CLK_OUT_PLL; //Output from PLL_IP_clock
|
||||
|
||||
|
||||
reg txe_n;
|
||||
reg wr_n;
|
||||
|
||||
reg oe_n = 1'b1;
|
||||
reg rd_n = 1'b1;
|
||||
|
||||
reg Flag_tx = 0;
|
||||
|
||||
reg data_en_1 = 0;
|
||||
reg data_en_2 = 0;
|
||||
|
||||
reg [7:0] data_o = 8'b00000000;
|
||||
|
||||
|
||||
parameter TX_RX_0 = 3'b000;
|
||||
parameter TX_1 = 3'b001;
|
||||
parameter TX_2 = 3'b010;
|
||||
parameter TX_3 = 3'b011;
|
||||
|
||||
reg [3:0] state;
|
||||
|
||||
reg [3:0] state_data;
|
||||
|
||||
reg counter = 1'b0;
|
||||
|
||||
begin
|
||||
|
||||
assign AD_Bus = (data_en_1 == 1'b1) ? DAC_DATA : 8'bz;
|
||||
|
||||
always @ (posedge clkout_ft2232)
|
||||
begin
|
||||
if ((txe_n == 0) && Flag_tx)
|
||||
begin
|
||||
data_en_1 = 1'b1;
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
always @ (posedge clk)
|
||||
begin
|
||||
wr = wr_n;
|
||||
txe_n = txe;
|
||||
oe = oe_n;
|
||||
rd = rd_n;
|
||||
end
|
||||
|
||||
always @ (posedge clk)
|
||||
if (reset)
|
||||
begin
|
||||
state = TX_RX_0;
|
||||
state_data = 0;
|
||||
counter = 1'b0;
|
||||
wr_n = 1'b1;
|
||||
end
|
||||
else
|
||||
|
||||
begin
|
||||
|
||||
|
||||
case(state)
|
||||
|
||||
TX_RX_0: begin
|
||||
if (txe_n == 0)
|
||||
begin
|
||||
state = TX_1;
|
||||
end
|
||||
else
|
||||
begin
|
||||
state = TX_RX_0;
|
||||
wr_n = 1'b1;
|
||||
end
|
||||
end
|
||||
|
||||
TX_1 : begin
|
||||
if(txe_n == 0)
|
||||
begin
|
||||
counter = counter + 1;
|
||||
if(counter == 1'b1)
|
||||
begin
|
||||
counter = 1'b0;
|
||||
state = TX_2;
|
||||
end
|
||||
end
|
||||
else
|
||||
begin
|
||||
wr_n = 1'b1;
|
||||
state = TX_RX_0;
|
||||
end
|
||||
end
|
||||
|
||||
TX_2 : begin
|
||||
wr_n = 1'b0;
|
||||
counter = counter + 1;
|
||||
if(counter == 1'b1)
|
||||
begin
|
||||
counter = 1'b0;
|
||||
state = TX_3;
|
||||
end
|
||||
end
|
||||
|
||||
TX_3 : begin
|
||||
if(txe_n == 0)
|
||||
begin
|
||||
Flag_tx = 1'b1;
|
||||
state = TX_3;
|
||||
end
|
||||
else
|
||||
begin
|
||||
state = TX_RX_0;
|
||||
wr_n = 1'b1;
|
||||
Flag_tx = 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
endcase
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
module spi_level_shifter (
|
||||
input wire STM32_SCLK,
|
||||
input wire STM32_MOSI,
|
||||
output wire STM32_MISO,
|
||||
input wire STM32_CS_ADAR1,
|
||||
input wire STM32_CS_ADAR2,
|
||||
input wire STM32_CS_ADAR3,
|
||||
input wire STM32_CS_ADAR4,
|
||||
input wire DIG_0,
|
||||
input wire DIG_1,
|
||||
input wire DIG_2,
|
||||
output wire SPI_SCLK_1V8,
|
||||
output wire SPI_MOSI_1V8,
|
||||
input wire SPI_MISO_1V8,
|
||||
output wire CS_ADAR_1V8_1,
|
||||
output wire CS_ADAR_1V8_2,
|
||||
output wire CS_ADAR_1V8_3,
|
||||
output wire CS_ADAR_1V8_4,
|
||||
output reg ADAR_TR1,
|
||||
output reg ADAR_TR2,
|
||||
output reg ADAR_TR3,
|
||||
output reg ADAR_TR4,
|
||||
output reg M3S_VCTRL,
|
||||
output wire MIX_TX_EN,
|
||||
output wire MIX_RX_EN
|
||||
);
|
||||
|
||||
assign SPI_SCLK_1V8 = STM32_SCLK;
|
||||
assign SPI_MOSI_1V8 = STM32_MOSI;
|
||||
assign STM32_MISO = SPI_MISO_1V8;
|
||||
|
||||
assign CS_ADAR_1V8_1 = STM32_CS_ADAR1;
|
||||
assign CS_ADAR_1V8_2 = STM32_CS_ADAR2;
|
||||
assign CS_ADAR_1V8_3 = STM32_CS_ADAR3;
|
||||
assign CS_ADAR_1V8_4 = STM32_CS_ADAR4;
|
||||
|
||||
assign MIX_TX_EN = DIG_1;
|
||||
assign MIX_RX_EN = DIG_2;
|
||||
|
||||
always @(*) begin
|
||||
if (DIG_0) begin
|
||||
ADAR_TR1 = 1;
|
||||
ADAR_TR2 = 1;
|
||||
ADAR_TR3 = 1;
|
||||
ADAR_TR4 = 1;
|
||||
M3S_VCTRL = 0;
|
||||
end else begin
|
||||
ADAR_TR1 = 0;
|
||||
ADAR_TR2 = 0;
|
||||
ADAR_TR3 = 0;
|
||||
ADAR_TR4 = 0;
|
||||
M3S_VCTRL = 1;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,66 @@
|
||||
module waveform_generator (
|
||||
input wire CLK_IN, // 100MHz input clock
|
||||
output reg DAC_CLOCK, // 120MHz clock to DAC
|
||||
output reg DAC_SLEEP, // DAC sleep control (0 = normal operation)
|
||||
output reg [7:0] DAC_DATA // 8-bit output to DAC
|
||||
);
|
||||
|
||||
// Clock divider for generating 120MHz DAC clock from 100MHz input
|
||||
reg [2:0] clk_div = 0;
|
||||
always @(posedge CLK_IN) begin
|
||||
clk_div <= clk_div + 1;
|
||||
if (clk_div == 2) begin
|
||||
DAC_CLOCK <= ~DAC_CLOCK;
|
||||
clk_div <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
// Look-Up Table (LUT) to store precomputed waveform samples
|
||||
parameter integer n = 31; // Number of samples per ramp (Tb/Ts)
|
||||
reg [7:0] waveform_LUT [0:n-1];
|
||||
|
||||
initial begin
|
||||
// Precomputed LUT values based on Python script
|
||||
waveform_LUT[0] = 8'h80;
|
||||
waveform_LUT[1] = 8'h89;
|
||||
waveform_LUT[2] = 8'h99;
|
||||
waveform_LUT[3] = 8'hAE;
|
||||
waveform_LUT[4] = 8'hC7;
|
||||
waveform_LUT[5] = 8'hE1;
|
||||
waveform_LUT[6] = 8'hF6;
|
||||
waveform_LUT[7] = 8'hFF;
|
||||
waveform_LUT[8] = 8'hF4;
|
||||
waveform_LUT[9] = 8'hCF;
|
||||
waveform_LUT[10] = 8'h92;
|
||||
waveform_LUT[11] = 8'h4B;
|
||||
waveform_LUT[12] = 8'h11;
|
||||
waveform_LUT[13] = 8'h02;
|
||||
waveform_LUT[14] = 8'h2E;
|
||||
waveform_LUT[15] = 8'h8A;
|
||||
waveform_LUT[16] = 8'hE4;
|
||||
waveform_LUT[17] = 8'hFC;
|
||||
waveform_LUT[18] = 8'hB6;
|
||||
waveform_LUT[19] = 8'h3F;
|
||||
waveform_LUT[20] = 8'h00;
|
||||
waveform_LUT[21] = 8'h41;
|
||||
waveform_LUT[22] = 8'hC8;
|
||||
waveform_LUT[23] = 8'hFC;
|
||||
waveform_LUT[24] = 8'h91;
|
||||
waveform_LUT[25] = 8'h0C;
|
||||
waveform_LUT[26] = 8'h2E;
|
||||
waveform_LUT[27] = 8'hD0;
|
||||
waveform_LUT[28] = 8'hED;
|
||||
waveform_LUT[29] = 8'h4A;
|
||||
waveform_LUT[30] = 8'h09;
|
||||
DAC_SLEEP = 0; // Enable DAC operation
|
||||
end
|
||||
|
||||
// Counter to step through the LUT
|
||||
reg [9:0] index = 0;
|
||||
always @(posedge DAC_CLOCK) begin
|
||||
DAC_DATA <= waveform_LUT[index];
|
||||
index <= index + 1;
|
||||
if (index >= n) index <= 0; // Repeat the waveform
|
||||
end
|
||||
|
||||
endmodule
|
||||
Reference in New Issue
Block a user