¿Cómo sobrescribo los valores genéricos en un banco de pruebas VHDL?

-1

Soy nuevo en VHDL, y estoy trabajando con un UART bloque . Estoy intentando crear un banco de pruebas y anular el ancho de datos, pero recibo errores que dicen que mis señales no están declaradas:

  

ERROR - C: / Usuarios / xxx / Documentos / VHDL / Digikey   UART / tb_uart.vhd (41,24-41,32) (VHDL-1241) clk_freq no está declarado

     

ERROR - C: / Usuarios / xxx / Documentos / VHDL / Digikey   UART / tb_uart.vhd (42,24-42,33) (VHDL-1241) no se declara tasa de baudios

     

ERROR - C: / Usuarios / xxx / Documentos / VHDL / Digikey   UART / tb_uart.vhd (43,24-43,31) (VHDL-1241) os_rate no se declara

     

etc ...

He revisado muchos ejemplos y no estoy seguro de qué es lo que está mal con mi código, pero sospecho que es un problema de sintaxis.

No haré realidad mi banco de pruebas hasta que tenga un mejor manejo de mi problema. Estoy usando Lattice Diamond 3.10.

library ieee;
use ieee.std_logic_1164.all;

-- entity declaration
entity tb_uart is
end tb_uart;

-- architecture declaration
architecture bhv of tb_uart is
    -- instantiate uart block
    component uart 
        generic (
            clk_freq   : integer    := 50_000_000;
            baud_rate   : integer   := 19_200;
            os_rate     : integer   := 16; -- oversampling rate
            d_width     : integer   := 18; -- bits sent/received
            parity      : integer   := 1;
            parity_eo   : std_logic := '0' -- '0' for even, '1' for odd
        );
        port (
            clk     : in std_logic;
            reset_n : in std_logic;
            tx_ena  : in std_logic;
            tx_data : in std_logic_vector(d_width-1 downto 0);
            rx      : in std_logic;
            rx_busy : out std_logic;
            rx_error: out std_logic;
            rx_data : out std_logic_vector(d_width-1 downto 0);
            tx_busy : out std_logic;
            tx      : out std_logic
        );
    end component;

    -- signals & constants
    signal tx_to_rx : std_logic;
    constant  clk_per : time := 1_000_000_000 / clk_freq;        

    begin

    u1: uart
    generic map (
        clk_freq    => clk_freq,
        baud_rate   => baud_rate,
        os_rate     => os_rate,
        d_width     => d_width,
        parity      => parity,
        parity_eo   => parity_eo
    )
    port map (
        clk     => clk,
        reset_n => reset_n,
        tx_ena  => tx_ena,
        tx_data => tx_data,
        rx      => rx,
        rx_busy => rx_busy,
        rx_error => rx_error,
        rx_data => rx_data,
        tx_busy => tx_busy,
        tx      => tx
    );


    clk_gen:

    process
    begin
        clk <= '0';
        wait for ( clk_per ns);
        clk <= '1';
        wait for ( clk_per ns);
    end process;

 end bhv;
    
pregunta schadjo

1 respuesta

0

En su generic map , ha asignado el parámetro formal clk_freq a un símbolo local del mismo nombre, pero este símbolo local no existe en su banco de pruebas.

Debería asignarlo a un valor específico, o si desea utilizar el valor predeterminado, no debe asignarlo en absoluto.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas