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/] [gleichmann/] [dac/] [adcdac_ea.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
 
2
library ieee;
3
use ieee.std_logic_1164.all;
4
library grlib;
5
use grlib.amba.all;
6
use grlib.stdlib.all;
7
use grlib.devices.all;
8
library gleichmann;
9
use gleichmann.dac.all;
10
--pragma translate_off
11
use std.textio.all;
12
--pragma translate_on
13
 
14
entity adcdac is
15
  generic (
16
    pindex : integer := 0;
17
    paddr  : integer := 0;
18
    pmask  : integer := 16#fff#;
19
    nbits  : integer := 10              -- GPIO bits
20
    );
21
  port (
22
    rst     : in  std_ulogic;
23
    clk     : in  std_ulogic;
24
    apbi    : in  apb_slv_in_type;
25
    apbo    : out apb_slv_out_type;
26
    adcdaci : in  adcdac_in_type;
27
    adcdaco : out adcdac_out_type
28
    );
29
end;
30
 
31
architecture rtl of adcdac is
32
 
33
  constant REVISION : integer := 0;
34
 
35
  constant pconfig : apb_config_type := (
36
 
37
    1 => apb_iobar(paddr, pmask));
38
 
39
  type registers is
40
    record
41
      dac_reg : std_logic_vector(nbits-1 downto 0);
42
      adc_reg : std_logic_vector(nbits-1 downto 0);
43
    end record;
44
 
45
  signal r, rin : registers;
46
 
47
  -- ADC signals
48
  signal valid       : std_ulogic;
49
  signal adc_out_par : std_logic_vector(nbits-1 downto 0);
50
 
51
  signal rst_inv : std_ulogic;
52
 
53
begin
54
 
55
  comb : process(adc_out_par, apbi, r, rst, valid)
56
    variable readdata : std_logic_vector(31 downto 0);
57
    variable v        : registers;
58
  begin
59
 
60
-- read registers
61
    readdata := (others => '0');
62
    case apbi.paddr(4 downto 2) is
63
      when "000"  => readdata(nbits-1 downto 0) := r.dac_reg;
64
      when "001"  => readdata(nbits-1 downto 0) := r.adc_reg;
65
      when others => null;
66
    end case;
67
 
68
-- write registers
69
    if (apbi.psel(pindex) and apbi.penable and apbi.pwrite) = '1' then
70
      case apbi.paddr(4 downto 2) is
71
        when "000"  => v.dac_reg := apbi.pwdata(nbits-1 downto 0);
72
        when "001"  => null;
73
        when others => null;
74
      end case;
75
    end if;
76
 
77
-- update ADC value
78
    if valid = '1' then
79
      v.adc_reg := adc_out_par;
80
    end if;
81
 
82
-- reset operation
83
    if rst = '0' then
84
      v.dac_reg := (others => '0');
85
      v.adc_reg := (others => '0');
86
    end if;
87
 
88
    rin <= v;
89
 
90
    apbo.prdata <= readdata;            -- drive apb read bus
91
    apbo.pirq   <= (others => '0');
92
  end process comb;
93
 
94
  apbo.pindex  <= pindex;
95
  apbo.pconfig <= pconfig;
96
 
97
-- registers
98
 
99
  regs : process(clk)
100
  begin
101
    if rising_edge(clk) then r <= rin; end if;
102
  end process;
103
 
104
  rst_inv <= not rst;
105
 
106
  dac : sigdelt
107
    generic map (
108
      c_dacin_length => nbits)
109
    port map (
110
      reset   => rst_inv,
111
      clock   => clk,
112
      dac_in  => r.dac_reg(nbits-1 downto 0),
113
      dac_out => adcdaco.dac_out);
114
 
115
  adc : adc_sigdelt
116
    generic map (
117
      c_adcin_length => nbits)
118
    port map (
119
      rstn    => rst,
120
      clk     => clk,
121
      valid   => valid,
122
      adc_fb  => adcdaco.adc_fb,
123
      adc_out => adc_out_par,
124
      adc_in  => adcdaci.adc_in);
125
 
126
-- boot message
127
 
128
-- pragma translate_off
129
  bootmsg : report_version
130
    generic map ("adcdac" & tost(pindex) &
131
                 ": " & tost(nbits) & "-bit ADC/DAC core rev " & tost(REVISION));
132
-- pragma translate_on
133
 
134
end architecture rtl;

powered by: WebSVN 2.1.0

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