Ignore:
Timestamp:
06/09/11 19:35:20 (13 years ago)
Author:
neise
Message:
 
Location:
firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/data_generator.vhd

    r10883 r10957  
    389389                when WRITE_CHANNEL_ID =>    -- write DRS and Channel IDs
    390390                        state_sig <=  X"1B";
    391                         data_out <=             conv_std_logic_vector(3,12) & conv_std_logic_vector(channel_id,4) &
     391                        data_out <=             conv_std_logic_vector(3,12) & conv_std_logic_vector(channel_id,4) & 
    392392                                                        conv_std_logic_vector(2,12) & conv_std_logic_vector(channel_id,4) &
    393393                                                        conv_std_logic_vector(1,12) & conv_std_logic_vector(channel_id,4) &
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/fad_board.ucf

    r10883 r10957  
    8383#NET W_BRDY<0> LOC  = AB26 | IOSTANDARD=LVCMOS33;       #ok
    8484# Testpoint near W5300
    85 #NET W_T<3> LOC  = R19 | IOSTANDARD=LVCMOS33;           #ok
    86 #NET W_T<2> LOC  = N21 | IOSTANDARD=LVCMOS33;           #ok
    87 #NET W_T<1> LOC  = M21 | IOSTANDARD=LVCMOS33;           #ok
    88 #NET W_T<0> LOC  = K21 | IOSTANDARD=LVCMOS33;           #ok
     85NET W_T<3> LOC  = R19 | IOSTANDARD=LVCMOS33;            #ok
     86NET W_T<2> LOC  = N21 | IOSTANDARD=LVCMOS33;            #ok
     87NET W_T<1> LOC  = M21 | IOSTANDARD=LVCMOS33;            #ok
     88NET W_T<0> LOC  = K21 | IOSTANDARD=LVCMOS33;            #ok
    8989
    9090# Platform Flash - serial connection
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/fad_board_struct.vhd

    r10908 r10957  
    22--
    33-- Created:
    4 --          by - dneise.UNKNOWN (E5B-LABOR6)
    5 --          at - 14:33:27 03.06.2011
    6 --
    7 -- Generated by Mentor Graphics' HDL Designer(TM) 2009.2 (Build 10)
     4--          by - daqct3.UNKNOWN (IHP110)
     5--          at - 16:56:38 09.06.2011
     6--
     7-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
    88--
    99LIBRARY ieee;
     
    3030      W_INT      : IN     std_logic;
    3131      X_50M      : IN     STD_LOGIC;
    32       A0_T       : OUT    std_logic_vector (7 DOWNTO 0) := (others => '0');
    33       A1_T       : OUT    std_logic_vector (7 DOWNTO 0) := (OTHERS => '0');
     32      A0_T       : OUT    std_logic_vector (7 DOWNTO 0)   := (others => '0');
     33      A1_T       : OUT    std_logic_vector (7 DOWNTO 0)   := (OTHERS => '0');
    3434      AMBER_LED  : OUT    std_logic;
    3535      A_CLK      : OUT    std_logic_vector (3 DOWNTO 0);
    3636      DAC_CS     : OUT    std_logic;
    37       DENABLE    : OUT    std_logic                     := '0';
    38       DSRCLK     : OUT    std_logic_vector (3 DOWNTO 0) := (others => '0');
    39       DWRITE     : OUT    std_logic                     := '0';
    40       D_A        : OUT    std_logic_vector (3 DOWNTO 0) := (others => '0');
    41       D_T        : OUT    std_logic_vector (7 DOWNTO 0) := (OTHERS => '0');
    42       D_T2       : OUT    std_logic_vector (1 DOWNTO 0) := (others => '0');
     37      DENABLE    : OUT    std_logic                       := '0';
     38      DSRCLK     : OUT    std_logic_vector (3 DOWNTO 0)   := (others => '0');
     39      DWRITE     : OUT    std_logic                       := '0';
     40      D_A        : OUT    std_logic_vector (3 DOWNTO 0)   := (others => '0');
     41      D_T        : OUT    std_logic_vector (7 DOWNTO 0)   := (OTHERS => '0');
     42      D_T2       : OUT    std_logic_vector (1 DOWNTO 0)   := (others => '0');
    4343      EE_CS      : OUT    std_logic;
    4444      GREEN_LED  : OUT    std_logic;
    45       MOSI       : OUT    std_logic                     := '0';
     45      MOSI       : OUT    std_logic                       := '0';
    4646      OE_ADC     : OUT    STD_LOGIC;
    4747      RED_LED    : OUT    std_logic;
     
    5252      RS485_E_DO : OUT    std_logic;
    5353      RS485_E_RE : OUT    std_logic;
    54       RSRLOAD    : OUT    std_logic                     := '0';
    55       SRIN       : OUT    std_logic                     := '0';
     54      RSRLOAD    : OUT    std_logic                       := '0';
     55      SRIN       : OUT    std_logic                       := '0';
    5656      S_CLK      : OUT    std_logic;
    5757      TCS        : OUT    std_logic_vector (3 DOWNTO 0);
    58       TRG_V      : OUT    std_logic                     := '0';
     58      TRG_V      : OUT    std_logic                       := '0';
    5959      W_A        : OUT    std_logic_vector (9 DOWNTO 0);
    60       W_CS       : OUT    std_logic                     := '1';
    61       W_RD       : OUT    std_logic                     := '1';
    62       W_RES      : OUT    std_logic                     := '1';
    63       W_WR       : OUT    std_logic                     := '1';
     60      W_CS       : OUT    std_logic                       := '1';
     61      W_RD       : OUT    std_logic                       := '1';
     62      W_RES      : OUT    std_logic                       := '1';
     63      W_T        : OUT    std_logic_vector ( 3 DOWNTO 0 ) := (others => '0');
     64      W_WR       : OUT    std_logic                       := '1';
    6465      MISO       : INOUT  std_logic;
    6566      W_D        : INOUT  std_logic_vector (15 DOWNTO 0)
     
    7475--
    7576-- Created:
    76 --          by - dneise.UNKNOWN (E5B-LABOR6)
    77 --          at - 14:33:27 03.06.2011
    78 --
    79 -- Generated by Mentor Graphics' HDL Designer(TM) 2009.2 (Build 10)
     77--          by - daqct3.UNKNOWN (IHP110)
     78--          at - 16:56:38 09.06.2011
     79--
     80-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
    8081--
    8182LIBRARY ieee;
     
    106107   SIGNAL counter_result        : std_logic_vector(11 DOWNTO 0) := (others => '0');
    107108   SIGNAL crate_id              : std_logic_vector(1 DOWNTO 0);
     109   SIGNAL dac_cs1               : std_logic;
    108110   SIGNAL debug_data_ram_empty  : std_logic;
    109111   SIGNAL debug_data_valid      : std_logic;
    110112   SIGNAL led                   : std_logic_vector(7 DOWNTO 0)  := (OTHERS => '0');
    111113   SIGNAL mem_manager_state     : std_logic_vector(3 DOWNTO 0);                        -- state is encoded here ... useful for debugging.
     114   SIGNAL mosi1                 : std_logic;
     115   SIGNAL sclk                  : std_logic;
     116   SIGNAL sensor_cs             : std_logic_vector(3 DOWNTO 0);
    112117   SIGNAL socket_tx_free_out    : std_logic_vector(16 DOWNTO 0);                       -- 17bit value .. that's true
    113118   SIGNAL w5300_state           : std_logic_vector(7 DOWNTO 0);                        -- state is encoded here ... useful for debugging.
     119
     120   -- Implicit buffer signal declarations
     121   SIGNAL TRG_V_internal : std_logic;
    114122
    115123
     
    209217   --D_T <= (others => '0');
    210218   D_T <= w5300_state;
    211    D_T2(0) <= debug_data_valid;
    212    --D_T2(1) <= debug_data_ram_empty;
    213    D_T2(1) <= socket_tx_free_out(16);
     219   --D_T2(0) <= debug_data_valid;
     220   D_T2(0) <= debug_data_ram_empty;
     221   --D_T2(1) <= socket_tx_free_out(16);
     222   
     223   D_T2(1) <= TRG_V_internal;
    214224   --D_T2 <= ( others => '0' );
    215225   
    216226   
     227   A0_T <= (others => '0');
     228   A1_T <= (others => '1');
    217229   
    218230   
    219231   --A0_T <= DG_state;
    220    --A1_T(3 downto 0) <= mem_manager_state;
     232   W_T(3 downto 0) <= mem_manager_state;
    221233   --A1_T(7 downto 4) <= "1100";
    222234   
    223    A0_T <= socket_tx_free_out(7 downto 0);
    224    A1_T <= socket_tx_free_out(15 downto 8);
     235   --A0_T <= socket_tx_free_out(7 downto 0);
     236   --A0_T <= spi_debug_16bit(7 downto 0);
     237   --A1_T <= spi_debug_16bit(15 downto 8);
     238   --A1_T <= socket_tx_free_out(15 downto 8);
     239   
     240   -- check SPI interfac
     241   --A1_T(7) <= sclk;
     242   --A1_T(6) <= MISO;
     243   --A1_T(5) <= mosi1;
     244   
     245   --A1_T(4) <= dac_cs1;
     246   --A1_T( 3 downto 0) <= sensor_cs;
     247   
    225248   
    226249   --D_T(3 downto 0) <=  counter_result ( 11 downto 8);
     
    242265   EE_CS <= '1';
    243266
     267
     268   -- ModuleWare code(v1.9) for instance 'I0' of 'assignment'
     269   DAC_CS <= dac_cs1;
     270
     271   -- ModuleWare code(v1.9) for instance 'I1' of 'assignment'
     272   TCS <= sensor_cs;
     273
     274   -- ModuleWare code(v1.9) for instance 'I2' of 'assignment'
     275   S_CLK <= sclk;
     276
     277   -- ModuleWare code(v1.9) for instance 'I3' of 'assignment'
     278   MOSI <= mosi1;
    244279
    245280   -- Instance port mappings.
     
    279314         amber                 => AMBER_LED,
    280315         counter_result        => counter_result,
    281          dac_cs                => DAC_CS,
     316         dac_cs                => dac_cs1,
    282317         debug_data_ram_empty  => debug_data_ram_empty,
    283318         debug_data_valid      => debug_data_valid,
     
    288323         led                   => led,
    289324         mem_manager_state     => mem_manager_state,
    290          mosi                  => MOSI,
     325         mosi                  => mosi1,
    291326         red                   => GREEN_LED,
    292          sclk                  => S_CLK,
    293          sensor_cs             => TCS,
     327         sclk                  => sclk,
     328         sensor_cs             => sensor_cs,
    294329         socket_tx_free_out    => socket_tx_free_out,
    295          trigger_veto          => TRG_V,
     330         trigger_veto          => TRG_V_internal,
    296331         w5300_state           => w5300_state,
    297332         wiz_addr              => W_A,
     
    304339      );
    305340
     341   -- Implicit buffered output assignments
     342   TRG_V <= TRG_V_internal;
     343
    306344END struct;
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/fad_definitions.vhd

    r10908 r10957  
    195195-- for W5300 modul2
    196196constant W5300_RAM_ADDR_WIDTH : integer := 17;
    197 constant TX_FIFO_MAX_FREE : std_logic_vector(16 downto 0) := conv_std_logic_vector(15360 ,16);
     197constant TX_FIFO_MAX_FREE : std_logic_vector(16 downto 0) := conv_std_logic_vector(15360 ,17);
    198198
    199199-- not needed
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/fad_main_struct.vhd

    r10908 r10957  
    22--
    33-- Created:
    4 --          by - dneise.UNKNOWN (E5B-LABOR6)
    5 --          at - 14:33:25 03.06.2011
     4--          by - daqct3.UNKNOWN (IHP110)
     5--          at - 16:56:36 09.06.2011
    66--
    7 -- Generated by Mentor Graphics' HDL Designer(TM) 2009.2 (Build 10)
     7-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
    88--
    99LIBRARY ieee;
     
    8282--
    8383-- Created:
    84 --          by - dneise.UNKNOWN (E5B-LABOR6)
    85 --          at - 14:33:26 03.06.2011
     84--          by - daqct3.UNKNOWN (IHP110)
     85--          at - 16:56:37 09.06.2011
    8686--
    87 -- Generated by Mentor Graphics' HDL Designer(TM) 2009.2 (Build 10)
     87-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
    8888--
    8989library ieee;
     
    100100USE IEEE.std_logic_signed.all;
    101101USE fact_fad_lib.fad_rs485_constants.all;
     102LIBRARY hds_package_library;
     103USE hds_package_library.random_generators.all;
    102104
    103105LIBRARY FACT_FAD_lib;
     
    144146   SIGNAL dout3                        : STD_LOGIC;
    145147   SIGNAL dout4                        : STD_LOGIC;
     148   SIGNAL dout5                        : std_logic;
    146149   SIGNAL drs_clk_en                   : std_logic                                    := '0';
    147150   SIGNAL drs_read_s_cell              : std_logic                                    := '0';
     
    199202   SIGNAL trigger_or_s_trigger         : std_logic;
    200203   SIGNAL trigger_out                  : std_logic;
     204   SIGNAL trigger_veto1                : std_logic                                    := '1';
    201205   SIGNAL wiz_number_of_channels       : std_logic_vector(3 DOWNTO 0)                 := (others => '0');
    202206   SIGNAL wiz_ram_start_addr           : std_logic_vector(RAMADDRWIDTH64b+1 DOWNTO 0) := (others => '0');
     
    626630   din1 <= NOT(alarm_refclk_too_low_internal);
    627631
     632   -- ModuleWare code(v1.9) for instance 'inverter_2' of 'inv'
     633   dout5 <= NOT(ram_write_ea);
     634
    628635   -- ModuleWare code(v1.9) for instance 'U_2' of 'or'
    629636   dout4 <= dout OR I_really_want_dwrite;
     
    631638   -- ModuleWare code(v1.9) for instance 'or_1' of 'or'
    632639   s_trigger_or_cont_trigger <= s_trigger OR cont_trigger;
     640
     641   -- ModuleWare code(v1.9) for instance 'or_2' of 'or'
     642   trigger_veto <= trigger_veto1 OR dout5;
    633643
    634644   -- ModuleWare code(v1.9) for instance 'or_5' of 'or'
     
    780790         drs_s_cell_array           => drs_s_cell_array,
    781791         drs_readout_started        => drs_readout_started,
    782          trigger_veto               => trigger_veto
     792         trigger_veto               => trigger_veto1
    783793      );
    784794   dna_gen_instance : dna_gen
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/memory_manager_2.vhd

    r10889 r10957  
    360360                                        wiz_write_header <= '0';
    361361                                end if;
     362                               
    362363                                if (package_index = (number_of_packages - 1)) then
    363364                                        -- last package -> write end-flag
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/spi_controller_beha.vhd

    r10729 r10957  
    1818      miso         : INOUT  std_logic := 'Z';
    1919      mosi         : OUT    std_logic := '0';
     20          dac_cs       : OUT    std_logic := '1';
     21      sensor_cs    : OUT    std_logic_vector (3 DOWNTO 0) := (others => '1');
     22         
    2023      dac_id       : IN     std_logic_vector (2 DOWNTO 0);
    2124      sensor_id    : IN     std_logic_vector (1 downto 0);
    2225      data         : INOUT  std_logic_vector (15 DOWNTO 0) := (others => 'Z');
    23       dac_cs       : OUT    std_logic := '1';
    24       sensor_cs    : OUT    std_logic_vector (3 DOWNTO 0) := (others => '1');
     26          measured_temp_data : out std_logic_vector (15 DOWNTO 0) := (others => '0');
     27     
    2528      dac_start    : IN     std_logic;
    2629      dac_ready    : OUT    std_logic := '0';
    2730      sensor_start : IN     std_logic;
    28       sensor_valid : OUT    std_logic := '0'
     31      sensor_valid : OUT    std_logic := '0';
     32          spi_channel_ready : OUT std_logic := '1'
    2933   );
    3034END spi_controller ;
     
    5862      case spi_state is
    5963        when SPI_IDLE =>
     64                        spi_channel_ready <= '1';
    6065          if (dac_start_sr(1) = '1') then
     66                        spi_channel_ready <= '0';
    6167            dac_ready <= '0';
    6268            spi_state <= SPI_LOAD_COMMAND;
    6369          elsif (sensor_start_sr(1) = '1') then
     70                        spi_channel_ready <= '0';
    6471            sensor_valid <= '0';
    6572            spi_state <= SPI_LOAD_COMMAND;
     
    6875        when SPI_LOAD_COMMAND =>
    6976          spi_cycle_cnt <= 0;
     77                        spi_channel_ready <= '0';
     78                       
    7079            if (sensor_start_sr(1) = '1') then
    71               shift_reg <= X"C1" & X"0000";   -- command: Temperature register read
     80                               
     81              --shift_reg <= X"C1" & X"0000";   -- command: Temperature register read
     82                          shift_reg <= X"C1" & "ZZZZZZZZZZZZZZZZ";   -- command: Temperature register read
    7283              spi_state <= SPI_GET_TEMP;
    7384            elsif (dac_start_sr(1) = '1') then
     
    7889        -- start temperature sensor read 
    7990        when SPI_GET_TEMP =>
    80           if (spi_cycle_cnt < 24) then -- must be on more cause MAX6662 provides data on falling edge
     91          if (spi_cycle_cnt < 24) then -- must be one more cause MAX6662 provides data on falling edge
    8192            sensor_cs(conv_integer(sensor_id)) <= '0';
    8293            sensor_valid <= '0';
     
    8798            end if;
    8899          else
    89             data <= data_reg;             
     100            data <= data_reg;
     101                        measured_temp_data <= data_reg;
    90102            sensor_valid <= '1';
    91103            spi_state <= SPI_IDLE;
    92104          end if;
    93        
     105               
    94106        -- start loading DACs
    95107       when SPI_LOAD_DAC =>
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/spi_distributor_beha.vhd

    r10738 r10957  
    2626
    2727  PORT(
    28     clk                                         : IN                    std_logic; -- 50MHz
     28    clk                                         : IN                    std_logic;
     29       
     30        -- interface nach aussen
    2931    config_start                        : IN                    std_logic;
    3032    config_ready                        : OUT                   std_logic := '1';
     33   
     34        dac_array                               : IN                    dac_array_type;
     35        current_dac_array               : OUT                   dac_array_type := ( others => 0);
     36        sensor_array                    : OUT                   sensor_array_type;
    3137    sensor_valid                        : OUT                   std_logic := '0';
    32     dac_array                           : IN                    dac_array_type;
    33         current_dac_array               : OUT                   dac_array_type := ( others => 0);
    34     sensor_array                        : OUT                   sensor_array_type;
     38   
     39       
     40        sensor_read_start               : OUT                   std_logic := '0';
     41    sensor_read_valid           : IN                    std_logic;
    3542    dac_config_start            : OUT                   std_logic := '0';
    3643    dac_config_ready            : IN                    std_logic;
    37     sclk_enable_override        : OUT                   std_logic := '0';
    38     sensor_read_start           : OUT                   std_logic := '0';
    39     sensor_read_valid           : IN                    std_logic;
     44        spi_channel_ready               : IN                    std_logic;
     45   
     46        sclk_enable_override    : OUT                   std_logic := '0';
    4047    dac_id                                      : OUT                   std_logic_vector(2 downto 0) := (others => '0');
    4148    sensor_id                           : OUT                   std_logic_vector(1 downto 0) := (others => '0');
    42     data                                        : INOUT                 std_logic_vector(15 downto 0) := (others => 'Z')
     49    data                                        : INOUT                 std_logic_vector(15 downto 0) := (others => 'Z');
     50        measured_temp_data              : IN                    std_logic_vector(15 downto 0)
    4351  );
    4452END ENTITY spi_distributor;
     
    4654ARCHITECTURE beha OF spi_distributor IS
    4755
    48   type TYPE_SPI_DISTRIBUTION_STATE is (INIT, IDLE, READ_SENSOR, CONFIG_DAC);
     56  type TYPE_SPI_DISTRIBUTION_STATE is (INIT, IDLE,
     57                PRE_READ_SENSOR,
     58                SENSOR_READ_START_ACK,
     59                READ_SENSOR,
     60                PRE_CONFIG_DAC,
     61                DAC_CONFIG_START_ACK,
     62                CONFIG_DAC);
    4963   
    5064  signal spi_distr_state       : TYPE_SPI_DISTRIBUTION_STATE := INIT;
     
    6175  signal config_start_sr                : std_logic_vector (1 downto 0) := "00";
    6276 
     77 
     78  signal sensor_read_valid_sr : std_logic_vector (1 downto 0) := "00";
     79  signal dac_config_ready_sr :  std_logic_vector (1 downto 0) := "00";
     80  signal spi_channel_ready_sr :  std_logic_vector (1 downto 0) := "00";
     81 
    6382BEGIN
    6483  sclk_enable_override <= sclk_enable_override_sig;
     
    6988   
    7089    if rising_edge(clk) then
     90                sensor_read_valid_sr <= sensor_read_valid_sr(0) & sensor_read_valid;
     91                dac_config_ready_sr <= dac_config_ready_sr(0) & dac_config_ready;
     92                spi_channel_ready_sr <= spi_channel_ready_sr(0) & spi_channel_ready;
    7193                -- synch in
    7294                config_start_sr <= config_start_sr(0) & config_start;
     
    7799          data <= (others => 'Z');
    78100          int_sensor_valid <= '0';
    79           spi_distr_state <= READ_SENSOR;
     101          spi_distr_state <= PRE_READ_SENSOR;
     102                 
    80103        when IDLE =>
    81104                        sclk_enable_override_sig <= '0';
     
    87110         -- start DAC configuration
    88111          if (config_start_sr(1) = '1' AND int_sensor_valid = '1') then
    89             config_ready <= '0';
     112                        internal_dac_array <= dac_array;
     113            spi_distr_state <= PRE_CONFIG_DAC;
     114          -- start temperature sensor reading
     115          elsif (dac_config_ready <= '1' AND int_sensor_read_start = '1' ) then
     116                        spi_distr_state <= PRE_READ_SENSOR;
     117          end if;
     118               
     119                when PRE_READ_SENSOR =>
     120                       
     121            int_sensor_valid <= '0';
     122            sensor_read_start <= '1';
     123            sensor_id <= conv_std_logic_vector(sensor_id_cnt, sensor_id'length);
     124                        spi_distr_state <= SENSOR_READ_START_ACK;
     125               
     126                when SENSOR_READ_START_ACK =>
     127                        if (spi_channel_ready_sr(1) = '0') then
     128                                sensor_read_start <= '0';
     129                                spi_distr_state <= READ_SENSOR;
     130                        end if;
     131           
     132                when PRE_CONFIG_DAC =>
     133                        config_ready <= '0';
    90134                        sclk_enable_override_sig <= '1';
    91135            dac_config_start <= '1';
    92136            dac_id <= conv_std_logic_vector(dac_id_cnt, dac_id'length);
    93             data <= conv_std_logic_vector(dac_array(dac_id_cnt),data'length);
    94                         internal_dac_array <= dac_array;
    95             spi_distr_state <= CONFIG_DAC;
    96           -- start temperature sensor reading
    97           elsif (dac_config_ready <= '1' AND int_sensor_read_start = '1') then
    98             int_sensor_valid <= '0';
    99             sensor_read_start <= '1';
    100             sensor_id <= conv_std_logic_vector(sensor_id_cnt, sensor_id'length);
    101             spi_distr_state <= READ_SENSOR;
    102           end if;
    103        
     137            data <= conv_std_logic_vector(internal_dac_array(dac_id_cnt),data'length);
     138            spi_distr_state <= DAC_CONFIG_START_ACK;
     139                       
     140                       
     141                when DAC_CONFIG_START_ACK =>
     142                        dac_id <= conv_std_logic_vector(dac_id_cnt, dac_id'length);
     143            data <= conv_std_logic_vector(internal_dac_array(dac_id_cnt),data'length);
     144                       
     145                        if (spi_channel_ready_sr(1) = '0') then
     146                                dac_config_start <= '0';
     147                                spi_distr_state <= CONFIG_DAC;
     148                        end if;
     149           
    104150        -- sensor reading   
    105151        when READ_SENSOR =>
    106           sensor_read_start <= '1';
    107           sensor_id <= conv_std_logic_vector(sensor_id_cnt, sensor_id'length);
    108           if (sensor_read_valid = '1') then
    109             int_sensor_array(sensor_id_cnt) <= conv_integer(data);
    110             sensor_read_start <= '0';
    111             if (sensor_id_cnt < 3) then
    112               sensor_id_cnt <= sensor_id_cnt + 1;
    113               sensor_read_start <= '1';
    114               spi_distr_state <= READ_SENSOR;
    115             else
    116               sensor_id_cnt <= 0;
    117               sensor_valid <= '0';
    118               int_sensor_valid <= '1';
    119               spi_distr_state <= IDLE;
    120             end if;
    121           end if;
    122          
     152
     153                        if (sensor_read_valid_sr(1) = '1') then
     154                                int_sensor_array(sensor_id_cnt) <= conv_integer(measured_temp_data);
     155                                --sensor_read_start <= '0';
     156                                if (sensor_id_cnt < 3) then
     157                                        sensor_id_cnt <= sensor_id_cnt + 1;
     158                                        --sensor_read_start <= '1';
     159                                        spi_distr_state <= PRE_READ_SENSOR;
     160                                else
     161                                        sensor_id_cnt <= 0;
     162                                        sensor_valid <= '0';
     163                                        int_sensor_valid <= '1';
     164                                        spi_distr_state <= IDLE;
     165                                end if;
     166                        end if;
     167       
     168               
     169                 
     170               
    123171        -- DAC configuration
    124172        when CONFIG_DAC =>
    125           dac_config_start <= '1';
    126           dac_id <= conv_std_logic_vector(dac_id_cnt, dac_id'length);
    127           data <= conv_std_logic_vector(internal_dac_array(dac_id_cnt),data'length);
    128           if (dac_config_ready = '1') then
    129             dac_config_start <= '0';
     173          --dac_config_start <= '1';
     174          --dac_id <= conv_std_logic_vector(dac_id_cnt, dac_id'length);
     175          --data <= conv_std_logic_vector(internal_dac_array(dac_id_cnt),data'length);
     176          --if (dac_config_ready = '1') then
     177                  if (spi_channel_ready_sr(1) = '1') then
     178            --dac_config_start <= '0';
    130179            if (dac_id_cnt < 7) then
    131180              dac_id_cnt <= dac_id_cnt + 1;
    132               dac_config_start <= '1';
    133               spi_distr_state <= CONFIG_DAC;
     181              --dac_config_start <= '1';
     182              spi_distr_state <= PRE_CONFIG_DAC;
    134183            else
    135184              dac_id_cnt <= 0;
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/spi_interface_struct.vhd

    r10900 r10957  
    22--
    33-- Created:
    4 --          by - dneise.UNKNOWN (E5B-LABOR6)
    5 --          at - 13:20:48 01.06.2011
    6 --
    7 -- Generated by Mentor Graphics' HDL Designer(TM) 2009.2 (Build 10)
     4--          by - daqct3.UNKNOWN (IHP110)
     5--          at - 16:56:36 09.06.2011
     6--
     7-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
    88--
    99LIBRARY ieee;
     
    3838--
    3939-- Created:
    40 --          by - dneise.UNKNOWN (E5B-LABOR6)
    41 --          at - 13:20:48 01.06.2011
    42 --
    43 -- Generated by Mentor Graphics' HDL Designer(TM) 2009.2 (Build 10)
     40--          by - daqct3.UNKNOWN (IHP110)
     41--          at - 16:56:36 09.06.2011
     42--
     43-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
    4444--
    4545LIBRARY ieee;
     
    5959   -- Internal signal declarations
    6060   SIGNAL T_sensor_start       : std_logic;
    61    SIGNAL clk_2Mhz             : std_logic := '0';
     61   SIGNAL clk_2Mhz             : std_logic                     := '0';
    6262   SIGNAL dac_config_ready     : std_logic;
    6363   SIGNAL dac_config_start     : std_logic;
    6464   SIGNAL dac_id               : std_logic_vector(2 DOWNTO 0);
    6565   SIGNAL data                 : std_logic_vector(15 DOWNTO 0);
    66    SIGNAL sclk_enable_override : std_logic := '0';
    67    SIGNAL sclk_enable_sig      : std_logic := '0';
     66   SIGNAL measured_temp_data   : std_logic_vector(15 DOWNTO 0) := (others => '0');
     67   SIGNAL sclk_enable_override : std_logic                     := '0';
     68   SIGNAL sclk_enable_sig      : std_logic                     := '0';
    6869   SIGNAL sensor_id            : std_logic_vector(1 DOWNTO 0);
    6970   SIGNAL sensor_start         : std_logic;
    7071   SIGNAL sensor_valid         : std_logic;
     72   SIGNAL spi_channel_ready    : std_logic                     := '1';
    7173
    7274   -- Implicit buffer signal declarations
     
    8688   COMPONENT spi_controller
    8789   PORT (
    88       clk          : IN     std_logic;
    89       dac_id       : IN     std_logic_vector (2 DOWNTO 0);
    90       dac_start    : IN     std_logic;
    91       sensor_id    : IN     std_logic_vector (1 DOWNTO 0);
    92       sensor_start : IN     std_logic;
    93       dac_cs       : OUT    std_logic                      := '1';
    94       dac_ready    : OUT    std_logic                      := '0';
    95       mosi         : OUT    std_logic                      := '0';
    96       sensor_cs    : OUT    std_logic_vector (3 DOWNTO 0)  := (others => '1');
    97       sensor_valid : OUT    std_logic                      := '0';
    98       data         : INOUT  std_logic_vector (15 DOWNTO 0) := (others => 'Z');
    99       miso         : INOUT  std_logic                      := 'Z'
     90      clk                : IN     std_logic;
     91      dac_id             : IN     std_logic_vector (2 DOWNTO 0);
     92      dac_start          : IN     std_logic;
     93      sensor_id          : IN     std_logic_vector (1 DOWNTO 0);
     94      sensor_start       : IN     std_logic;
     95      dac_cs             : OUT    std_logic                      := '1';
     96      dac_ready          : OUT    std_logic                      := '0';
     97      measured_temp_data : OUT    std_logic_vector (15 DOWNTO 0) := (others => '0');
     98      mosi               : OUT    std_logic                      := '0';
     99      sensor_cs          : OUT    std_logic_vector (3 DOWNTO 0)  := (others => '1');
     100      sensor_valid       : OUT    std_logic                      := '0';
     101      spi_channel_ready  : OUT    std_logic                      := '1';
     102      data               : INOUT  std_logic_vector (15 DOWNTO 0) := (others => 'Z');
     103      miso               : INOUT  std_logic                      := 'Z'
    100104   );
    101105   END COMPONENT;
     
    109113      dac_array            : IN     dac_array_type;
    110114      dac_config_ready     : IN     std_logic;
     115      measured_temp_data   : IN     std_logic_vector (15 DOWNTO 0);
    111116      sensor_read_valid    : IN     std_logic;
    112       config_ready         : OUT    std_logic                      := '0';
     117      spi_channel_ready    : IN     std_logic;
     118      config_ready         : OUT    std_logic                      := '1';
    113119      current_dac_array    : OUT    dac_array_type                 := ( others => 0);
    114120      dac_config_start     : OUT    std_logic                      := '0';
     
    158164   I_spi_controller : spi_controller
    159165      PORT MAP (
    160          clk          => sclk_internal,
    161          miso         => miso,
    162          mosi         => mosi,
    163          dac_id       => dac_id,
    164          sensor_id    => sensor_id,
    165          data         => data,
    166          dac_cs       => dac_cs,
    167          sensor_cs    => sensor_cs,
    168          dac_start    => dac_config_start,
    169          dac_ready    => dac_config_ready,
    170          sensor_start => sensor_start,
    171          sensor_valid => sensor_valid
     166         clk                => sclk_internal,
     167         miso               => miso,
     168         mosi               => mosi,
     169         dac_cs             => dac_cs,
     170         sensor_cs          => sensor_cs,
     171         dac_id             => dac_id,
     172         sensor_id          => sensor_id,
     173         data               => data,
     174         measured_temp_data => measured_temp_data,
     175         dac_start          => dac_config_start,
     176         dac_ready          => dac_config_ready,
     177         sensor_start       => sensor_start,
     178         sensor_valid       => sensor_valid,
     179         spi_channel_ready  => spi_channel_ready
    172180      );
    173181   I_spi_distributor : spi_distributor
     
    179187         config_start         => config_start,
    180188         config_ready         => config_ready,
    181          sensor_valid         => sensor_ready,
    182189         dac_array            => dac_array,
    183190         current_dac_array    => current_dac_array,
    184191         sensor_array         => sensor_array,
     192         sensor_valid         => sensor_ready,
     193         sensor_read_start    => sensor_start,
     194         sensor_read_valid    => sensor_valid,
    185195         dac_config_start     => dac_config_start,
    186196         dac_config_ready     => dac_config_ready,
     197         spi_channel_ready    => spi_channel_ready,
    187198         sclk_enable_override => sclk_enable_override,
    188          sensor_read_start    => sensor_start,
    189          sensor_read_valid    => sensor_valid,
    190199         dac_id               => dac_id,
    191200         sensor_id            => sensor_id,
    192          data                 => data
     201         data                 => data,
     202         measured_temp_data   => measured_temp_data
    193203      );
    194204
  • firmware/FAD/FACT_FAD_20MHz_VAR_PS/FACT_FAD_lib/hdl/w5300_modul.vhd

    r10908 r10957  
    124124        WORKAROUND_CHECK_FIFO_SPACE_01, WORKAROUND_CHECK_FIFO_SPACE_02, WORKAROUND_CHECK_FIFO_SPACE_03, WORKAROUND_CHECK_FIFO_SPACE_04,
    125125        WR_05a, WR_05b, WR_06, WR_07,
    126         WR_ACK, WR_WAIT_FOR_ACK,
     126        WR_ACK, WR_WAIT_FOR_ACK, WAIT_FOR_DATA_VALID_HIGH_AGAIN,
    127127        WR_FIFO, WR_FIFO1, WR_ADC, WR_ADC1, WR_ADC2,
    128128        WR_ENDFLAG, WR_ENDFLAG1, WR_ENDFLAG2, WR_ENDFLAG3
     
    196196signal local_fifo_channels : std_logic_vector (3 downto 0);
    197197
    198 signal wait_100ns_sig : std_logic_vector (2 downto 0) := "000";
    199 
    200 signal config_addr : integer range 0 to 44;
    201 type config_data_type is array (0 to 46) of std_logic_vector(15 downto 0);
     198signal wait_100ns_sig : std_logic_vector (5 downto 0) := "000000";
     199
     200signal config_addr : integer range 0 to 47;
     201type config_data_type is array (0 to 47) of std_logic_vector(15 downto 0);
    202202signal config_setting : config_data_type := (
    203203--              X"000A", X"000A", X"000A", X"000A", X"000A", X"000A", X"000A", X"000A", X"000A",                --<<-- ROIs = 10 TESTING ONLY
     
    213213                X"61A8", X"0000", X"0000", X"0000", X"7080", X"7080", X"7080", X"7080",                                  --<<-- DACs
    214214                X"0000",
    215                 X"0000", X"0000"  -- MSword // LSword
     215                X"0000", X"0000",  -- MSword // LSword
     216                X"0000"                                         -- this is a dummy address; this address is used only, if the user sent an invalid address within a WRITE command
    216217                );
    217218               
     
    303304-- output config settings as DAC and ROI arrays.
    304305state <= state_sig;
    305 debug_data_ram_empty <= int_flag;
     306
    306307debug_data_valid <= interrupt_ignore;
    307308--debug_data_ram_empty <= data_ram_empty_sr(1);
     
    315316c_trigger_mult <= config_setting(44);
    316317
    317 runnumber <= config_setting(45) & config_setting(46);
     318
    318319
    319320trigger_enable <= trigger_enable_sig;
     
    740741                                                state_sig <= X"15";
    741742                                                wait_100ns_sig <= wait_100ns_sig + 1;
    742                                                 if (wait_100ns_sig = "100") then
    743                                                         wait_100ns_sig <= "000";
     743                                                if (wait_100ns_sig = "110010") then
     744                                                        wait_100ns_sig <= "000000";
    744745                                                        state_init <= WAIT_UNTIL_DG_IDLE;       
    745746                                                end if;
     
    749750                                                if (data_generator_idle_sr = "111") then
    750751                                                        --state_init <= CONFIG_MEMORY_MANAGER;
    751                                                         state_init <= MAIN;
     752                                                        state_init <= CONFIG_MEMORY_MANAGER;
    752753                                                end if;
    753754                                       
     
    774775                                                if (memory_manager_config_valid_i_sr(1) = '1') then
    775776                                                        --state_init <= CONFIG_DATA_GENERATOR;
     777                                                        trigger_enable_sig <= trigger_enable_storage_sig;
    776778                                                        state_init <= MAIN;
    777779                                                end if;
     
    821823                                                if (update_of_rois = '1') then
    822824                                                        update_of_rois <= '0';
    823                                                         state_init <= CONFIG_MEMORY_MANAGER;
     825                                                        state_init <= CONFIG;
    824826--                                                      if (trigger_enable_sig = '1') then
    825827--                                                              trigger_enable_storage_sig <= trigger_enable_sig;
     
    876878                                                end if;
    877879                                        when MAIN3 =>
     880                                                debug_data_ram_empty <= local_write_end_flag;
    878881                                          state_sig <= X"23";
    879882                                                -- needed for the check: if there is enough space in W5300 FIFO
     
    10091012                                                               
    10101013                                                        when CMD_WRITE =>
    1011                                                                 config_addr <= conv_integer(data_read (7 downto 0));
    1012                                                                 state_read_data <= READ_COMMAND_DATA_SECTION;
     1014                                                                if ( (conv_integer(data_read (7 downto 0)) >= 0) and (conv_integer(data_read (7 downto 0)) <= 46) ) then
     1015                                                                        config_addr <= conv_integer(data_read (7 downto 0));
     1016                                                                        state_read_data <= READ_COMMAND_DATA_SECTION;
     1017                                                                else
     1018                                                                        config_addr <= 47;
     1019                                                                        state_read_data <= READ_COMMAND_DATA_SECTION;
     1020                                                                end if;
    10131021                                                               
    10141022                                                        when CMD_EXECUTE =>
     
    10571065                                update_of_rois <= '1';
    10581066                                update_of_lessimportant <= '1';
     1067                                runnumber <= config_setting(45) & config_setting(46);
    10591068                               
    10601069                                state_read_data <= RD_5;
     
    12991308                                                                number_of_bytes_written_to_fifo <= number_of_words_written_to_fifo(15 downto 0) & '0';   
    13001309                                                                state_init <= WRITE_DATA;
    1301                                                                 state_write <= WORKAROUND_CHECK_FIFO_SPACE_01;
     1310                                                                state_write <= WR_05;
    13021311                                                       
    13031312                                                       
     
    13471356                                                                state_init <= WRITE_REG;
    13481357                                                                state_write <= WR_ACK;
    1349                                                         when WR_ACK =>
     1358                                                        when WR_ACK =>                                                  -- handshake with MM
    13501359                                                                data_valid_ack <= '1';
    13511360                                                                state_write <= WR_WAIT_FOR_ACK;
    1352                                                         when WR_WAIT_FOR_ACK =>
     1361                                                        when WR_WAIT_FOR_ACK =>                                 -- handshake ACK with MM
    13531362                                                                state_write <= WR_WAIT_FOR_ACK;
    13541363                                                                if (data_valid_sr(1) = '0') then
    13551364                                                                        data_valid_ack <= '0';
    1356                                                                         state_init <= next_state_tmp;
     1365                                                                       
     1366                                                                        if (local_write_end_flag = '1') then
     1367                                                                                -- the last package was just written, and we can go back to the main state
     1368                                                                                state_init <= MAIN;
     1369                                                                                state_write <= WR_START;
     1370                                                                        else
     1371                                                                                -- we just wrote, a part of an event and should not go back to main, in order to avoid
     1372                                                                                -- intermediate reconfiguration of the MM, in case an 'EXECUTE' command just arrived.
     1373                                                                                -- but neither we should not go back to MAIN2, because data_valid is still low, as part of the MM-handshake.
     1374                                                                                --      so we have to wait, until data_valid goes back high.
     1375                                                                                --      if it never goes high, this can be a deadlock again, but it MUST go high,
     1376                                                                                -- because we did not send away the entire event, yet.
     1377                                                                                state_init <= WRITE_DATA;
     1378                                                                                state_write <= WAIT_FOR_DATA_VALID_HIGH_AGAIN;
     1379                                                                        end if;
     1380                                                                       
     1381                                                                       
     1382                                                                end if;
     1383                                                       
     1384                                                        when WAIT_FOR_DATA_VALID_HIGH_AGAIN =>
     1385                                                                if (data_valid_sr(1) = '1') then
     1386                                                                        state_init <= MAIN2;
    13571387                                                                        state_write <= WR_START;
    13581388                                                                end if;
    1359                                                                
    13601389                                                       
    13611390                                                        when others =>
Note: See TracChangeset for help on using the changeset viewer.