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

Синхронный счетчик с асинхронной загрузкой

Пытаюсь сделать такой в ISE6... под XC9500

 

Правильно ли так его описывать:

entity cc8mm is
   port ( C    : in    std_logic; 
          DI   : in    std_logic_vector (7 downto 0); 
          L    : in    std_logic; 
          LE   : in    std_logic; 
          OE   : in    std_logic; 
          CLR  : in    std_logic;  
          P    : out   std_logic);
end cc8mm;

architecture count_down of cc8mm is

Signal TempC : std_logic_vector ( 7 downto 0):= "00000000";
Signal TC    : std_logic_vector ( 7 downto 0):= "00000000";

begin

  process(CLR,C,DI,L)
  begin
    if LE='1' then
       TempC  <= DI;
      TC     <= TempC;
    elsif L = '1' then
          TC     <= TempC;
       elsif CLR='1' then 
             TC <= "00000001";
          elsif C'event and C='1' and OE='0' then
                 TC <= TC -1;
    end if; 
  end process;
   
  process( TC )
  begin
    if TC = "00000000" and OE='0' then
       p <= '1';
    else 
       p <= '0';
    end if;
    end process;

end count_down;

 

смысл, что при LE =1 грузиться постоянно, и сохраняется последнее значение.. а потом работа как обычного синхронного счетчика вниз, с асинхронной загрузкой.

 

 

в этом варианте настораживает использование слишком большого кол-а ресурсов кристалла, но при этом максимальное быстродействие, по сравнению со схемным построением

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли так его описывать:

 

Actel HDL CodingStyle Guide http://www.actel.com

тоже есть и у Ксайлинкса... И у Альтеры...

Выучить... Не задавать больше таких вопросов...

Спрашивать: "Где взять учебник?"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Где взять учебник?"

 

НЕ Аctel? понятный) ... можно даже на русском)

а еще, если не сложно - ткните носом в те ужасы, которые вы увидели...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

НЕ Аctel? понятный) ... можно даже на русском)

а еще, если не сложно - ткните носом в те ужасы, которые вы увидели...

У Актела прочитать раздел "Кодирование, независимое от аппаратной платформы"... Это годится для всех типов чипов.

Суворова, Шейнин,

Илья Тарасов,

Все учебники по VHDL наизусть не помню...

Из тех, где есть VHDL и Verilog - это:

2.9. Языки VHDL и VERILOG в проектировании цифровой аппаратуры. А.К. Поляков. изд. Солон 2003г.

2.10. ПЛИС фирмы ALTERA: элементная база, система проектирования и языки описания аппаратуры. В.Б. Стешенко. изд. Додэка-ХХI 2007г.

2.11. Xilinx Synthesis Technology (XST) User Guide. 1991-2000 Xilinx,

 

ужасы, вот только первый:

 

if LE='1' then

TempC <= DI;

TC <= TempC;

здесь значение DI назначается переменной TempC. В это же время переменной TC назначается значение - какое???

И где вот такое описание фронта - clk'event

Ведь это сброс, а какое значение у TempC было до сброса???

 

Короче Открыть ИСЕ на любом текстовом файле, найти в меню Edit пункт о шаблонах языка и выбирать нужные шаблоны, а на лепить черт знает что...

И читать учебники...

Удачи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если описать счетчик так:

entity cc8mm is
   port ( C    : in    std_logic; 
          DI   : in    std_logic_vector (7 downto 0); 
          L    : in    std_logic; 
          OE   : in    std_logic; 
          CLR  : in    std_logic;  
          P    : out   std_logic);
end cc8mm;

architecture count_down of cc8mm is

Signal TC    : std_logic_vector ( 7 downto 0):= "00000000";

begin

  process(CLR,C,L)
  begin
    if CLR='1' then 
        TC <= "00000001";
      elsif L = '1' then
          TC     <= DI;
        elsif C'event and C='1' then
               if OE ='1' then
                 TC <= TC -1;
             end if;
      end if; 
  end process;
   
  process( TC )
  begin
    if TC = "00000000" then
       p <= '1';
    else 
       p <= '0';
    end if;
    end process;

end count_down;

 

а остальное схемно сделать:

 

Будет лучше?

post-28118-1204113268_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...