OpenCores
URL https://opencores.org/ocsvn/modular_oscilloscope/modular_oscilloscope/trunk

Subversion Repositories modular_oscilloscope

[/] [modular_oscilloscope/] [trunk/] [hdl/] [modular_oscilloscope.vhd] - Blame information for rev 57

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 53 budinero
-------------------------------------------------------------------------------------------------100
2
--| Modular Oscilloscope
3
--| UNSL - Argentine
4
--|
5
--| File: modullar_oscilloscope_tbench_text.vhd
6
--| Version: 0.1
7
--| Tested in: Actel A3PE1500
8
--|   Board: RVI Prototype Board + LP Data Conversion Daughter Board
9
--|-------------------------------------------------------------------------------------------------
10
--| Description:
11
--|   MODULAR OSCILLOSCOPE - Main
12
--|   This is the top top module.
13
--|   
14
--|-------------------------------------------------------------------------------------------------
15
--| File history:
16
--|   0.1   | aug-2009 | First testing
17
----------------------------------------------------------------------------------------------------
18
--| Copyright © 2009, Facundo Aguilera (budinero at gmail.com).
19
--|
20
--| This VHDL design file is an open design; you can redistribute it and/or
21
--| modify it and/or implement it after contacting the author.
22
----------------------------------------------------------------------------------------------------
23
 
24
 
25
-- NOTES: 
26
-- · daq clock: 40 MHz
27 57 budinero
-- · epp clock: 2.5 MHz
28
-- · (!) normal high reset button, inverted here
29 53 budinero
 
30
--==================================================================================================
31
-- TO DO
32
-- · Full full test
33
--==================================================================================================
34
library IEEE;
35
use IEEE.STD_LOGIC_1164.ALL;
36
use IEEE.STD_LOGIC_UNSIGNED.ALL;
37
use ieee.math_real.all;
38
 
39
use work.ctrl_pkg.all;
40
use work.daq_pkg.all;
41
use work.memory_pkg.all;
42
use work.eppwbn_pkg.all;
43
 
44
entity modular_oscilloscope is
45
  port(
46
    -- ADC
47
    adc_data_I:     in    std_logic_vector (9 downto 0);
48
    adc_sel_O:      out   std_logic;
49
    adc_clk_O:      out   std_logic;
50
    adc_sleep_O:    out   std_logic;
51
    adc_chip_sel_O: out   std_logic;
52
 
53
    -- EPP
54
    nStrobe_I:      in std_logic;                       --  HostClk/nWrite 
55
    Data_IO:        inout std_logic_vector (7 downto 0);--   AD8..1 (Data1..Data8)
56
    nAck_O:         out std_logic;                      --  PtrClk/PeriphClk/Intr
57
    busy_O:         out std_logic;                      --  PtrBusy/PeriphAck/nWait
58
    PError_O:       out std_logic;                      --  AckData/nAckReverse
59
    Sel_O:          out std_logic;                      --  XFlag (Select)
60
    nAutoFd_I:      in std_logic;                       --  HostBusy/HostAck/nDStrb
61
    PeriphLogicH_O: out std_logic;                      --  (Periph Logic High)
62
    nInit_I:        in std_logic;                       --  nReverseRequest
63
    nFault_O:       out std_logic;                      --  nDataAvail/nPeriphRequest
64
    nSelectIn_I:    in std_logic;                       --  1284 Active/nAStrb
65
 
66
    -- Peripherals
67
    reset_I:    in std_logic;
68
    pll_clk_I:  in std_logic  -- clock signal go to pll, and is divided in two clocks
69
 
70
  );
71
end entity modular_oscilloscope;
72
 
73
architecture structural1 of modular_oscilloscope is
74
 
75
    ------------------------------------------------------------------------------------------------
76
    -- From port
77
    signal ctrl_dat_i_port: std_logic_vector (15 downto 0);
78
    signal ctrl_dat_o_port: std_logic_vector (15 downto 0);
79
    signal ctrl_adr_i_port: std_logic_vector (7 downto 0);
80
    signal ctrl_cyc_i_port: std_logic;
81
    signal ctrl_stb_i_port: std_logic;
82
    signal ctrl_ack_o_port: std_logic ;
83
    signal ctrl_we_i_port:  std_logic;
84
 
