diff --git a/FASEC_prototype.srcs/sources_1/bd/system_design/ipshared/user.org/fasec_hwtest_v2_9/FASEC_hwtest.srcs/sources_1/new/top_mod.vhd b/FASEC_prototype.srcs/sources_1/bd/system_design/ipshared/user.org/fasec_hwtest_v2_9/FASEC_hwtest.srcs/sources_1/new/top_mod.vhd index 7f38a062d3415d4eeb5925c414c36dffeb765a17..93b68082df2c0c4b1b9e9de710ec7ec5d352fc19 100755 --- a/FASEC_prototype.srcs/sources_1/bd/system_design/ipshared/user.org/fasec_hwtest_v2_9/FASEC_hwtest.srcs/sources_1/new/top_mod.vhd +++ b/FASEC_prototype.srcs/sources_1/bd/system_design/ipshared/user.org/fasec_hwtest_v2_9/FASEC_hwtest.srcs/sources_1/new/top_mod.vhd @@ -277,8 +277,8 @@ begin s_data(c_FASEC_BASE+1) <= resize(unsigned(s_ins), g_S00_AXI_DATA_WIDTH); s_data(c_FASEC_BASE+2) <= resize(unsigned(gem_status_vector_i), g_S00_AXI_DATA_WIDTH); -- s_data(c_FASEC_BASE+3).data used in p_fasec_dio - s_data(c_FASEC_BASE+6) <= x"DEADBEE1"; -- tcl-script will put unix build time - s_data(c_FASEC_BASE+7) <= x"DEADBEE2"; -- tcl-script will put git commit id + s_data(c_FASEC_BASE+6) <= x"58A6D302"; -- tcl-script will put unix build time + s_data(c_FASEC_BASE+7) <= x"2a3a8c6a"; -- tcl-script will put git commit id -- copy in rw data, 'for generate' only possible with constants! gen_data_readwrite : for i in 0 to c_MEMMAX-1 generate gen_fasec : if c_FASECMEM(i).ro = '0' generate @@ -435,3 +435,4 @@ begin S_AXI_RVALID => s00_axi_rvalid, S_AXI_RREADY => s00_axi_rready); end rtl; + diff --git a/FASEC_prototype.srcs/sources_1/bd/system_design/ipshared/user.org/fasec_hwtest_v2_9/FASEC_hwtest.srcs/sources_1/new/top_mod.vhd.old b/FASEC_prototype.srcs/sources_1/bd/system_design/ipshared/user.org/fasec_hwtest_v2_9/FASEC_hwtest.srcs/sources_1/new/top_mod.vhd.old new file mode 100755 index 0000000000000000000000000000000000000000..7f38a062d3415d4eeb5925c414c36dffeb765a17 --- /dev/null +++ b/FASEC_prototype.srcs/sources_1/bd/system_design/ipshared/user.org/fasec_hwtest_v2_9/FASEC_hwtest.srcs/sources_1/new/top_mod.vhd.old @@ -0,0 +1,437 @@ +------------------------------------------------------------------------------ +-- Title : FASEC HW-Test +-- Project : FIDS +------------------------------------------------------------------------------ +-- Author : Pieter Van Trappen +-- Company : CERN TE-ABT-EC +-- Created : 2016-08-19 +-- Last update: 2017-02-16 +-- Platform : FPGA-generic +-- Standard : VHDL'93 +------------------------------------------------------------------------------- +-- Description: +-- A top-level design for testing the FASEC hardware, incorperating +-- most of the hardware directly linked to the PL banks: 2 FMC slots, LEDs, +-- digital IOs and the SFP IP GEM status vector. +-- Excludes the i2c signals which are handled by seperate IPs. +------------------------------------------------------------------------------- +-- top_mod.vhd Copyright (c) 2016 CERN +------------------------------------------------------------------------------- +-- GNU LESSER GENERAL PUBLIC LICENSE +------------------------------------------------------------------------------- +-- This source file is free software; you can redistribute it and/or modify it +-- under the terms of the GNU Lesser General Public License as published by the +-- Free Software Foundation; either version 2.1 of the License, or (at your +-- option) any later version. This source is distributed in the hope that it +-- will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty +-- of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +-- See the GNU Lesser General Public License for more details. You should have +-- received a copy of the GNU Lesser General Public License along with this +-- source; if not, download it from http://www.gnu.org/licenses/lgpl-2.1.html +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2016-08-19 1.0 pvantrap Created +-- (see also version_info.txt) +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.NUMERIC_STD.all; + +library xil_pvtmisc; +use xil_pvtmisc.myPackage.all; + +entity fasec_hwtest is + generic( + -- Parameters of Axi Slave Bus Interface S00_AXI + g_S00_AXI_DATA_WIDTH : integer := 32; + g_S00_AXI_ADDR_WIDTH : integer := 32; + g_FMC1 : string := "EDA-03287"; -- unconstrained, otherwise Vivado + -- produces errors when integrating in + -- Block Design; EDA-0NONE + g_FMC2 : string := "EDA-03287"; + g_USE_GEM_LEDS : boolean := false); + port ( + ps_clk_i : in std_logic; -- clock from Zynq PS (100 MHz) + osc100_clk_i : in std_logic; -- clock from oscillator (100 MHz) + -- FMC 1-2 user IO + FMC2_LA_P_b : inout std_logic_vector(33 downto 0); + FMC2_LA_N_b : inout std_logic_vector(33 downto 0); + FMC1_LA_P_b : inout std_logic_vector(33 downto 0); + FMC1_LA_N_b : inout std_logic_vector(33 downto 0); + -- FMC misc IO + FMC2_PRSNTM2C_n_i : in std_logic; + FMC2_CLK0M2C_P_i : in std_logic; + FMC2_CLK0M2C_N_i : in std_logic; + FMC2_CLK0C2M_P_o : out std_logic; + FMC2_CLK0C2M_N_o : out std_logic; + FMC2_GP0_b : inout std_logic; + FMC2_GP1_b : inout std_logic; + FMC2_GP2_b : inout std_logic; + FMC2_GP3_b : inout std_logic; + FMC1_PRSNTM2C_n_i : in std_logic; + FMC1_CLK0M2C_P_i : in std_logic; + FMC1_CLK0M2C_N_i : in std_logic; + FMC1_CLK0C2M_P_o : out std_logic; + FMC1_CLK0C2M_N_o : out std_logic; + FMC1_GP0_b : inout std_logic; + FMC1_GP1_b : inout std_logic; + FMC1_GP2_b : inout std_logic; + FMC1_GP3_b : inout std_logic; + -- FASEC signals + pb_gp_n_i : in std_logic; + led_col_pl_o : out std_logic_vector (3 downto 0); -- anode green / cathode red + led_line_en_pl_o : out std_logic; -- output 1B Hi-Z when asserted + led_line_pl_o : out std_logic; -- output 1B: cathode green / anode red + watchdog_pl_o : out std_logic; + dig_in1_i : in std_logic; + dig_in2_i : in std_logic; + dig_in3_n_i : in std_logic; + dig_in4_n_i : in std_logic; + dig_outs_i : out std_logic_vector(3 downto 0); -- on schematic: 4 downto 1 + dig_out5_n : out std_logic; + dig_out6_n : out std_logic; + -- misc. signals + gem_status_vector_i : in std_logic_vector(15 downto 0); + -- AXI4-LITE slave interface + s00_axi_aclk : in std_logic; + s00_axi_aresetn : in std_logic; + s00_axi_awaddr : in std_logic_vector(g_S00_AXI_ADDR_WIDTH-1 downto 0); + s00_axi_awprot : in std_logic_vector(2 downto 0); + s00_axi_awvalid : in std_logic; + s00_axi_awready : out std_logic; + s00_axi_wdata : in std_logic_vector(g_S00_AXI_DATA_WIDTH-1 downto 0); + s00_axi_wstrb : in std_logic_vector((g_S00_AXI_DATA_WIDTH/8)-1 downto 0); + s00_axi_wvalid : in std_logic; + s00_axi_wready : out std_logic; + s00_axi_bresp : out std_logic_vector(1 downto 0); + s00_axi_bvalid : out std_logic; + s00_axi_bready : in std_logic; + s00_axi_araddr : in std_logic_vector(g_S00_AXI_ADDR_WIDTH-1 downto 0); + s00_axi_arprot : in std_logic_vector(2 downto 0); + s00_axi_arvalid : in std_logic; + s00_axi_arready : out std_logic; + s00_axi_rdata : out std_logic_vector(g_S00_AXI_DATA_WIDTH-1 downto 0); + s00_axi_rresp : out std_logic_vector(1 downto 0); + s00_axi_rvalid : out std_logic; + s00_axi_rready : in std_logic); +end fasec_hwtest; + +architecture rtl of fasec_hwtest is + -- components + component general_fmc is + generic ( + g_FMC : string(1 to 9); + g_DMAX : natural); + port ( + clk_i : in std_logic; + rst_i : in std_logic; + FMC_LA_P_b : inout std_logic_vector(33 downto 0); + FMC_LA_N_b : inout std_logic_vector(33 downto 0); + FMC_PRSNTM2C_n_i : in std_logic; + FMC_CLK0M2C_P_i : in std_logic; + FMC_CLK0M2C_N_i : in std_logic; + FMC_CLK0C2M_P_o : out std_logic; + FMC_CLK0C2M_N_o : out std_logic; + FMC_GP0_b : inout std_logic; + FMC_GP1_b : inout std_logic; + FMC_GP2_b : inout std_logic; + FMC_GP3_b : inout std_logic; + data_rw_i : in t_data32(0 to g_DMAX-1); + data_o : out t_data32(0 to g_DMAX-1)); + end component general_fmc; + + -- FASEC memory mapping + ------------------------------------ + -- memory mapping, using EDA-03287: + ------------------------------------ + -- 0x00: FASEC + -- 0x00: FMC generic ASCII + -- 0x01: b0-b5: digital ins + -- 0x02: b0-b15: GEM AN status vector + -- 0x03: output control: b0 @1 all outs connected to dig_in1; b1 @1 all outs + -- connected to s_tick frequency + -- 0x08: FMC1 (see general_fmc.vhd) + -- 0x4C: FMC2 (see general_fmc.vhd) + -- 0x90: end + ------------------------------------ + -- TODO: make constants for each register (in a seperate package cause + -- needed in multiple files?). Especially for the below function and + -- gen_data_readwrite process (x*c_FMC_DMAX etc.)! + ------------------------------------ + constant c_FASEC_BASE : natural := 0; + constant c_FASEC_DMAX : positive := 8; + constant c_FMC_DMAX : positive := 68; + constant c_MEMMAX : positive := c_FASEC_DMAX + 2*c_FMC_DMAX; + constant c_REG_OUTCTRL : positive := 3; + + function fill_mem_fasec(length : integer) return t_iomem32 is + variable m : t_iomem32(0 to length); + begin + for i in 0 to length loop + m(i).resetval := (others => '0'); + -- .ro is by default initialised to '1' + case i is + when c_REG_OUTCTRL => + m(i).ro := '0'; + m(i).resetval := x"00000001"; + when c_FASEC_DMAX+2 | c_FASEC_DMAX+c_FMC_DMAX+2 => + -- FMC output request + m(i).ro := '0'; + when c_FASEC_DMAX+3 | c_FASEC_DMAX+c_FMC_DMAX+3 => + -- FMC DAC control + m(i).ro := '0'; + m(i).resetval := x"00000002"; --0x2 for autostart + when c_FASEC_DMAX+8 to c_FASEC_DMAX+27 => + -- FMC1 20x channel write requests + m(i).ro := '0'; + m(i).resetval := x"000003ff"; --bipolar max. positive /2 + when c_FASEC_DMAX+c_FMC_DMAX+8 to c_FASEC_DMAX+c_FMC_DMAX+27 => + -- FMC2 20x channel write requests + m(i).ro := '0'; + m(i).resetval := x"000003ff"; --bipolar max. positive /2 + when others => + m(i).resetval := (others => '0'); + m(i).ro := '1'; + end case; + end loop; + return m; + end; + + -- constants and signals + constant c_FLASH : positive := 40000000; -- 400 ms @ 100 MHz + signal s_data : t_data32(0 to c_MEMMAX-1) := (others => (others => '0')); + signal s_data_rw : t_data32(0 to c_MEMMAX-1) := (others => (others => '0')); + constant c_FASECMEM : t_iomem32(0 to c_MEMMAX-1) := fill_mem_fasec(c_MEMMAX-1); + + -- FMC1-2 signals + signal s_tick : std_logic; + signal s_datao_fmc1 : t_data32(0 to c_FMC_DMAX-1); + signal s_datao_fmc2 : t_data32(0 to c_FMC_DMAX-1); + -- misc. + signal s_leds : std_logic_vector(3 downto 0) := (others => '0'); + signal s_led_line : std_logic := '1'; + signal s_gem_leds : std_logic_vector(3 downto 0); + signal s_reset : std_logic; + signal s_ins : std_logic_vector(3 downto 0) := (others => '0'); + signal s_outs : std_logic_vector(5 downto 0) := (others => '0'); +begin + -- reset, ModelSim doesn't like the not(..) in a port instantiation + s_reset <= not s00_axi_aresetn; + --============================================================================= + -- FMC1 component + --============================================================================= + cmp_general_fmc1 : general_fmc + generic map ( + g_FMC => g_FMC1, + g_DMAX => c_FMC_DMAX) + port map ( + clk_i => s00_axi_aclk, + rst_i => s_reset, + FMC_LA_P_b => FMC1_LA_P_b(33 downto 0), + FMC_LA_N_b => FMC1_LA_N_b(33 downto 0), + FMC_PRSNTM2C_n_i => FMC1_PRSNTM2C_n_i, + FMC_CLK0M2C_P_i => FMC1_CLK0M2C_P_i, + FMC_CLK0M2C_N_i => FMC1_CLK0M2C_N_i, + FMC_CLK0C2M_P_o => FMC1_CLK0C2M_P_o, + FMC_CLK0C2M_N_o => FMC1_CLK0C2M_N_o, + FMC_GP0_b => FMC1_GP0_b, + FMC_GP1_b => FMC1_GP1_b, + FMC_GP2_b => FMC1_GP2_b, + FMC_GP3_b => FMC1_GP3_b, + data_rw_i => s_data(c_FASEC_DMAX to c_FASEC_DMAX+c_FMC_DMAX-1), + data_o => s_datao_fmc1(0 to c_FMC_DMAX-1)); + + --============================================================================= + -- FMC2 component + --============================================================================= + cmp_general_fmc2 : general_fmc + generic map ( + g_FMC => g_FMC2, + g_DMAX => c_FMC_DMAX) + port map ( + clk_i => s00_axi_aclk, + rst_i => s_reset, + FMC_LA_P_b => FMC2_LA_P_b(33 downto 0), + FMC_LA_N_b => FMC2_LA_N_b(33 downto 0), + FMC_PRSNTM2C_n_i => FMC2_PRSNTM2C_n_i, + FMC_CLK0M2C_P_i => FMC2_CLK0M2C_P_i, + FMC_CLK0M2C_N_i => FMC2_CLK0M2C_N_i, + FMC_CLK0C2M_P_o => FMC2_CLK0C2M_P_o, + FMC_CLK0C2M_N_o => FMC2_CLK0C2M_N_o, + FMC_GP0_b => FMC2_GP0_b, + FMC_GP1_b => FMC2_GP1_b, + FMC_GP2_b => FMC2_GP2_b, + FMC_GP3_b => FMC2_GP3_b, + data_rw_i => s_data(c_FASEC_DMAX+c_FMC_DMAX to c_FASEC_DMAX+(2*c_FMC_DMAX)-1), + data_o => s_datao_fmc2(0 to c_FMC_DMAX-1)); + + --============================================================================= + -- FASEC IP memory mapping, see above for memory map + -- by default all data is read-only + --============================================================================= + --TODO: add synthesis timestamp (from top project!), FASEC IO control, FMC + -- PS read data + s_data(c_FASEC_BASE+0) <= (others => '0'); -- TODO: generic FMC string + s_data(c_FASEC_BASE+1) <= resize(unsigned(s_ins), g_S00_AXI_DATA_WIDTH); + s_data(c_FASEC_BASE+2) <= resize(unsigned(gem_status_vector_i), g_S00_AXI_DATA_WIDTH); + -- s_data(c_FASEC_BASE+3).data used in p_fasec_dio + s_data(c_FASEC_BASE+6) <= x"DEADBEE1"; -- tcl-script will put unix build time + s_data(c_FASEC_BASE+7) <= x"DEADBEE2"; -- tcl-script will put git commit id + -- copy in rw data, 'for generate' only possible with constants! + gen_data_readwrite : for i in 0 to c_MEMMAX-1 generate + gen_fasec : if c_FASECMEM(i).ro = '0' generate + -- no check for i because rw access possible for 'general' FASEC memory range + s_data(i) <= s_data_rw(i)(g_S00_AXI_DATA_WIDTH-1 downto 0); + end generate gen_fasec; + gen_fmc1 : if i >= c_FASEC_DMAX and i < c_FASEC_DMAX+c_FMC_DMAX and c_FASECMEM(i).ro = '1' generate + s_data(i) <= s_datao_fmc1(i-c_FASEC_DMAX); + end generate gen_fmc1; + gen_fmc2 : if i >= c_FASEC_DMAX+c_FMC_DMAX and i < c_FASEC_DMAX+2*c_FMC_DMAX and c_FASECMEM(i).ro = '1' generate + s_data(i) <= s_datao_fmc2(i-(c_FASEC_DMAX+c_FMC_DMAX)); + end generate gen_fmc2; + end generate gen_data_readwrite; + + --============================================================================= + -- FASEC digital IOs + --============================================================================= + p_fasec_dio : process(ps_clk_i, s_data, s_ins, s_tick) + variable v_ins : std_logic_vector(3 downto 0) := (others => '0'); + variable v_out_cntr : std_logic_vector(g_S00_AXI_DATA_WIDTH-1 downto 0); + begin + -- inputs, clocked + if rising_edge(ps_clk_i) then + -- ins + s_ins <= v_ins(3 downto 0); + v_ins(0) := dig_in1_i; + v_ins(1) := dig_in2_i; + v_ins(2) := not dig_in3_n_i; + v_ins(3) := not dig_in4_n_i; + end if; + -- outputs, not reclocked + v_out_cntr := std_logic_vector(s_data(c_FASEC_BASE+c_REG_OUTCTRL)(g_S00_AXI_DATA_WIDTH-1 downto 0)); + if v_out_cntr(0) = '1' then + s_outs(5 downto 0) <= (others => s_ins(0)); + elsif v_out_cntr(1) = '1' then + s_outs(5 downto 0) <= (others => s_tick); + else + s_outs(5 downto 0) <= (others => '0'); + end if; + end process p_fasec_dio; + dig_outs_i(3 downto 0) <= s_outs(3 downto 0); + dig_out5_n <= not s_outs(4); + dig_out6_n <= not s_outs(5); + --============================================================================= + -- tick generation, depending on constant c_FLASH + --============================================================================= + p_tick : process(ps_clk_i) + variable v_cntr : unsigned(31 downto 0) := (others => '0'); + begin + if rising_edge(ps_clk_i) then + if (to_integer(v_cntr) < c_FLASH) then + v_cntr := v_cntr + 1; + else + v_cntr := to_unsigned(0, v_cntr'length); + s_tick <= not s_tick; + end if; + end if; + end process p_tick; + + --============================================================================= + -- FASEC watchdog_pl frequency, 2 ms period + --============================================================================= + cmp_watchdog : clockDivider + generic map ( + g_FACTOR => 200000, + g_START_LEVEL => '0') + port map ( + clk_system_i => ps_clk_i, + reset_i => s_reset, + clk_div_o => watchdog_pl_o); + + --============================================================================= + -- FASEC LEDs output + --============================================================================= + p_leds : process(ps_clk_i) + variable v_pbreg : std_logic_vector(2 downto 0) := (others => '0'); + variable v_shift : std_logic_vector(7 downto 0) := "00000001"; + begin + if rising_edge(ps_clk_i) then + -- always on + led_line_en_pl_o <= '1'; + -- clock in pushbutton input + v_pbreg(2 downto 0) := v_pbreg(1 downto 0) & pb_gp_n_i; + -- shift-register + if s_tick = '1' then + v_shift(7 downto 0) := v_shift(6 downto 0) & v_shift(7); + end if; + -- LEDs output selection + if v_pbreg(2) = '1' then + -- button not pressed, light one by one (4x green, 4x red) + if unsigned(v_shift(3 downto 0)) /= 0 then + s_led_line <= '0'; + s_leds(3 downto 0) <= v_shift(3 downto 0); + elsif unsigned(v_shift(7 downto 4)) /= 0 then + s_led_line <= '1'; + s_leds(3 downto 0) <= not(v_shift(7 downto 4)); + end if; + else + -- button pressed, all LEDs red + s_led_line <= '1'; + s_leds(3 downto 0) <= "0000"; + end if; + end if; + end process; + + p_leds_gem : process(ps_clk_i) + variable v_buf, v_buf1 : std_logic_vector(gem_status_vector_i'left downto 0); + begin + if rising_edge(ps_clk_i) then + -- from PG047: bit-0 link status, bit-10/11 speed, bit-12 duplex + s_gem_leds(3 downto 0) <= v_buf1(12 downto 10) & v_buf1(0); + v_buf1 := v_buf; + end if; + end process p_leds_gem; + + -- select led outputs depending on generic + led_col_pl_o(3 downto 0) <= s_gem_leds(3 downto 0) when g_USE_GEM_LEDS = true else + s_leds(3 downto 0); + led_line_pl_o <= '0' when g_USE_GEM_LEDS = true else + s_led_line; + + --============================================================================= + -- AXI4-Lite slave for control from PS + --============================================================================= + axi4lite_slave : entity xil_pvtmisc.axi4lite_slave + generic map ( + C_S_AXI_DATA_WIDTH => g_S00_AXI_DATA_WIDTH, + C_S_AXI_ADDR_WIDTH => g_S00_AXI_ADDR_WIDTH, + g_MAXMEM => c_MEMMAX, + g_CLOCKMEM => '0', -- FIXME: for vhdl validation, '0' + g_IOMEM => c_FASECMEM) + port map ( + data_i => s_data, + data_rw_o => s_data_rw, + S_AXI_ACLK => s00_axi_aclk, + S_AXI_ARESETN => s00_axi_aresetn, + S_AXI_AWADDR => s00_axi_awaddr, + S_AXI_AWPROT => s00_axi_awprot, + S_AXI_AWVALID => s00_axi_awvalid, + S_AXI_AWREADY => s00_axi_awready, + S_AXI_WDATA => s00_axi_wdata, + S_AXI_WSTRB => s00_axi_wstrb, + S_AXI_WVALID => s00_axi_wvalid, + S_AXI_WREADY => s00_axi_wready, + S_AXI_BRESP => s00_axi_bresp, + S_AXI_BVALID => s00_axi_bvalid, + S_AXI_BREADY => s00_axi_bready, + S_AXI_ARADDR => s00_axi_araddr, + S_AXI_ARPROT => s00_axi_arprot, + S_AXI_ARVALID => s00_axi_arvalid, + S_AXI_ARREADY => s00_axi_arready, + S_AXI_RDATA => s00_axi_rdata, + S_AXI_RRESP => s00_axi_rresp, + S_AXI_RVALID => s00_axi_rvalid, + S_AXI_RREADY => s00_axi_rready); +end rtl; diff --git a/FASEC_prototype.srcs/tcl/copy_bitstream.tcl b/FASEC_prototype.srcs/tcl/copy_bitstream.tcl new file mode 100644 index 0000000000000000000000000000000000000000..6a0250db095fd9d7206bf148c93ce2ef520acca4 --- /dev/null +++ b/FASEC_prototype.srcs/tcl/copy_bitstream.tcl @@ -0,0 +1,5 @@ +# this script simply copies the generated bitstream to a general folder +set projd [get_property DIRECTORY [current_project]] +# seperate project gets created for every Vivado-action, hence projd doesn't point to the expected root! +cd $projd +file copy -force system_design_wrapper.bit ../../firmware/ diff --git a/FASEC_prototype.srcs/set_registers.tcl b/FASEC_prototype.srcs/tcl/set_registers.tcl similarity index 92% rename from FASEC_prototype.srcs/set_registers.tcl rename to FASEC_prototype.srcs/tcl/set_registers.tcl index a10063077a537cabbdae9a89d25c52d33b2a4779..646f870ad71e71627e94510c6cff46ad35f9f964 100644 --- a/FASEC_prototype.srcs/set_registers.tcl +++ b/FASEC_prototype.srcs/tcl/set_registers.tcl @@ -1,7 +1,7 @@ # this scripts queries some variables and put them # in a VHDL file for use during synthesis # start manually as follows: -# cd /home/pieter/Development/projects/FIDS/FASEC_prototype; source FASEC_prototype.srcs/set_registers.tcl; reset_run synth_1; launch_runs impl_1 -to_step write_bitstream -jobs 2 +# cd /home/pieter/Development/projects/FIDS/FASEC_prototype; source FASEC_prototype.srcs/tcl/set_registers.tcl; reset_run synth_1; launch_runs impl_1 -to_step write_bitstream -jobs 2 # launch_runs synth_1 -jobs 2 # xilinc tcl info: diff --git a/FASEC_prototype.xpr b/FASEC_prototype.xpr index 0ed09660ae3d5b08ba54b16e8be8653edb18d0cd..37729723a7f1a4c892c69024531af7493015a484 100644 --- a/FASEC_prototype.xpr +++ b/FASEC_prototype.xpr @@ -55,6 +55,9 @@ <Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> + <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="system_design_ooc.xdc"/> + <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="ip/system_design_auto_pc_1/system_design_auto_pc_1.xci"/> + <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="ip/system_design_auto_pc_0/system_design_auto_pc_0.xci"/> <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="ip/system_design_xlconstant_3_1/system_design_xlconstant_3_1.xci"/> <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="ip/system_design_xlconstant_3_2/system_design_xlconstant_3_2.xci"/> <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="hdl/system_design.vhd"/> @@ -78,6 +81,9 @@ <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="ip/system_design_processing_system7_0_axi_periph_3/system_design_processing_system7_0_axi_periph_3.xci"/> <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="ip/system_design_xbar_0/system_design_xbar_0.xci"/> <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="ip/system_design_axi_wb_i2c_master_1_0/system_design_axi_wb_i2c_master_1_0.xci"/> + <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="hdl/system_design.hwdef"/> + <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="hw_handoff/system_design.hwh"/> + <CompFileExtendedInfo CompFileName="system_design.bd" FileRelPathName="hw_handoff/system_design_bd.tcl"/> </File> <File Path="$PSRCDIR/sources_1/bd/system_design/hdl/system_design_wrapper.vhd"> <FileInfo> @@ -85,13 +91,6 @@ <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> - <File Path="$PSRCDIR/set_registers.tcl"> - <FileInfo> - <Attr Name="UsedIn" Val="synthesis"/> - <Attr Name="UsedIn" Val="implementation"/> - <Attr Name="UsedIn" Val="simulation"/> - </FileInfo> - </File> <Config> <Option Name="DesignMode" Val="RTL"/> <Option Name="TopModule" Val="system_design_wrapper"/> @@ -165,7 +164,7 @@ <Step Id="phys_opt_design"/> <Step Id="route_design"/> <Step Id="post_route_phys_opt_design"/> - <Step Id="write_bitstream"/> + <Step Id="write_bitstream" PostStepTclHook="$PSRCDIR/tcl/copy_bitstream.tcl"/> </Strategy> <GeneratedRun Dir="$PRUNDIR" File="gen_run.xml"/> </Run> diff --git a/firmware/system_design_wrapper.bit b/firmware/system_design_wrapper.bit new file mode 100644 index 0000000000000000000000000000000000000000..f763457a770986040524781092b51d45d99ae949 Binary files /dev/null and b/firmware/system_design_wrapper.bit differ