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

Subversion Repositories mips_enhanced

[/] [mips_enhanced/] [trunk/] [grlib-gpl-1.0.19-b3188/] [lib/] [gaisler/] [ata/] [atahost_amba_slave.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
------------------------------------------------------------------------------
2
--  This file is a part of the GRLIB VHDL IP LIBRARY
3
--  Copyright (C) 2003, Gaisler Research
4
--
5
--  This program is free software; you can redistribute it and/or modify
6
--  it under the terms of the GNU General Public License as published by
7
--  the Free Software Foundation; either version 2 of the License, or
8
--  (at your option) any later version.
9
--
10
--  This program is distributed in the hope that it will be useful,
11
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
--  GNU General Public License for more details.
14
--
15
--  You should have received a copy of the GNU General Public License
16
--  along with this program; if not, write to the Free Software
17
--  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
18
-----------------------------------------------------------------------------
19
-- Entity: atahost_amba_slave 
20
-- File: atahost_amba_slave.vhd
21
-- Author:  Nils-Johan Wessman, Gaisler Research 
22
-- (Modified by E.Jagre Autumn 2006)
23
-- Description: ATA controller
24
------------------------------------------------------------------------------
25
 
26
library ieee;
27
use ieee.std_logic_1164.all;
28
--use ieee.std_logic_arith.all;
29
use ieee.numeric_std.all;
30
library grlib;
31
use grlib.amba.all;
32
use grlib.stdlib.all;
33
use grlib.devices.all;
34
library gaisler;
35
use gaisler.memctrl.all;
36
use gaisler.ata.all;
37
use work.ata_inf.all;
38
 
39
entity atahost_amba_slave is
40
  generic (
41
    hindex  : integer := 0;
42
    haddr   : integer := 0;
43
    hmask   : integer := 16#ff0#;
44
    pirq    : integer := 0;
45
    DeviceID   : integer := 0;
46
    RevisionNo : integer := 0;
47
 
48
    -- PIO mode 0 settings (@100MHz clock)
49
    PIO_mode0_T1 : natural := 6;                -- 70ns
50
    PIO_mode0_T2 : natural := 28;               -- 290ns
51
    PIO_mode0_T4 : natural := 2;                -- 30ns
52
    PIO_mode0_Teoc : natural := 23;             -- 240ns ==> T0 - T1 - T2 = 600 - 70 - 290 = 240
53
 
54
    -- Multiword DMA mode 0 settings (@100MHz clock)
55
    DMA_mode0_Tm : natural := 4;                -- 50ns
56
    DMA_mode0_Td : natural := 21;               -- 215ns
57
    DMA_mode0_Teoc : natural := 21              -- 215ns ==> T0 - Td - Tm = 480 - 50 - 215 = 215
58
  );
59
  port (
60
    rst     : in  std_ulogic;
61
    arst    : in  std_ulogic;
62
    clk     : in  std_ulogic;
63
    ahbsi   : in  ahb_slv_in_type;
64
    ahbso   : out ahb_slv_out_type;
65
    cf_power: out std_logic;
66
    -- ata controller signals
67
 
68
    -- PIO control input
69
    PIOsel     : out std_logic;
70
    PIOtip,                                         -- PIO transfer in progress
71
    PIOack     : in std_logic;                      -- PIO acknowledge signal
72
    PIOq       : in std_logic_vector(15 downto 0);  -- PIO data input
73
    PIOpp_full : in std_logic;                      -- PIO write-ping-pong buffers full
74
    irq        : in std_logic;                      -- interrupt signal input
75
    PIOa       : out std_logic_vector(3 downto 0):="0000";
76
    PIOd       : out std_logic_vector(15 downto 0);
77
    PIOwe      : out std_logic;
78
 
79
    -- DMA control inputs
80
--    DMAsel    : out std_logic;
81
    DMAtip,                                     -- DMA transfer in progress
82
--    DMAack,                                     -- DMA transfer acknowledge
83
    DMARxEmpty,                                 -- DMA receive buffer empty
84
    DMATxFull,                                  -- DMA transmit buffer full
85
    DMA_dmarq : in std_logic;                   -- wishbone DMA request
86
--    DMAq      : in std_logic_vector(31 downto 0);
87
 
88
    -- outputs
89
    -- control register outputs
90
    IDEctrl_rst,
91
    IDEctrl_IDEen,
92
    IDEctrl_FATR1,
93
    IDEctrl_FATR0,
94
    IDEctrl_ppen,
95
    DMActrl_DMAen,
96
    DMActrl_dir,
97
    DMActrl_Bytesw,                             -- Jagre 2006-12-04, byte swap
98
    DMActrl_BeLeC0,
99
    DMActrl_BeLeC1 : out std_logic;
100
 
101
    -- CMD port timing registers
102
    PIO_cmdport_T1,
103
    PIO_cmdport_T2,
104
    PIO_cmdport_T4,
105
    PIO_cmdport_Teoc    : out std_logic_vector(7 downto 0);
106
    PIO_cmdport_IORDYen : out std_logic;
107
 
108
    -- data-port0 timing registers
109
    PIO_dport0_T1,
110
    PIO_dport0_T2,
111
    PIO_dport0_T4,
112
    PIO_dport0_Teoc    : out std_logic_vector(7 downto 0);
113
    PIO_dport0_IORDYen : out std_logic;
114
 
115
    -- data-port1 timing registers
116
    PIO_dport1_T1,
117
    PIO_dport1_T2,
118
    PIO_dport1_T4,
119
    PIO_dport1_Teoc    : out std_logic_vector(7 downto 0);
120
    PIO_dport1_IORDYen : out std_logic;
121
 
122
    -- DMA device0 timing registers
123
    DMA_dev0_Tm,
124
    DMA_dev0_Td,
125
    DMA_dev0_Teoc    : out std_logic_vector(7 downto 0);
126
 
127
    -- DMA device1 timing registers
128
    DMA_dev1_Tm,
129
    DMA_dev1_Td,
130
    DMA_dev1_Teoc    : out std_logic_vector(7 downto 0);
131
 
132
   -- Bus master edits     by Erik Jagre 2006-10-03 ------------------start-----
133
   fr_BM : in bm_to_slv_type := BM_TO_SLV_RESET_VECTOR;
134
   to_BM : out slv_to_bm_type := SLV_TO_BM_RESET_VECTOR
135
   -- Bus master edits     by Erik Jagre 2006-10-03 ------------------end-------
136
 
137
  );
138
end;
139
 
140
 
141
architecture rtl of atahost_amba_slave is
142
 
143
constant VERSION : amba_version_type := 0;
144
constant hconfig : ahb_config_type := (
145
 
146
  4 => ahb_iobar(haddr, hmask),
147
  others => zero32);
148
 
149
type PIOtiming_type is record
150
   T1,T2,T4,Teoc  : std_logic_vector(7 downto 0);
151
end record;
152
type DMAtiming_type is record
153
   Tm,Td,Teoc  : std_logic_vector(7 downto 0);
154
end record;
155
 
156
-- local registers
157
type reg_type is record
158
   -- AHB signal
159
   hready    : std_ulogic;                    -- Hready
160
   hsel      : std_ulogic;                    -- Hsel
161
   hmbsel    : std_logic_vector(0 to 2);      -- Mem map select
162
   haddr     : std_logic_vector(31 downto 0); -- Haddr
163
   hrdata    : std_logic_vector(31 downto 0); -- Hreaddata
164
   hwdata    : std_logic_vector(31 downto 0); -- Hwritedata
165
   hwrite    : std_ulogic;                    -- Hwrite
166
   htrans    : std_logic_vector(1 downto 0);  -- Htrans type
167
   hburst    : std_logic_vector(2 downto 0);  -- Hburst type
168
   hresp     : std_logic_vector(1 downto 0);  -- Hresp type
169
   size      : std_logic_vector(1 downto 0);  -- Part of Hsize
170
   piosel    : std_logic;
171
   irq       : std_logic;
172
   irqv      : std_logic_vector(NAHBIRQ-1 downto 0);
173
   pioack    : std_logic;
174
   atasel    : std_logic;
175
 
176
   -- reg signal
177
   ctrlreg  : std_logic_vector(31 downto 0);
178
   statreg  : std_logic_vector(31 downto 0);
179
 
180
   pio_cmd  : PIOtiming_type;
181
   pio_dp0  : PIOtiming_type;
182
   pio_dp1  : PIOtiming_type;
183
   dma_dev0 : DMAtiming_type;
184
   dma_dev1 : DMAtiming_type;
185
 
186
   -- Bus master registers by Erik Jagre 2006-10-03 ------------------start-----
187
   bmcmd  : std_logic_vector(7 downto 0); --Bus master IDE command register
188
   bmvd0  : std_logic_vector(31 downto 0); --Device specific (reserved)
189
   bmsta  : std_logic_vector(7 downto 0); --Bus master IDE status register
190
   bmvd1  : std_logic_vector(31 downto 0); --Device specific (reserved)
191
   prdtb  : std_logic_vector(31 downto 0); --Bus master IDE PRD table address
192
   fr_BM  : bm_to_slv_type;
193
   -- Bus master registers by Erik Jagre 2006-10-03 ------------------end-------
194
 
195
end record;
196
 
197
signal r, ri : reg_type;
198
begin
199
 
200
--  ctrl : process(rst, ahbsi, r, PIOack, PIOtip, PIOpp_full, irq, PIOq, fr_BM) Jagre 2007-02-08
201
  ctrl : process(rst, ahbsi, r, PIOack, PIOtip, PIOpp_full, irq, PIOq, DMAtip, dma_dmarq, dmatxfull, dmarxempty, fr_BM)
202
  variable v      : reg_type;    -- local variables for registers
203
  variable int    : std_logic;
204
  begin
205
 
206
-- Variable default settings to avoid latches
207
   v := r;
208
   v.hresp := HRESP_OKAY;
209
   v.irqv := (others => '0');
210
   int := '1';
211
   v.irq := irq;
212
   v.irqv(pirq) := v.irq and not r.irq;
213
   v.pioack := PIOack;
214
 
215
   -- Bus master edits     by Erik Jagre 2006-10-03 ------------------start-----
216
   v.fr_BM.err := fr_BM.err;
217
   v.fr_BM.done := fr_BM.done;
218
   v.bmvd0:=fr_bm.cur_base;
219
   v.bmvd1(15 downto 0):=fr_bm.cur_cnt;
220
   v.bmvd1(31 downto 15):=(others => '0');
221
   -- Bus master edits     by Erik Jagre 2006-10-03 ------------------end-------
222
 
223
 
224
   if (ahbsi.hready = '1') and (ahbsi.hsel(hindex) and ahbsi.htrans(1)) = '1' then
225
         v.size   := ahbsi.hsize(1 downto 0);
226
         v.hwrite := ahbsi.hwrite;
227
         v.htrans := ahbsi.htrans;
228
         v.hburst := ahbsi.hburst;
229
         v.hsel   := '1';
230
         v.haddr  := ahbsi.haddr;
231
         v.piosel := ahbsi.haddr(6);
232
         v.atasel := ahbsi.haddr(6);
233
 
234
         if ahbsi.hwrite = '0' or ahbsi.haddr(6) = '1' then -- Read or ATA 
235
            v.hready := '0';
236
         else                                         -- Write
237
            v.hready := '1';
238
         end if;
239
   else
240
         v.hsel := '0';
241
 
242
         if PIOack = '1' then
243
            v.piosel := '0';
244
         end if;
245
 
246
         v.hready := r.pioack or not r.atasel;
247
 
248
         if r.pioack = '1' then
249
            v.atasel := '0';
250
         end if;
251
   end if;
252
 
253
   if r.hsel = '1' and r.atasel = '0' and r.hwrite = '1' then -- Write
254
      case r.haddr(5 downto 2) is
255
      when "0000" =>    -- Control register 0x0
256
         v.ctrlreg := ahbsi.hwdata;
257
      when "0001" =>    -- Status register 0x4
258
         int := ahbsi.hwdata(0); -- irq bit in status reg
259
      when "0010" =>    -- PIO Compatible timing register 0x8
260
         v.pio_cmd.T1 := ahbsi.hwdata(7 downto 0);
261
         v.pio_cmd.T2 := ahbsi.hwdata(15 downto 8);
262
         v.pio_cmd.T4 := ahbsi.hwdata(23 downto 16);
263
         v.pio_cmd.Teoc := ahbsi.hwdata(31 downto 24);
264
      when "0011" =>    -- PIO Fast timing register device 0 0xc
265
         v.pio_dp0.T1 := ahbsi.hwdata(7 downto 0);
266
         v.pio_dp0.T2 := ahbsi.hwdata(15 downto 8);
267
         v.pio_dp0.T4 := ahbsi.hwdata(23 downto 16);
268
         v.pio_dp0.Teoc := ahbsi.hwdata(31 downto 24);
269
      when "0100" =>    -- PIO Fast timing register device 1 0x10
270
         v.pio_dp1.T1 := ahbsi.hwdata(7 downto 0);
271
         v.pio_dp1.T2 := ahbsi.hwdata(15 downto 8);
272
         v.pio_dp1.T4 := ahbsi.hwdata(23 downto 16);
273
         v.pio_dp1.Teoc := ahbsi.hwdata(31 downto 24);
274
      when "0101" =>    -- DMA timing register device 0 0x14
275
         v.dma_dev0.Tm := ahbsi.hwdata(7 downto 0);
276
         v.dma_dev0.Td := ahbsi.hwdata(15 downto 8);
277
         v.dma_dev0.Teoc := ahbsi.hwdata(31 downto 24);
278
      when "0110" =>    -- DMA timing register device 1 0x18
279
         v.dma_dev1.Tm := ahbsi.hwdata(7 downto 0);
280
         v.dma_dev1.Td := ahbsi.hwdata(15 downto 8);
281
         v.dma_dev1.Teoc := ahbsi.hwdata(31 downto 24);
282
      -- Bus master registers by Erik Jagre 2006-10-03 -----------------start------
283
      when "0111" =>    -- Bus master IDE command register 0x1C
284
         v.bmcmd(7 downto 0) := ahbsi.hwdata(7 downto 0);
285
      when "1000" =>    -- Device specific (reserved) 0x20
286
         v.bmvd0(7 downto 0) := ahbsi.hwdata(7 downto 0);
287
      when "1001" =>    -- Bus master IDE status register 0x24
288
         v.bmsta(6 downto 1) := ahbsi.hwdata(6 downto 1); --bmsta(7) read only
289
         if (ahbsi.hwdata(2)='1') then v.bmsta(2):='0'; end if; --reset IRQ
290
         if (ahbsi.hwdata(1)='1') then v.bmsta(1):='0'; end if; --reset Error
291
      when "1010" =>    -- Device specific (reserved) 0x28
292
         v.bmvd1(7 downto 0) := ahbsi.hwdata(7 downto 0);
293
      when "1011" =>    -- Bus master IDE PRD table address 0x2C
294
         v.prdtb := ahbsi.hwdata;
295
      -- Bus master registers by Erik Jagre 2006-10-03 -----------------end--------
296
      when others => null;
297
      end case;
298
 
299
   elsif r.hsel = '1' and r.atasel = '1' and r.hwrite = '1' then  -- ATA IO device 0x40-
300
      v.hwdata := ahbsi.hwdata;
301
   end if;
302
 
303
   if r.hsel = '1' and r.atasel = '0' and r.hwrite = '0' then -- Read
304
      case r.haddr(5 downto 2) is
305
      when "0000" =>    -- Control register 0x0
306
         v.hrdata := r.ctrlreg;
307
      when "0001" =>    -- Status register 0x4
308
         v.hrdata := r.statreg;
309
      when "0010" =>    -- PIO Compatible timing register 0x8
310
         v.hrdata := (r.pio_cmd.Teoc & r.pio_cmd.T4 & r.pio_cmd.T2 &
311
                                     r.pio_cmd.T1);
312
      when "0011" =>    -- PIO Fast timing register device 0 0xc
313
         v.hrdata := (r.pio_dp0.Teoc & r.pio_dp0.T4 & r.pio_dp0.T2 &
314
                                     r.pio_dp0.T1);
315
      when "0100" =>    -- PIO Fast timing register device 1 0x10
316
         v.hrdata := (r.pio_dp1.Teoc & r.pio_dp1.T4 & r.pio_dp1.T2 &
317
                                     r.pio_dp1.T1);
318
      when "0101" =>    -- DMA timing register device 0 0x14
319
         v.hrdata := (r.dma_dev0.Teoc & x"00" & r.dma_dev0.Td &
320
                                     r.dma_dev0.Tm);
321
      when "0110" =>    -- DMA timing register device 1 0x18
322
         v.hrdata := (r.dma_dev1.Teoc & x"00" & r.dma_dev1.Td &
323
                                     r.dma_dev1.Tm);
324
      -- Bus master registers by Erik Jagre 2006-10-03 -----------------start---
325
      when "0111" =>    -- Bus master IDE command register 0x1C
326
         v.hrdata := (others => '0'); --return 0 on reads
327
         v.hrdata(3) := r.bmcmd(3); --except for bit 3
328
      when "1000" =>    -- Device specific (reserved) 0x20
329
         v.hrdata(31 downto 0) := r.bmvd0; --Erik Jagre 2006-11-13
330
         --v.hrdata(31 downto 8) := (others => '0'); --return 0 on reads
331
         --v.hrdata(7 downto 0) := r.bmvd0;
332
      when "1001" =>    -- Bus master IDE status register 0x24
333
         v.hrdata(31 downto 8) := (others => '0'); --return 0 on reads
334
         v.hrdata(7 downto 0) := r.bmsta;
335
         v.hrdata(7) := '1'; --simplex only
336
         v.hrdata(4 downto 3) := (others => '0'); --return 0 on reads
337
      when "1010" =>    -- Device specific (reserved) 0x28
338
         v.hrdata(31 downto 0) := r.bmvd1; --Erik Jagre 2006-11-13
339
         --v.hrdata(31 downto 8) := (others => '0'); --return 0 on reads
340
         --v.hrdata(7 downto 0) := r.bmvd1;
341
      when "1011" =>    -- Bus master IDE PRD table address 0x2C
342
         v.hrdata := r.prdtb;
343
      -- Bus master registers by Erik Jagre 2006-10-03 ------------------end----
344
      when others =>
345
         v.hrdata := x"aaaaaaaa";
346
      end case;
347
   elsif r.atasel = '1' then  -- ATA IO device 0x40-
348
      v.hrdata := (x"0000" & PIOq);
349
   end if;
350
 
351
   -- Status register
352
   v.statreg(31 downto 0)  := (others => '0');                -- clear all bits (read unused bits as '0')
353
   v.statreg(31 downto 28) := std_logic_vector(to_unsigned(DeviceId,4));    -- set Device ID
354
   v.statreg(27 downto 24) := std_logic_vector(to_unsigned(RevisionNo,4));  -- set revision number
355
   v.statreg(16) := irq; --Erik Jagre 20006-11-13
356
   v.statreg(15) := DMAtip;
357
   v.statreg(10) := DMARxEmpty;
358
   v.statreg(9)  := DMATxFull;
359
   v.statreg(8)  := DMA_dmarq;
360
   v.statreg(7)  := PIOtip;
361
   v.statreg(6)  := PIOpp_full;
362
   v.statreg(0)  := (r.statreg(0) or (v.irq and not r.irq)) and int;
363
 
364
   -- Bus master control   by Erik Jagre 2006-10-03 -----------------start------
365
   if (v.fr_BM.err='1' and r.fr_BM.err='0') then
366
      v.bmsta(1):='1'; --set err on rising flank
367
   end if;
368
 
369
   if (v.irq='1' and r.irq='0') then
370
      v.bmsta(2):='1'; --set irq on rising flank
371
   end if;
372
 
373
   if ((v.fr_BM.done='1' and r.fr_BM.done='0') or  --BM done
374
   (v.bmcmd(0)='0' and r.bmcmd(0)='1') or --Reset by software
375
   (v.fr_BM.err='1' and r.fr_BM.err='0')) then --Error from BM
376
      v.bmsta(0):='0'; --clear active
377
   elsif (v.bmcmd(0)='1' and r.bmcmd(0)='0') then
378
      v.bmsta(0):='1'; --set active on rising start flank
379
   end if;
380
   -- Bus master control   by Erik Jagre 2006-10-03 ------------------end-------
381
 
382
-- reset
383
   if rst = '0' then
384
      v.ctrlreg := (0 => '1', others => '0');
385
      v.statreg(0) := '0';
386
 
387
      -- Bus master control   by Erik Jagre 2006-10-04 -----------------start---
388
      v.bmcmd := (others => '0');
389
      v.bmvd0 := (others => '0');
390
      v.bmsta := (7 => '1', others => '0');
391
      v.bmvd1 := (others => '0');
392
      v.prdtb := (others => '0');
393
 
394
      -- Bus master control   by Erik Jagre 2006-10-04 ------------------end----
395
 
396
      v.haddr := (others => '0');
397
      v.hwrite := '0';
398
      v.hready := '1';
399
      v.pioack := '0';
400
      v.atasel := '0';
401
      v.piosel := '0';
402
 
403
      v.pio_cmd.T1 := conv_std_logic_vector(PIO_mode0_T1,8);
404
      v.pio_cmd.T2 := conv_std_logic_vector(PIO_mode0_T2,8);
405
      v.pio_cmd.T4 := conv_std_logic_vector(PIO_mode0_T4,8);
406
      v.pio_cmd.Teoc := conv_std_logic_vector(PIO_mode0_Teoc,8);
407
 
408
      v.pio_dp0.T1 := conv_std_logic_vector(PIO_mode0_T1,8);
409
      v.pio_dp0.T2 := conv_std_logic_vector(PIO_mode0_T2,8);
410
      v.pio_dp0.T4 := conv_std_logic_vector(PIO_mode0_T4,8);
411
      v.pio_dp0.Teoc := conv_std_logic_vector(PIO_mode0_Teoc,8);
412
 
413
      v.pio_dp1.T1 := conv_std_logic_vector(PIO_mode0_T1,8);
414
      v.pio_dp1.T2 := conv_std_logic_vector(PIO_mode0_T2,8);
415
      v.pio_dp1.T4 := conv_std_logic_vector(PIO_mode0_T4,8);
416
      v.pio_dp1.Teoc := conv_std_logic_vector(PIO_mode0_Teoc,8);
417
 
418
      v.dma_dev0.Tm := conv_std_logic_vector(DMA_mode0_Tm,8);
419
      v.dma_dev0.Td := conv_std_logic_vector(DMA_mode0_Td,8);
420
      v.dma_dev0.Teoc := conv_std_logic_vector(DMA_mode0_Teoc,8);
421
 
422
      v.dma_dev1.Tm := conv_std_logic_vector(DMA_mode0_Tm,8);
423
      v.dma_dev1.Td := conv_std_logic_vector(DMA_mode0_Td,8);
424
      v.dma_dev1.Teoc := conv_std_logic_vector(DMA_mode0_Teoc,8);
425
   end if;
426
 
427
   -- assign control bits
428
   cf_power             <= r.ctrlreg(31);
429
   DMActrl_DMAen        <= r.bmcmd(0); --r.ctrlreg(15); --Erik Jagre 2006-10-24
430
   DMActrl_dir          <= not r.bmcmd(3); --r.ctrlreg(13); --Jagre 2006-12-04
431
   DMActrl_Bytesw       <= r.ctrlreg(11); --Jagre 2006-12-04, byteswap ATA data
432
   DMActrl_BeLeC1       <= r.ctrlreg(9);
433
   DMActrl_BeLeC0       <= r.ctrlreg(8);
434
   IDEctrl_IDEen        <= r.ctrlreg(7);
435
   IDEctrl_FATR1        <= r.ctrlreg(6);
436
   IDEctrl_FATR0        <= r.ctrlreg(5);
437
   IDEctrl_ppen         <= r.ctrlreg(4);
438
   PIO_dport1_IORDYen   <= r.ctrlreg(3);
439
   PIO_dport0_IORDYen   <= r.ctrlreg(2);
440
   PIO_cmdport_IORDYen  <= r.ctrlreg(1);
441
   IDEctrl_rst          <= r.ctrlreg(0);
442
 
443
   -- CMD port timing
444
   PIO_cmdport_T1 <= r.pio_cmd.T1; PIO_cmdport_T2 <= r.pio_cmd.T2;
445
   PIO_cmdport_T4 <= r.pio_cmd.T4; PIO_cmdport_Teoc <= r.pio_cmd.Teoc;
446
 
447
   -- data-port0 timing
448
   PIO_dport0_T1 <= r.pio_dp0.T1; PIO_dport0_T2 <= r.pio_dp0.T2;
449
   PIO_dport0_T4 <= r.pio_dp0.T4; PIO_dport0_Teoc <= r.pio_dp0.Teoc;
450
 
451
   -- data-port1 timing
452
   PIO_dport1_T1 <= r.pio_dp1.T1; PIO_dport1_T2 <= r.pio_dp1.T2;
453
   PIO_dport1_T4 <= r.pio_dp1.T4; PIO_dport1_Teoc <= r.pio_dp1.Teoc;
454
 
455
   -- DMA device0 timing
456
   DMA_dev0_Tm <= r.dma_dev0.Tm; DMA_dev0_Td <= r.dma_dev0.Td;
457
   DMA_dev0_Teoc <= r.dma_dev0.Teoc;
458
 
459
   -- DMA device1 timing
460
   DMA_dev1_Tm <= r.dma_dev0.Tm; DMA_dev1_Td <= r.dma_dev0.Td;
461
   DMA_dev1_Teoc <= r.dma_dev0.Teoc;
462
 
463
   -- Bus master control   by Erik Jagre 2006-10-04 -----------------start---
464
   --assign BM signal
465
   -- to_BM.en<=r.bmcmd(0);Jagre 2007-1-15
466
   to_BM.en<=r.bmsta(0);
467
   to_BM.dir<=r.bmcmd(3);
468
   to_BM.prdtb<=r.prdtb;
469
   to_BM.prd_belec<=r.ctrlreg(10);
470
   -- Bus master control   by Erik Jagre 2006-10-04 ------------------end----
471
 
472
   ri <= v;
473
 
474
   PIOa   <= r.haddr(5 downto 2);
475
   PIOd   <= r.hwdata(15 downto 0);
476
   PIOsel <= r.piosel;
477
   PIOwe  <= r.hwrite;
478
--   DMAsel <= '0'; -- temp ***
479
 
480
   ahbso.hready  <= r.hready;
481
   ahbso.hresp   <= r.hresp;
482
   ahbso.hrdata  <= r.hrdata;
483
   ahbso.hconfig <= hconfig;
484
   ahbso.hcache  <= '0';
485
   ahbso.hirq    <= r.irqv;
486
   ahbso.hindex  <= hindex;
487
 
488
  end process;
489
 
490
  regs : process(clk,rst)
491
  begin
492
 
493
   if rising_edge(clk) then
494
      r <= ri;
495
   end if;
496
 
497
    if rst = '0' then
498
    end if;
499
  end process;
500
 
501
end;
502
 

powered by: WebSVN 2.1.0

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