diff --git a/libraries/io/fpga_temp_sens/hdllib.cfg b/libraries/io/fpga_temp_sens/hdllib.cfg new file mode 100644 index 0000000000000000000000000000000000000000..09f6dc7d66f23538711bccdad36c67e2e3c579ae --- /dev/null +++ b/libraries/io/fpga_temp_sens/hdllib.cfg @@ -0,0 +1,12 @@ +hdl_lib_name = fpga_temp_sens +hdl_library_clause_name = fpga_temp_sens_lib +hdl_lib_uses_synth = common technology tech_fpga_temp_sens +hdl_lib_uses_sim = + +hdl_lib_technology = + +synth_files = + src/vhdl/fpga_temp_sens.vhd + +test_bench_files = + diff --git a/libraries/io/fpga_temp_sens/src/vhdl/fpga_temp_sens.vhd b/libraries/io/fpga_temp_sens/src/vhdl/fpga_temp_sens.vhd new file mode 100644 index 0000000000000000000000000000000000000000..af507d76a0a3feb880f35148e430a6a1235673ff --- /dev/null +++ b/libraries/io/fpga_temp_sens/src/vhdl/fpga_temp_sens.vhd @@ -0,0 +1,143 @@ +------------------------------------------------------------------------------- +-- +-- Copyright (C) 2015 +-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program 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 General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +------------------------------------------------------------------------------- + +-- Purpose: +-- Description: +-- + + +LIBRARY IEEE, common_lib, technology_lib, tech_fpga_temp_sens_lib; +USE IEEE.std_logic_1164.ALL; +USE IEEE.numeric_std.ALL; +USE common_lib.common_pkg.ALL; +USE common_lib.common_mem_pkg.ALL; +USE technology_lib.technology_select_pkg.ALL; +USE technology_lib.technology_pkg.ALL; +--USE tech_temp_sense_lib.tech_temp_sense_component_pkg.ALL; + + +ENTITY fpga_temp_sens IS + GENERIC ( + g_technology : NATURAL := c_tech_select_default; + g_sim : BOOLEAN + ); + PORT ( + -- MM interface + mm_rst : IN STD_LOGIC; + mm_clk : IN STD_LOGIC; + + start_sense : IN STD_LOGIC; + + reg_mosi : IN t_mem_mosi := c_mem_mosi_rst; + reg_miso : OUT t_mem_miso + ); +END fpga_temp_sens; + + +ARCHITECTURE str OF fpga_temp_sens IS + + CONSTANT c_mem_reg_adr_w : NATURAL := 1; + CONSTANT c_mem_reg_dat_w : NATURAL := 32; + CONSTANT c_mem_reg_nof_data : NATURAL := 1; + CONSTANT c_mem_reg_temp_data : t_c_mem := (c_mem_reg_rd_latency, c_mem_reg_adr_w , c_mem_reg_dat_w , c_mem_reg_nof_data, 'X'); + + SIGNAL mm_reg_temp_data : STD_LOGIC_VECTOR(c_mem_reg_dat_w-1 downto 0); + SIGNAL temp_data : STD_LOGIC_VECTOR(9 downto 0); + SIGNAL eoc : STD_LOGIC; + +BEGIN + + gen_tech_fpga_temp_sens: IF g_sim = FALSE GENERATE + u_tech_fpga_temp_sens : ENTITY tech_fpga_temp_sens_lib.tech_fpga_temp_sens + GENERIC MAP ( + g_technology => g_technology + ) + PORT MAP ( + corectl => start_sense, + eoc => eoc, --: OUT STD_LOGIC; + reset => mm_rst, + tempout => temp_data --: OUT STD_LOGIC_VECTOR(9 DOWNTO 0) + ); + END GENERATE; + + gen_no_tech_fpga_temp_sens: IF g_sim = TRUE GENERATE + temp_data <= RESIZE_UVEC(x"45",10); + END GENERATE; + + + +-- +---- leon: work this out +--ENTITY register32 IS PORT( +-- d : IN STD_LOGIC_VECTOR(31 DOWNTO 0); +-- ld : IN STD_LOGIC; -- load/enable. +-- clr : IN STD_LOGIC; -- async. clear. +-- clk : IN STD_LOGIC; -- clock. +-- q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) -- output +--); +--END register32; +-- +-- +-- +-- process(clk, clr) +-- begin +-- if clr = '1' then +-- q <= x"00000000"; +-- elsif rising_edge(clk) then +-- if ld = '1' then +-- q <= d; +-- end if; +-- end if; +-- end process; +---- leon: work this out +-- + + + mm_reg_temp_data <= RESIZE_UVEC(temp_data,c_mem_reg_dat_w); + + + u_reg_map : ENTITY common_lib.common_reg_r_w_dc + GENERIC MAP ( + g_cross_clock_domain => FALSE, + g_in_new_latency => 0, + g_readback => FALSE, + g_reg => c_mem_reg_temp_data, + g_init_reg => (OTHERS => '0') + ) + PORT MAP ( + -- Clocks and reset + mm_rst => mm_rst, + mm_clk => mm_clk, + st_rst => mm_rst, + st_clk => mm_clk, + + -- Memory Mapped Slave in mm_clk domain + sla_in => reg_mosi, + sla_out => reg_miso, + + -- MM registers in st_clk domain + reg_wr_arr => OPEN, + reg_rd_arr => OPEN, + in_new => '1', + in_reg => mm_reg_temp_data, + out_reg => OPEN + ); +END str;