ну не работает оно так :(((
в этом месте LEDS<=countLEDs;
Ругается :(((
<{POST_SNAPBACK}>
Переменные внутри процесса использовать можно, нужно просто понимать их отличие от сигналов. А на счёт внешних shared variables, IMHO можно спокойно описывать и синтезировать логику и без их использования. Тем более если вы уверены, что синтезатор их не поддерживает.
А код ваш может выглядеть примерно так:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity led_blink is
Port (
LED : out std_logic;
CLK : in std_logic;
LEDS: out std_logic_vector(15 downto 0)
);
--shared variable countLEDs: integer range 0 to 65535:=0;
end led_blink;
architecture RTL of led_blink is
--signal countLEDs : integer range 0 to 65535:=0;
signal countL : std_logic_vector(25 downto 0) := (others => '0');
begin
increment: process (CLK) begin
if(clk'event and clk = '1') then
countL <= countL + 1;
end if;
end process;
l_count:
process (countL(25))
Variable countLEDs : integer range 0 to 65535:=0;
begin
if(countL(25)'event and countL(25) = '1') then
countLEDs := countLEDs + 1; -- считаем кол-во миганий
LEDS <= CONV_STD_LOGIC_VECTOR(countLEDs, 16); -- вывожу на 16 светодиодиков
end if;
end process;
LED <= std_logic(countL(25)); -- мигает светодиодик с заданной частатой
--countLEDs <= countLEDs + 1; -- считаем кол-во миганий
--LEDS <= CONV_STD_LOGIC_VECTOR(countLEDs, 16); -- вывожу на 16 светодиодиков
end RTL;
Можете использовать хоть переменную countLEDs внутри процесса, хоть сигнал countLEDs. Разница в том, переменная countLEDs будет видима только внутри процесса и на 1 такт опережать сигнал countLEDs.