aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/vests/vhdl-ams/ashenden/compliant/AMS_CS4_RF_IC/bfsk.vhd
blob: 96cc54e425a65e86f5dae843ae8e4c3583294f0f (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
-- Copyright (C) 2002 Morgan Kaufmann Publishers, Inc

-- This file is part of VESTs (Vhdl tESTs).

-- VESTs is free software; you can redistribute it and/or modify it
-- under the terms of the GNU General Public License as published by the
-- Free Software Foundation; either version 2 of the License, or (at
-- your option) any later version. 

-- VESTs is distributed in the hope that it will be useful, but WITHOUT
-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-- for more details. 

-- You should have received a copy of the GNU General Public License
-- along with VESTs; if not, write to the Free Software Foundation,
-- Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 

library ieee, ieee_proposed;
use ieee_proposed.electrical_systems.all;
use ieee.std_logic_1164.all;
use ieee.math_real.all;

entity bfsk is

  generic ( fc : real := 1.0e6;		-- mean carrier frequency
            delta_f : real := 5.0e3;    -- difference between low and high
                                        --   carrier frequencies
            amp : voltage := 1.0;	-- amplitude of modulated signal
            offset : voltage := 0.0 );  -- output offset voltage

  port ( signal d_in : in std_logic;	 -- digital input
         terminal a_out : electrical );  -- output terminal

end entity bfsk; 

----------------------------------------------------------------

architecture behavioral of bfsk is

  quantity vout across iout through a_out;         -- output branch
  quantity phi : real; 		                   -- free quantity angle in radians
  constant wc : real := math_2_pi * fc;		   -- convert fc to rad/s
  constant delta_w : real := math_2_pi * delta_f;  -- convert delta_f to rad/s

begin

  if To_X01(d_in) = '0' use
    phi'dot == wc; 		-- set to carrier frequency
  elsif To_X01(d_in) = '1' use
    phi'dot == wc + delta_w;	-- set to carrier frequency + delta
  else
    phi'dot == 0.0;
  end use;

  break on d_in;

  vout == offset + amp * sin(phi);  -- create sinusoidal output using phi

end architecture behavioral;