85
    signal ctrl_dat_i_daq: std_logic_vector (15 downto 0);
86
    signal ctrl_dat_o_daq: std_logic_vector (15 downto 0);
87
    signal ctrl_adr_o_daq: std_logic_vector (1 downto 0);
88
    signal ctrl_cyc_o_daq: std_logic;
89
    signal ctrl_stb_o_daq: std_logic;
90 54 budinero
    signal ctrl_ack_i_daq: std_logic;
91 53 budinero
    signal ctrl_we_o_daq:  std_logic;
92
 
93
    signal ctrl_dat_o_memw:  std_logic_vector (15 downto 0);
94
    signal ctrl_adr_o_memw:  std_logic_vector (13 downto 0);
95
    signal ctrl_cyc_o_memw:  std_logic;
96
    signal ctrl_stb_o_memw:  std_logic;
97
    signal ctrl_ack_i_memw:  std_logic ;
98
    signal ctrl_we_o_memw:   std_logic;
99
 
100
    signal ctrl_dat_i_memr:   std_logic_vector (15 downto 0);
101
    signal ctrl_adr_o_memr:   std_logic_vector (13 downto 0);
102
    signal ctrl_cyc_o_memr:   std_logic;
103
    signal ctrl_stb_o_memr:   std_logic;
104
    signal ctrl_ack_i_memr:   std_logic ;
105
    signal ctrl_we_o_memr:    std_logic;
106
 
107
    signal clk_daq, clk_port:  std_logic;
108 57 budinero
 
109
    signal inverted_reset: std_logic;
110 53 budinero
 
111
begin
112
 
113 57 budinero
 
114
    inverted_reset <= not(reset_I);
115
 
116
 
117 53 budinero
  U_DAQ: daq
118
    generic map(
119 57 budinero
    DEFALT_CONFIG  => "0000001000000000"
120 53 budinero
    --                 5432109876543210 
121
    --: std_logic_vector := "0000100000000000"
122
                                      -- bits 8 a 0       clk_pre_scaler
123
                                      -- bits 9           clk_pre_scaler_ena
124
                                      -- bit 10           adc sleep
125
                                      -- bit 11           adc_chip_sel
126
                                      -- bits 12 a 15     sin usar
127
 
128
                                      -- si clk_pre_scaler_ena = 1
129
                                      -- frecuencia_adc = frecuencia_wbn / ((clk_pre_scaler+1)*2)
130
                                      -- sino frecuencia_adc = frecuencia_wbn
131
  )
132
  port map(
133
    -- Externo
134
    adc_data_I      => adc_data_I,
135
    adc_sel_O       => adc_sel_O,
136
    adc_clk_O       => adc_clk_O,
137
    adc_sleep_O     => adc_sleep_O,
138
    adc_chip_sel_O  => adc_chip_sel_O,
139
    --  Interno
140 57 budinero
    RST_I => inverted_reset,
141 53 budinero
    CLK_I => clk_daq,
142
    DAT_I => ctrl_dat_o_daq,
143
    ADR_I => ctrl_adr_o_daq,
144
    CYC_I => ctrl_cyc_o_daq,
145
    STB_I => ctrl_stb_o_daq,
146
    WE_I  => ctrl_we_o_daq,
147
    DAT_O => ctrl_dat_i_daq,
148
    ACK_O => ctrl_ack_i_daq,
149
 
150
    adc_clk_I => clk_daq
151
    );
152
 
153
 
154
  U_EPP16: eppwbn_16bit
155
  port map (
156
    -- TEMPORAL
157
    --epp_mode_monitor: out std_logic_vector (1 downto 0);
158
    -- Externo
159
    nStrobe       => nStrobe_I,
160
    Data          => Data_IO,
161
    nAck          => nAck_O,
162
    busy          => busy_O,
163
    PError        => PError_O,
164
    Sel           => Sel_O,
165
    nAutoFd       => nAutoFd_I,
166
    PeriphLogicH  => PeriphLogicH_O,
167
    nInit         => nInit_I,
168
    nFault        => nFault_O,
169
    nSelectIn     => nSelectIn_I,
170
    --  Interno
171 57 budinero
    RST_I => inverted_reset,
172 53 budinero
    CLK_I => clk_port,
173
    DAT_I => ctrl_dat_o_port,
174
    DAT_O => ctrl_dat_i_port,
175
    ADR_O => ctrl_adr_i_port,
176
    CYC_O => ctrl_cyc_i_port,
177
    STB_O => ctrl_stb_i_port,
178
    ACK_I => ctrl_ack_o_port,
179
    WE_O  => ctrl_we_i_port
180
    );
