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] - Rev 2

Compare with Previous | Blame | View Log

------------------------------------------------------------------------
-- Engineer:    Dalmasso Loic
-- Create Date: 30/01/2025
-- Module Name: SignalGenerator
-- Description:
--      Simple ROM-based Signal Generator Module with PWM. Selector allows to switch to several signal types:
--          - Sine
--          - Triangle
--          - Sawtooth
--          - Square
--      User specifies the signal waveform accuracy (depth & size of ROM) in bits, the expected frequency output and a frequence error range in Hz.
--
-- Generics
--      sys_clock: System Input Clock Frequency (Hz)
--      waveform_addr_bits: ROM Address Bits length
--      waveform_data_bits: ROM Data Bits length
--		signal_output_freq: Signal Output Frequency (Hz)
--		signal_output_freq_error: Range of Signal Output Error Range (Hz)
-- Ports
--		Input 	-	i_sys_clock: System Input Clock
--		Input 	-	i_reset: Reset ('0': No Reset, '1': Reset)
--		Input 	-	i_waveform_select: Waveform Generator Type Selector ("00": Sine, "01": Triangle, "10": Sawtooth, "11": Square)
--		Output 	-	o_signal: Signal Ouput Value
------------------------------------------------------------------------
 
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
 
ENTITY Testbench_SignalGenerator is
END Testbench_SignalGenerator;
 
ARCHITECTURE Behavioral of Testbench_SignalGenerator is
 
COMPONENT SignalGenerator is
 
    GENERIC(
        sys_clock: INTEGER := 100_000_000;
        waveform_addr_bits: INTEGER range 1 to 30 := 8;
        waveform_data_bits: INTEGER range 1 to 31 := 8;
        signal_output_freq: INTEGER := 7;
        signal_output_freq_error: INTEGER := 1
    );
 
    PORT(
        i_sys_clock: IN STD_LOGIC;
        i_reset: IN STD_LOGIC;
        i_waveform_select: IN STD_LOGIC_VECTOR (1 downto 0);
        o_signal: OUT STD_LOGIC
    );
 
END COMPONENT;
 
signal clock: STD_LOGIC := '0';
signal reset: STD_LOGIC := '0';
signal waveform_select: STD_LOGIC_VECTOR(1 downto 0) := (others => '0');
signal output_signal: STD_LOGIC := '0';
 
begin
 
-- Clock 100 MHz
clock <= not(clock) after 5 ns;
 
-- Reset
reset <= '1', '0' after 145 ns;
 
-- Waveform Select
waveform_select <= "00", "01" after 150 ms, "10" after 300 ms, "11" after 450 ms;
 
uut: SignalGenerator
    GENERIC map(
        sys_clock => 100_000_000,
        waveform_addr_bits => 8,
        waveform_data_bits => 8,
        signal_output_freq => 7,
        signal_output_freq_error => 1)
 
    PORT map(
        i_sys_clock => clock,
        i_reset => reset,
        i_waveform_select=> waveform_select,
        o_signal => output_signal);
 
end Behavioral;
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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