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

Subversion Repositories usb_fpga_2_14

[/] [usb_fpga_2_14/] [trunk/] [examples/] [mmio/] [fpga-2.16/] [mmio.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 ZTEX
library ieee;
2
use IEEE.std_logic_1164.all;
3
use IEEE.std_logic_arith.all;
4
use IEEE.std_logic_unsigned.all;
5
--#use IEEE.numeric_std.all;
6
Library UNISIM;
7
use UNISIM.vcomponents.all;
8
 
9
entity mmio is
10
   port(
11
      fxclk_in  : in std_logic;
12
      MM_A      : in std_logic_vector(15 downto 0);
13
      MM_D      : inout std_logic_vector(7 downto 0);
14
      MM_WRN    : in std_logic;
15
      MM_RDN    : in std_logic;
16
      MM_PSENN  : in std_logic
17
   );
18
end mmio;
19
 
20
architecture RTL of mmio is
21
 
22
--signal declaration
23
signal rd : std_logic := '1';
24
signal rd0,rd1 : std_logic := '1';
25
signal wr : std_logic := '1';
26
signal wr0,wr1 : std_logic := '1';
27
 
28
signal datain : std_logic_vector(7 downto 0);
29
signal dataout : std_logic_vector(7 downto 0);
30
 
31
signal fxclk : std_logic;  -- 96 MHz
32
signal fxclk_fb : std_logic;
33
 
34
begin
35
    -- PLL is used as clock filter
36
    fxclk_pll : PLLE2_BASE
37
    generic map (
38
       BANDWIDTH => "OPTIMIZED",  -- OPTIMIZED, HIGH, LOW
39
       CLKFBOUT_MULT => 20,       -- Multiply value for all CLKOUT, (2-64)
40
       CLKFBOUT_PHASE => 0.0,     -- Phase offset in degrees of CLKFB, (-360.000-360.000).
41
       CLKIN1_PERIOD => 0.0,      -- Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz).
42
       -- CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for each CLKOUT (1-128)
43
       CLKOUT0_DIVIDE => 10,
44
       CLKOUT1_DIVIDE => 1,
45
       CLKOUT2_DIVIDE => 1,
46
       CLKOUT3_DIVIDE => 1,
47
       CLKOUT4_DIVIDE => 1,
48
       CLKOUT5_DIVIDE => 1,
49
       -- CLKOUT0_DUTY_CYCLE - CLKOUT5_DUTY_CYCLE: Duty cycle for each CLKOUT (0.001-0.999).
50
       CLKOUT0_DUTY_CYCLE => 0.5,
51
       CLKOUT1_DUTY_CYCLE => 0.5,
52
       CLKOUT2_DUTY_CYCLE => 0.5,
53
       CLKOUT3_DUTY_CYCLE => 0.5,
54
       CLKOUT4_DUTY_CYCLE => 0.5,
55
       CLKOUT5_DUTY_CYCLE => 0.5,
56
       -- CLKOUT0_PHASE - CLKOUT5_PHASE: Phase offset for each CLKOUT (-360.000-360.000).
57
       CLKOUT0_PHASE => 0.0,
58
       CLKOUT1_PHASE => 0.0,
59
       CLKOUT2_PHASE => 0.0,
60
       CLKOUT3_PHASE => 0.0,
61
       CLKOUT4_PHASE => 0.0,
62
       CLKOUT5_PHASE => 0.0,
63
       DIVCLK_DIVIDE => 1,        -- Master division value, (1-56)
64
       REF_JITTER1 => 0.0,        -- Reference input jitter in UI, (0.000-0.999).
65
       STARTUP_WAIT => "FALSE"    -- Delay DONE until PLL Locks, ("TRUE"/"FALSE")
66
    )
67
    port map (
68
       CLKOUT0 => fxclk,
69
       CLKFBOUT => fxclk_fb,   -- 1-bit output: Feedback clock
70
       CLKIN1 => fxclk_in,     -- 1-bit input: Input clock
71
       PWRDWN => '0',          -- 1-bit input: Power-down
72
       RST => '0',             -- 1-bit input: Reset
73
       CLKFBIN => fxclk_fb     -- 1-bit input: Feedback clock
74
    );
75
 
76
    rd <= MM_RDN and MM_PSENN;
77
    wr <= MM_WRN;
78
 
79
    MM_D <= dataout when ((rd1 or rd0 or rd) = '0') else ( others => 'Z' );      -- enable output
80
 
81
    dpMmio: process(fxclk)
82
    begin
83
         if fxclk' event and fxclk = '1' then
84
            if (wr1 = '1') and (wr0 = '0')                       -- EZ-USB write strobe
85
            then
86
                if MM_A = conv_std_logic_vector(16#5001#,16)    -- read data from EZ-USB if addr=0x5001
87
                then
88
                    datain <= MM_D;
89
                end if;
90
            elsif (rd1 = '1') and (rd0 = '0')                    -- EZ-USB read strobe
91
            then
92
                if MM_A = conv_std_logic_vector(16#5002#,16)    -- write data to EZ-USB if addr=0x5002
93
                then
94
                    if ( datain >= conv_std_logic_vector(97,8) ) and ( datain <= conv_std_logic_vector(122,8) ) -- do the upercase conversion
95
                    then
96
                        dataout <= datain - conv_std_logic_vector(32,8);
97
                    else
98
                        dataout <= datain ;
99
                    end if;
100
                end if;
101
            end if;
102
 
103
            rd0 <= rd;
104
            rd1 <= rd0;
105
            wr0 <= wr;
106
            wr1 <= wr0;
107
        end if;
108
    end process dpMmio;
109
 
110
end RTL;

powered by: WebSVN 2.1.0

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