181
 
182
  U_CTRL: ctrl
183
  port map(
184
 
185
    DAT_I_port => ctrl_dat_i_port,
186
    DAT_O_port => ctrl_dat_o_port,
187
    ADR_I_port => ctrl_adr_i_port(3 downto 0),
188
    CYC_I_port => ctrl_cyc_i_port,
189
    STB_I_port => ctrl_stb_i_port,
190
    ACK_O_port => ctrl_ack_o_port,
191
    WE_I_port =>  ctrl_we_i_port,
192
    CLK_I_port => clk_port,
193 57 budinero
    RST_I_port => inverted_reset,
194 53 budinero
 
195
    DAT_I_daq => ctrl_dat_i_daq,
196
    DAT_O_daq => ctrl_dat_o_daq,
197
    ADR_O_daq => ctrl_adr_o_daq,
198
    CYC_O_daq => ctrl_cyc_o_daq,
199
    STB_O_daq => ctrl_stb_o_daq,
200
    ACK_I_daq => ctrl_ack_i_daq,
201
    WE_O_daq =>  ctrl_we_o_daq,
202
    CLK_I_daq => clk_daq,
203 57 budinero
    RST_I_daq => inverted_reset,
204 53 budinero
 
205
    DAT_O_memw => ctrl_dat_o_memw,
206
    ADR_O_memw => ctrl_adr_o_memw,
207
    CYC_O_memw => ctrl_cyc_o_memw,
208
    STB_O_memw => ctrl_stb_o_memw,
209
    ACK_I_memw => ctrl_ack_i_memw,
210
    WE_O_memw =>  ctrl_we_o_memw,
211
 
212
    DAT_I_memr => ctrl_dat_i_memr,
213
    ADR_O_memr => ctrl_adr_o_memr,
214
    CYC_O_memr => ctrl_cyc_o_memr,
215
    STB_O_memr => ctrl_stb_o_memr,
216
    ACK_I_memr => ctrl_ack_i_memr,
217
    WE_O_memr =>  ctrl_we_o_memr
218
  );
219
 
220
  U_DPORTMEM: dual_port_memory_wb
221
    port map(
222
      -- Puerto A (Higer prioriry)
223 57 budinero
      RST_I_a => inverted_reset,
224 53 budinero
      CLK_I_a => clk_daq,
225
      DAT_I_a => ctrl_dat_o_memw,
226
      DAT_O_a => open,
227
      ADR_I_a => ctrl_adr_o_memw,
228
      CYC_I_a => ctrl_cyc_o_memw,
229
      STB_I_a => ctrl_stb_o_memw,
230
      ACK_O_a => ctrl_ack_i_memw,
231
      WE_I_a =>  ctrl_we_o_memw,
232
      -- Puerto B (Lower prioriry)
233 57 budinero
      RST_I_b => inverted_reset,
234 53 budinero
      CLK_I_b => clk_port,
235
      DAT_I_b => X"0000",
236
      DAT_O_b => ctrl_dat_i_memr,
237
      ADR_I_b => ctrl_adr_o_memr,
238
      CYC_I_b => ctrl_cyc_o_memr,
239
      STB_I_b => ctrl_stb_o_memr,
240
      ACK_O_b => ctrl_ack_i_memr,
241
      WE_I_b =>  ctrl_we_o_memr
242
    );
243
 
244
  U_PLL0: entity work.A3PE_pll_2clk
245
    port map(
246
      POWERDOWN       =>  '0',
247
      CLKA            =>  pll_clk_I,
248
      LOCK            =>  open,
249
      --SDIN            =>  '0',
250
      --SCLK            =>  '0',
251
      --SSHIFT          =>  '0',
252
      --SUPDATE         =>  '0',
253
      --MODE            =>  '0',
254
      GLA             =>  clk_daq,
255
      GLB             =>  clk_port
256
      --SDOUT           =>  open
257
    );
258
 
259
end architecture;
260
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.