Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
20 Июль 2025, 11:26:07
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование > Тема: Re: VHDL
(Модераторы: Админ, barmalei) > Тема:

Сообщение #12311500

Страниц  :   Вниз
  Печать  
Автор Тема: Re: VHDL  (Прочитано 3044 раз)
0 Пользователей и 1 Гость смотрят эту тему.
egor22013
Новенький


Репутация: +0/-0
Offline Offline

Сообщений: 1

Просмотр профиля Email
« Ответ #0 : 08 Январь 2014, 17:29:05 »

Ребят, есть вопрос, помогите. Мне нужно написать код на VHDL фазовой автоподстройки частоты. Вроде написал, но проверяя его в программе modelsim вижу, что сигналу outbuf не присваивается значение, а, соответственно, и код неверный. Подскажите, где ошибка?

Код:
______________

Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity diplom is
port (vhod: in std_logic;
      rst: in std_logic;
      IDCLK: in std_logic;
      KCLK: in std_logic;
      vyhod: out std_logic);
     
end diplom;

architecture behaviour of diplom is
  signal carry, borrow, direction, idout: std_logic;
  signal outbuf: std_logic;
begin
 
  process(rst,vhod,outbuf)
  begin
    if rst='1' then
      outbuf<='0';
    end if;
  end process;
 
  direction<= vhod xor outbuf;
   
  process(kclk,rst)
     variable k:integer range 0 to 15;
  begin
    if rst='1' then
      k:=0;
    elsif kclk='1' and kclk'event then
      if carry='1' then
        carry<= '0';
      end if;
      if borrow='1' then
        borrow<='0';
      end if;
      if direction='1' then
        if k=15 then
          k:=0;
          carry<='1';
        else
          k:=k+1;
        end if;
      else
        if k=0 then
          k:=15;
          borrow<='1';
        else
          k:=k-1;
        end if;
      end if;
    end if;
  end process;
 
  process(idclk)
    variable m: std_logic;
  begin
    if idclk='1' and idclk'event then
       if carry='1' then
         idout <= '1';
       elsif borrow='1' then
         idout <= '0';
       elsif m='0' then
         idout <= '1';
         m :='1';
       else
         idout <= '0';
         m := '0';
       end if;     
    end if;
  end process;
 
  process(idout,rst)
    variable k:integer range 0 to 127;
  begin
    if rst='1' then
      k:=0;
    elsif idout='1' and idout'event then
      if k=127 then
        k:=0;
        outbuf<= not outbuf;
      else
        k:=k+1;
      end if;
     
    end if;
  end process;
 
  vyhod<= outbuf;
 
 end behaviour;
Записан
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2025, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,076 секунд. Запросов: 20.