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

Subversion Repositories rs232_with_buffer_and_wb

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /rs232_with_buffer_and_wb
    from Rev 32 to Rev 33
    Reverse comparison

Rev 32 → Rev 33

/trunk/tb_rx_fifo.vhd
9,7 → 9,7
architecture behaviour of fifo_rx_tb is
 
component rx_fifo is
generic(fifo_entries_pow2 : integer := 3);
generic(address_width : integer := 3);
port( clk, reset : in std_logic;
read_rx_data : in std_logic;
rx_data : out std_logic_vector(7 downto 0);
24,7 → 24,7
port( clk, reset, rx_enable : in std_logic;
rx : in std_logic;
word_width : in std_logic_vector(3 downto 0);
period : in std_logic_vector(15 downto 0);
baud_period : in std_logic_vector(15 downto 0);
use_parity_bit, parity_type : in std_logic;
stop_bits : in std_logic_vector(1 downto 0);
idle_line_lvl : in std_logic;
37,7 → 37,7
end component;
 
component tx_fifo is
generic(fifo_entries_pow2 : integer := 8);
generic(address_width : integer := 8);
port( clk, reset : in std_logic;
write_tx_data : in std_logic;
tx_data : in std_logic_vector(7 downto 0);
52,9 → 52,9
component tx_func is
port( clk, reset : in std_logic;
data : in std_logic_vector(7 downto 0);
new_data : in std_logic;
transmit_data : in std_logic;
word_width : in std_logic_vector(3 downto 0);
full_cycle : in std_logic_vector(15 downto 0);
baud_period : in std_logic_vector(15 downto 0);
use_parity_bit, parity_type : in std_logic;
stop_bits : in std_logic_vector(1 downto 0);
idle_line_lvl : in std_logic;
69,7 → 69,7
--General signals for setup of rx_func and tx_func
signal word_width : std_logic_vector(3 downto 0) := "1000";
signal period : std_logic_vector(15 downto 0) := "0000000000100000";
signal baud_period : std_logic_vector(15 downto 0) := "0000000000100000";
signal use_parity_bit : std_logic := '0';
signal parity_type : std_logic := '0';
signal stop_bits : std_logic_vector(1 downto 0) := "01";
80,7 → 80,7
--rx_fifo signals
signal rx_fifo_full, rx_fifo_empty : std_logic;
signal rx_fifo_entries_free : std_logic_vector(7 downto 0);
signal rx_data : std_logic_vector(7 downto 0) := "00000000"; --fifo source data
signal rx_data : std_logic_vector(7 downto 0) := "11111111"; --fifo source data
signal read_rx_data : std_logic := '0';
--rx_func
104,6 → 104,13
signal tx_func_data : std_logic_vector(7 downto 0); --bus between fifo and tx_func, fifo being source, tx_fun being sink
signal tx_func_apply_data : std_logic;
signal tx_func_sending : std_logic;
--
type expected_output_buf_type is array (0 to 500) of std_logic_vector(7 downto 0);
signal expected_output : expected_output_buf_type;
signal index_in, index_in1, index_out : integer := 0;
signal expected : std_logic_vector(7 downto 0);
signal delayed_rx_data : std_logic_vector(7 downto 0);
 
begin
 
111,13 → 118,13
uut0 : rx_fifo generic map (3) port map (clk, reset, read_rx_data, rx_data, rx_fifo_full, rx_fifo_empty, rx_fifo_entries_free, rx_func_data, rx_func_data_ready);
 
--only use to exercise rx_fifo
uut1 : rx_func port map (clk, reset, rx_enable, txrx, word_width, period, use_parity_bit, parity_type, stop_bits, idle_line_lvl, start_samples, line_samples, rx_func_data, rx_func_data_ready, parity_error, stop_bit_error);
uut1 : rx_func port map (clk, reset, rx_enable, txrx, word_width, baud_period, use_parity_bit, parity_type, stop_bits, idle_line_lvl, start_samples, line_samples, rx_func_data, rx_func_data_ready, parity_error, stop_bit_error);
 
--only use to exercise rx_fifo
uut2 : tx_fifo generic map (3) port map (clk, reset, write_tx_data, tx_data, tx_fifo_full, tx_fifo_empty, tx_fifo_entries_free, tx_func_data, tx_func_apply_data, tx_func_sending);
 
--only use to exercise rx_fifo
uut3 : tx_func port map (clk, reset, tx_func_data, tx_func_apply_data, word_width, period, use_parity_bit, parity_type, stop_bits, idle_line_lvl, txrx, tx_func_sending);
uut3 : tx_func port map (clk, reset, tx_func_data, tx_func_apply_data, word_width, baud_period, use_parity_bit, parity_type, stop_bits, idle_line_lvl, txrx, tx_func_sending);
 
clk_process : process
begin
170,11 → 177,142
read_rx_data <= '1';
wait for 2 ns;
read_rx_data <= '0';
wait for 2 ns;
read_rx_data <= '1';
wait for 2 ns;
while rx_fifo_full = '0' loop
wait for 2 ns;
end loop;
wait for 10 ns;
while rx_fifo_empty = '0' loop
read_rx_data <= '1';
wait for 2 ns;
end loop;
read_rx_data <= '0';
--wait for 2 ns;
--read_rx_data <= '1';
--wait for 2 ns;
--read_rx_data <= '0';
--wait for 2 ns;
--read_rx_data <= '1';
--wait for 2 ns;
--read_rx_data <= '0';
wait;
end process;
expected_output_buffer : process
begin
wait until reset = '1';
wait until reset = '0';
while true loop
wait until write_tx_data = '1';
wait for 0.1 ns;
while write_tx_data = '1' loop
expected_output(index_in) <= tx_data;
index_in <= index_in + 1;
wait for 2 ns;
end loop;
end loop;
end process;
signal_intregrity_process : process
begin
wait until reset = '1';
wait until reset = '0';
--check each signal send
while true loop
--wait for start bit
wait until txrx = not idle_line_lvl;
expected <= expected_output(index_out);
index_out <= index_out + 1;
wait for 3 ns;
--bit 0
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = expected(0) report "wrong data bit0" severity error;
--bit 1
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = expected(1) report "wrong data bit1" severity error;
--bit 2
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = expected(2) report "wrong data bit2" severity error;
--bit 3
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = expected(3) report "wrong data bit3" severity error;
 
--bit 4
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = expected(4) report "wrong data bit4" severity error;
if word_width > "0101" then
--bit 5
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = expected(5) report "wrong data bit5" severity error;
if word_width > "0110" then
--bit 6
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = expected(6) report "wrong data bit6" severity error;
if word_width > "0111" then
--bit 7
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = expected(7) report "wrong data bit7" severity error;
end if;
end if;
end if;
if use_parity_bit = '1' then
--bit party_bit
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = expected(1) report "wrong parity bit" severity error;
end if;
--stop bit 1
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = idle_line_lvl report "wrong stop bit1" severity error;
 
if stop_bits = "10" then
--stop bit 2
wait for clk_period * conv_integer(baud_period); --wait a bit for next bits
assert txrx = idle_line_lvl report "wrong stop bit2" severity error;
end if;
end loop;
end process;
rx_signal_test : process
begin
wait until reset = '1';
wait until reset = '0';
while true loop
wait until read_rx_data = '1' and rx_fifo_empty = '0';
wait for 0.1 ns;
assert delayed_rx_data = expected_output(index_in1) report "wront output" severity error;
index_in1 <= index_in1 + 1;
wait for 2 ns;
while read_rx_data = '1' and rx_fifo_empty = '0' loop
assert delayed_rx_data = expected_output(index_in1) report "wront output" severity error;
index_in1 <= index_in1 + 1;
wait for 2 ns;
end loop;
end loop;
end process;
delay_signal : process
begin
wait for 1.75 ns;
while true loop
delayed_rx_data <= rx_data;
wait for 2 ns;
end loop;
end process;
end behaviour;

powered by: WebSVN 2.1.0

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