Перейти к содержанию
    

tocha

Свой
  • Постов

    92
  • Зарегистрирован

  • Посещение

Весь контент tocha


  1. Питание надо подавать на все ноги VCCio и VCCint. на VCCio то напряжение, от которого работает ядро ПЛИС, на VCCint то напряжение, которое хотите получить на ее выходах(если ЛИС это поддерживает). <{POST_SNAPBACK}> Ноборот.
  2. architecture RTL of led_blink is --signal countLEDs : integer range 0 to 65535:=0; --signal countL : std_logic_vector(39 downto 0) := (others => '0'); begin increment: process (CLK) Variable countL : std_logic_vector(39 downto 0) := (others => '0'); begin if(clk'event and clk = '1') then countL := countL + 1; --считаем кол-во миганий end if; LED <= std_logic(countL(23)); -- мигает светодиодик с заданной частатой LEDS <= countL(39 downto 24); -- вывожу на 16 светодиодиков end process; end RTL;
  3. мало того вот эта строка countLEDs := countLEDs + 1; -- считаем кол-во миганий ситезиться то правильно, но при длительной симуляции вылетит ошибка (на 65535 ом такте счета этого счетчика) :)) <{POST_SNAPBACK}> Здаюсь. l_count: process (CLK) Variable countLEDs : std_logic_vector(15 downto 0) := (others => '0'); begin if(CLK'event and CLK = '0') then if countL(25 downto 0) = 1 then countLEDs := countLEDs + '1'; -- считаем кол-во миганий end if; end if; LEDS <= countLEDs; -- вывожу на 16 светодиодиков end process;
  4. ну не работает оно так :((( в этом месте 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.
  5. Стандарт VHDL допускает определение именно таких (shared variables) в области ENTITY или ARCHITECTURE. Но т.к. синтезаторы поддерживают не весь стандарт, а только его часть, то возможно именно ваш синтезатор просто не пропустит такую переменную. Precision например пропускает, а ваш может нет. Другой вопрос: зачем она вам нужна, если вы делаете первые шаги. IMHO на первых шагах можно спокойно обойтись и без shared variables.
  6. Попробуй задать свои вопросы здесь http://www.telesys.ru/wwwboards/fpga/index.shtml
  7. Имена цепей и шин посредством которых эти блоки соединяются между собой
  8. Состоит из двух тригеров и счётчика. Много где описан.
  9. Если надо сформировать по фронту короткий импульс длительностью в один такт частоты, ставишь двухбитный сдвиговый регистр, и компаратор, который при комбинации в нём "01" выдаёт единицу. Получается например "01" - положительный фронт, "10" - отрицателльный, или наоборот, смотря в какую сторону сдвигать.
×
×
  • Создать...