Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
20 Июль 2025, 02:25:57
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Страниц  :   Вниз
  Печать  
Автор Тема: VHDL  (Прочитано 3039 раз)
0 Пользователей и 1 Гость смотрят эту тему.
VooDoo
Почетный гродненец
*****

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

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« : 19 Март 2006, 20:09:38 »

есть приимерно такая конструкция:

entity schema is
generic ([highlight]N[/highlight][/b]:integer)
portmap (a:mytype)
end schema;

а mytype должен быть такого типа:
type mytype is array(1 to [highlight]N[/highlight][/b]) of bit_vector(1 to 9);

так как мне определить тип, если его размерность передается через generic
« Последнее редактирование: 19 Март 2006, 20:10:27 от VooDoo » Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
Amon
Новенький


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

Пол: Мужской
Сообщений: 0


Просмотр профиля WWW
« Ответ #1 : 20 Март 2006, 19:09:58 »

что-то мне подсказывает что никак Подмигивающий
ибо VHDL - это не язык программирования. это язык описания схем.
а любую схему можно представить в виде транзисторов, резисторов и прочего.

ну и как ты предлагаешь спаять на транзисторах регистр переменной длины?  Смеющийся
я уже представляю резиновую микросхему памяти- надул- стало 10 гиг. сплюснул - опа, уже 512 мег
Записан
VooDoo
Почетный гродненец
*****

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

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« Ответ #2 : 20 Март 2006, 20:02:49 »

А ты понимаешь что бывает синтезируемое описание и НЕсинтезируемое.
Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
Amon
Новенький


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

Пол: Мужской
Сообщений: 0


Просмотр профиля WWW
« Ответ #3 : 22 Март 2006, 15:51:35 »

да, я в курсе.
однако меня не интересует то, что нельзя потрогать паяльником  Показывает язык

а вообще если тебе надо чисто теоритически, то попробуй поизголятся с "range <>"
Записан
Terros
Новенький


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

Сообщений: 1


Я люблю Гродненский форум!

Просмотр профиля Email
« Ответ #4 : 28 Май 2006, 21:38:29 »

 :)Ребята,кто разбирается в Vhdl?? помогите решит следующую задачу:
1. Написать на языке Vhdl "Автомат элекрического замка, с кнопками: 10 цыфрових, “вибор” та “запись кода”.
2. Написать на языке Vhdl Счетчик двоичный 4х-разрядный с возможностью параллельной записи состояния счетчика... За ранее благодарен.... в помощи... Улыбка
Записан
VooDoo
Почетный гродненец
*****

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

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« Ответ #5 : 29 Май 2006, 17:49:32 »

 Подмигивающий хех чувак. Сколько денег?
а если серьёзно, то надо знать до какой степени тебе это описывать. Можно просто написать функцию opendoor() и всё а можно описать все девайсы, допустим на элементах или-не. То же самое со счётчиком.
P.S. конкретизируй

P.P.S насчёт предыдущих постов: как оказалось такое реализовать нельзя! ибо нельзя описывать подобие динамических массивов на vhdl
Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
Amon
Новенький


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

Пол: Мужской
Сообщений: 0


Просмотр профиля WWW
« Ответ #6 : 29 Май 2006, 18:20:18 »

ну так а я про что говорил ?
Цитировать
что-то мне подсказывает что никак Подмигивание
Записан
VooDoo
Почетный гродненец
*****

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

Пол: Мужской
Сообщений: 2885


Dum spiro spero

Просмотр профиля WWW Email
« Ответ #7 : 30 Май 2006, 19:46:14 »

Цитировать
ну так а я про что говорил ?
Ты просто говорил, что нельзя это реализовать на транзисторах.
Ты же не могёшь использовать в описани integer ибо синтезироваться не будет. Но ведь он же есть и им пользоваться можно.
Записан

Are you human? - My body is.
Do you feel pain? - My body does.
..- --- --- -.. --- ---
Amon
Новенький


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

Пол: Мужской
Сообщений: 0


Просмотр профиля WWW
« Ответ #8 : 30 Май 2006, 20:04:55 »

я говорил что это сделать нельзя.
и чтоб было понятней почему - объяснил на пальцах (на транзисторах).
ибо перед этим я долго вкуривал google на предмет VHDL-а (сам я больше увлекаюсь Verilog-ом).
и согласись, получить мой ответ гораздо приятнее, чем что-нибудь в таком стиле:
Цитировать
Цитировать
так как мне определить тип, если его размерность передается через generic
никак. кури google аффтар
хотя как я начинаю замечать, подавляющее большинство понимает только второй вариант.
« Последнее редактирование: 30 Май 2006, 20:06:37 от Amon » Записан
Abraziv
Новенький


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

Сообщений: 2

Просмотр профиля Email
« Ответ #9 : 16 Декабрь 2012, 04:43:42 »

