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

Subversion Repositories signal_waveform_generator

[/] [signal_waveform_generator/] [trunk/] [hw/] [simulations/] [Testbench_SignalGenerator.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 ldalmasso
------------------------------------------------------------------------
2
-- Engineer:    Dalmasso Loic
3
-- Create Date: 30/01/2025
4
-- Module Name: SignalGenerator
5
-- Description:
6
--      Simple ROM-based Signal Generator Module with PWM. Selector allows to switch to several signal types:
7
--          - Sine
8
--          - Triangle
9
--          - Sawtooth
10
--          - Square
11
--      User specifies the signal waveform accuracy (depth & size of ROM) in bits, the expected frequency output and a frequence error range in Hz.
12
--
13
-- Generics
14
--      sys_clock: System Input Clock Frequency (Hz)
15
--      waveform_addr_bits: ROM Address Bits length
16
--      waveform_data_bits: ROM Data Bits length
17
--              signal_output_freq: Signal Output Frequency (Hz)
18
--              signal_output_freq_error: Range of Signal Output Error Range (Hz)
19
-- Ports
20
--              Input   -       i_sys_clock: System Input Clock
21
--              Input   -       i_reset: Reset ('0': No Reset, '1': Reset)
22
--              Input   -       i_waveform_select: Waveform Generator Type Selector ("00": Sine, "01": Triangle, "10": Sawtooth, "11": Square)
23
--              Output  -       o_signal: Signal Ouput Value
24
------------------------------------------------------------------------
25
 
26
LIBRARY IEEE;
27
USE IEEE.STD_LOGIC_1164.ALL;
28
USE IEEE.NUMERIC_STD.ALL;
29
 
30
ENTITY Testbench_SignalGenerator is
31
END Testbench_SignalGenerator;
32
 
33
ARCHITECTURE Behavioral of Testbench_SignalGenerator is
34
 
35
COMPONENT SignalGenerator is
36
 
37
    GENERIC(
38
        sys_clock: INTEGER := 100_000_000;
39
        waveform_addr_bits: INTEGER range 1 to 30 := 8;
40
        waveform_data_bits: INTEGER range 1 to 31 := 8;
41
        signal_output_freq: INTEGER := 7;
42
        signal_output_freq_error: INTEGER := 1
43
    );
44
 
45
    PORT(
46
        i_sys_clock: IN STD_LOGIC;
47
        i_reset: IN STD_LOGIC;
48
        i_waveform_select: IN STD_LOGIC_VECTOR (1 downto 0);
49
        o_signal: OUT STD_LOGIC
50
    );
51
 
52
END COMPONENT;
53
 
54
signal clock: STD_LOGIC := '0';
55
signal reset: STD_LOGIC := '0';
56
signal waveform_select: STD_LOGIC_VECTOR(1 downto 0) := (others => '0');
57
signal output_signal: STD_LOGIC := '0';
58
 
59
begin
60
 
61
-- Clock 100 MHz
62
clock <= not(clock) after 5 ns;
63
 
64
-- Reset
65
reset <= '1', '0' after 145 ns;
66
 
67
-- Waveform Select
68
waveform_select <= "00", "01" after 150 ms, "10" after 300 ms, "11" after 450 ms;
69
 
70
uut: SignalGenerator
71
    GENERIC map(
72
        sys_clock => 100_000_000,
73
        waveform_addr_bits => 8,
74
        waveform_data_bits => 8,
75
        signal_output_freq => 7,
76
        signal_output_freq_error => 1)
77
 
78
    PORT map(
79
        i_sys_clock => clock,
80
        i_reset => reset,
81
        i_waveform_select=> waveform_select,
82
        o_signal => output_signal);
83
 
84
end Behavioral;

powered by: WebSVN 2.1.0

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