aboutsummaryrefslogtreecommitdiff
path: root/src/de1_matlab_dds_adda.vhd
blob: a6546f6c2cf97b368bd437f788f37fc14a01f9f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
-------------------------------------------------------------------------------
-- Module     : de1_matlab_dds_adda
-------------------------------------------------------------------------------
-- Author     : Matthias Kamuf
-- Company    : University of Applied Sciences Augsburg
-------------------------------------------------------------------------------
-- Description: Top-level of module de1_matlab_dds_adda
--              
-------------------------------------------------------------------------------
-- Revisions  : see end of file
-------------------------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;

ENTITY de1_matlab_dds_adda IS
  PORT (
    CLOCK_50  : IN  std_ulogic;
    KEY0      : IN  std_ulogic;
    DAC_MODE  : OUT std_ulogic;
    DAC_WRT_A : OUT std_ulogic;
    DAC_WRT_B : OUT std_ulogic;
    DAC_CLK_A : OUT std_ulogic;
    DAC_CLK_B : OUT std_ulogic;
    DAC_DA    : OUT std_ulogic_vector(13 DOWNTO 0);
    DAC_DB    : OUT std_ulogic_vector(13 DOWNTO 0);
    POWER_ON  : OUT std_ulogic;
    ADC_CLK_A : OUT std_ulogic;
    ADC_CLK_B : OUT std_ulogic;
    ADC_OEB_A : OUT std_ulogic;
    ADC_OEB_B : OUT std_ulogic;
    LEDR      : OUT std_ulogic);
END de1_matlab_dds_adda;

ARCHITECTURE structure OF de1_matlab_dds_adda IS

  -- Matlab-generated toplevel
  COMPONENT ml_dds_adda IS
    PORT (
      clk      : IN  std_ulogic;
      rst_n    : IN  std_ulogic;
      valid_o  : OUT std_ulogic;
      sample_o : OUT std_ulogic_vector(13 DOWNTO 0));
  END COMPONENT ml_dds_adda;

  -- component ports
  SIGNAL clk    : std_ulogic;
  SIGNAL rst_n  : std_ulogic;
  SIGNAL valid  : std_ulogic;
  SIGNAL sample : std_ulogic_vector(13 DOWNTO 0);

BEGIN

  sinegen : ml_dds_adda
    PORT MAP (
      clk_     => clk,
      rst_n    => rst_n,
      valid_o  => valid,
      sample_o => sample);

  -- clock and reset signal
  clk   <= CLOCK_50;
  rst_n <= KEY0;

  -- valid indicator
  LEDR <= valid;

  -- DAC in dual-port mode
  DAC_MODE <= '1';

  DAC_WRT_A <= clk;
  DAC_WRT_B <= clk;
  DAC_CLK_A <= clk;
  DAC_CLK_B <= clk;

  -- DAC on board has 00000000000000 as minimum value
  -- and              11111111111111 as maximum value
  -- therefore the conversion has to look like this
  --             input signed value              output DAC value
  -- minimum     10000000000000                  00000000000000
  -- zero        00000000000000                  10000000000000
  -- maximum     01111111111111                  11111111111111

  -- assign to DAC channels
  DAC_DA <= "10000000000000" WHEN rst_n = '0' ELSE (NOT(sample(13)) & sample(12 DOWNTO 0)) WHEN falling_edge(clk);
  DAC_DB <= "10000000000000" WHEN rst_n = '0' ELSE "10000000000000" WHEN falling_edge(clk);

  -- ADC section all off!
  ADC_CLK_A <= '0';
  ADC_CLK_B <= '0';
  ADC_OEB_A <= '0';
  ADC_OEB_B <= '0';

  -- switch on DAC/ADC
  POWER_ON <= '1';

END structure;

-------------------------------------------------------------------------------
-- Revisions:
-- ----------
-- $Id:$
-------------------------------------------------------------------------------