Escribí en un procedimiento el comportamiento de una transacción SPI simple que uso en mis bancos de prueba para facilitar la escritura y la lectura.
¿Hay alguna forma de hacer que este procedimiento sea lo más genérico posible sin mencionar el tamaño del vector data
dado como parámetro? ¿O tal vez agregar un parámetro de tamaño como un entero?
Aquí está el procedimiento que estoy usando hasta ahora. Por ahora tengo una declaración de procedimiento para cada tamaño de vector que quiero transferir.
procedure spi_transfer_3B(data : std_logic_vector(23 downto 0)) is
variable bitCnt : integer := data'length-1;
begin
spi_clk <= '0';
spi_mosi <= 'Z';
spi_ss <= '0';
wait until rising_edge(clk);
for i in 2*data'length-1 downto 0 loop
wait for SPI_CLK_PERIOD/2;
spi_clk <= not spi_clk;
if spi_clk = '0' then
spi_mosi <= data(bitCnt);
bitCnt := bitCnt -1;
end if;
end loop;
spi_clk <= '0';
wait until rising_edge(clk);
spi_ss <= '1';
spi_mosi <= 'Z';
end spi_transfer_3B;
¿Qué piensas?