entity forloop is
end forloop;

architecture behav of forloop is
    signal clk : bit;
    signal rst : bit := '1';
    signal tx : bit;
    signal data : bit_vector (7 downto 0);
    signal valid : bit;
    signal err : bit;
begin
    process
        procedure pulse is
        begin
            clk <= '0';
            wait for 1 ns;
            clk <= '1';
            wait for 1 ns;
        end pulse;
        variable txdata : bit_vector (7 downto 0);
    begin
        rst <= '1';
        tx <= '1';
        pulse;
        rst <= '0';
        
        --  Transmit 1 byte.
        tx <= '0';
        pulse;
        assert err = '0' and valid = '0' severity error;
        txdata :
        for i in txdata'reverse_range loop
            tx <= txdata(i);
            pulse;
            assert err = '0' and valid = '0' severity error;
        end loop;
        tx <= '1';  -- parity
        pulse;
        tx <= '1';  --  stop
        pulse;
        assert valid = '1' severity error;
        assert err = '0' severity error;
        assert data = txdata;
        wait;
    end process;
end behav;