Всем привет описываю проект на VHDL , в проект входит описание автомата. На временных диаграммах состояние автомата обозначается как наинициализированное , если убрать память ( закоментировать) , то времянки начинают показывать первоначальное значение, пожалуйста подскажите что я делаю не так Непонимающий?

TRIG1_AVT : LATCH
port map( CLK => CLK,D => exсit_fun_line(0),Q => state_line(0));
TRIG2_AVT : LATCH
port map( CLK => CLK,D => exсit_fun_line(1),Q => state_line(1));


START : process
begin

-- функции возбуждения памяти (триггеров)

exсit_fun_line(0) <= ( (state_line(0) and not CS ) or ( state_line(0) and not WR_RD and not SH ) or
                     ( state_line(1) and state_line(0) and not SH ) or ( state_line(1) and not WR_RD and
                     not SH and CS ) ) ;
                     
exсit_fun_line(1) <= (state_line(1) and not CS ) or ( not state_line(1)and not WR_RD and not SH and CS ) or   
                     (state_line(0) and not WR_RD and not SH and CS) or (not state_line(1) and not state_line(0) and
                       WR_RD and CS) ;

                  
stat <= state_line;
                  
--функции возбуждения выходов

line_avtomat_control(9) <= ( not CS or ( not WR_RD and not SH ) or ( WR_RD and SH ) or ( not state_line(1) and
                           not state_line(0) and WR_RD ) or ( state_line(1) and state_line(0) and WR_RD ) );
                           
line_avtomat_control(Крутой <= ( not CS or ( state_line(1) and WR_RD ) or ( WR_RD and SH ) or ( state_line(1) and
                              state_line(0) and not SH ) or ( not state_line(1) and not state_line(0) and not   
                              WR_RD and not SH) or ( state_line(1) and WR_RD ) ) ;
                              
line_avtomat_control(7) <= ( not CS or ( WR_RD and SH ) or ( state_line(1) and state_line(0) and WR_RD ) or
                           ( state_line(0) and not WR_RD and not SH ) );

line_avtomat_control (6) <= ( not CS or ( WR_RD and not SH ) or ( state_line(0) and not SH ) or ( state_line(1)
                           and not SH) );   

line_avtomat_control(5) <= ( not CS or ( WR_RD and not SH ) or ( state_line(0) and not SH ) or (not state_line(1)
                           and  not SH));   

line_avtomat_control(4) <=  ( not CS  or ( WR_RD and not SH ) or ( not state_line(0) and not state_line(1) and not SH )
                           or ( state_line(1) and not SH ) );
                           
line_avtomat_control(3) <=  ( ( not state_line(0) and not WR_RD and not SH and CS ) or ( not state_line(1) and WR_RD and
                           SH and CS ) or ( state_line(0) and WR_RD and SH and CS ) or ( not state_line(1) and
                           state_line(0) and not SH and CS ) );

line_avtomat_control(2) <= ( ( not state_line(1) and not WR_RD and not SH and CS) or ( not state_line(1) and WR_RD and
                           SH and CS ) or ( not state_line(1) and not state_line(0) and WR_RD and CS ) or ( state_line(0)
                           and WR_RD and SH and CS ) or (state_line(1) and not state_line(0) and not WR_RD and not SH
                           and CS ) );

line_avtomat_control(1) <= ( (state_line(1) and not state_line(0) and not SH and CS ) or ( not state_line(1) and not WR_RD
                           and not SH and CS) or ( not state_line(1) and WR_RD and SH and CS ) or ( state_line(0) and WR_RD
                           and SH and CS) );
                           
line_avtomat_control(0) <= ( WR_RD or (not CS ) or ( state_line(1) and state_line(0) and not SH ))after 10 ns;

out_TR <= line_avtomat_control;

--PARITET   <= ( line_trigger(0) xor line_trigger(1) xor line_trigger(2) );

--OUT_TR  <= line_avtomat_control;

wait for 5 ns;

end process;


если закомментировать:

TRIG1_AVT : LATCH
port map( CLK => CLK,D => exсit_fun_line(0),Q => state_line(0));
TRIG2_AVT : LATCH
port map( CLK => CLK,D => exсit_fun_line(1),Q => state_line(1));

 , то времянки начинают, что то показывать, где я ошибся???
Записан
egor22013
Новенький


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

Сообщений: 1

Просмотр профиля Email
« Ответ #10 : 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;
Записан
Abraziv
Новенький


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

Сообщений: 2

Просмотр профиля Email
« Ответ #11 : 08 Январь 2014, 23:45:09 »

Потому что сигналу outbuf не было присвоено начальное значение. Моделсим считает, что перво начальное значение U (Uninitialized), поэтому так получается. При объявление сигнала outbuf проинициализируйте его:
signal outbuf: std_logic := '0';
Записан
Страниц  :   Вверх
  Печать  
 
Перейти в:  

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

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

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

Контакт
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,121 секунд. Запросов: 19.