Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помогите правильно правильно составить схему
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
sakol
добрый день.
почитал темки с сортировкой, везде реализация кодовая, а у меня задача состоит в следующем:
есть на входе сигналы (частота пока не важна и не известна), к примеру 4 регистра на каждом свое значение. Необходимо из них выбрать регистр с максимальным значением и выдать его "адрес".
Вопрос - можно ли это реализовать схематически? делаю в ISE 9.2 (ну вот так требует препод)

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

На какой плате это делать?
DmitryR
Код
always @( * )
   begin
      max12<=(in1>in2) ? in1:in2;
      max34<=(in3>in4) ? in3:in4;
      max12adr<=(in1>in2) ? 1:2;
      max34adr<=(in3>in4) ? 3:4;
      maxadr<=(max12>max34) ? max12adr:max34adr;
   end
XVR
Цитата(sakol @ Mar 12 2012, 18:37) *
Вопрос - можно ли это реализовать схематически? делаю в ISE 9.2 (ну вот так требует препод)

Можно

Цитата
Вот как я начал делать.
Что то вы не то начали делать

Цитата
Подскажите чего не хватает, нужен ли счетчик (или он входит в регист) и как обозначается ключ, чтобы соединять/разьединять питание к регистрам.
Судя по вопросам не хватает букваря по цифровой схемотехнике.

Цитата
На какой плате это делать?
На виртуальной. Или препод от вас требует рабочее 'железо'?


sakol
Цитата(XVR @ Mar 13 2012, 13:39) *
Что то вы не то начали делать

Судя по вопросам не хватает букваря по цифровой схемотехнике.

На виртуальной. Или препод от вас требует рабочее 'железо'?


на виртуальной.
ни я ни препод (ему 72 года) с этой прогой не работали, но кто-то ему рассказал, что тут можно реализовать с большим быстродействием. Вот и загрузил меня.

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


DmitryR спасибо за код, чтобы его записать мне надо в том же проекте добавить new source-VHDL module ?
или надо новый делать?
DmitryR
Это Verilog, но сути не меняет. Делаете модуль на языке высокого уровня, компилируете, смотрите схему RTL. Я в RTL сам не уверен, что быстро бы нарисовал, а на Verilog тут при отсутствии опыта на час дела.
sazh
Цитата(sakol @ Mar 13 2012, 14:09) *
а название элементов в ксилинксе не нахожу некоторых


Найдите книгу Зотова, там все примитивы и макросы рассписаны.
Если это учебный проект, то Вы мыслили в правильном направлении.
sakol
благодарю за советы, особенно за книгу!
скачал, сижу читаю sm.gif
XVR
Цитата(sakol @ Mar 13 2012, 15:09) *
на виртуальной.
ни я ни препод (ему 72 года) с этой прогой не работали, но кто-то ему рассказал, что тут можно реализовать с большим быстродействием. Вот и загрузил меня.
Эта прога предназначенна для составления прошивок для FPGA и CPLD фирмы Xilinx. Если вам не надо делать реальную схему, то просто ставите в проекте кристал, какой понравится (например Spartan 3A) и все.
И еще - вам нужен дезайн именно в виде схемы, или и виде Verilog файла подойдет? Второе будет попроще (да вам тут уже все написали)

sakol
дизайн ввиде схемы, так и нагляднее и обьяснить преподу проще, т.к. скорее всего будет дальнейшее применение всего этого.
вот на схемке sazh:
1. в ксилинксе тоже есть такие инверторы как в квартусе?
2. что это за обозначения на входе (а,б,с,д) - так обозначаются регистры или это для наглядности?
XVR
Цитата(sakol @ Mar 13 2012, 23:11) *
дизайн ввиде схемы, так и нагляднее и обьяснить преподу проще, т.к. скорее всего будет дальнейшее применение всего этого.
Если будет 'дальнейшее применение', то делать дезайн в виде схемы категорически не рекомендуется. HDL дезайн буден на порядок меньше по объему и ввод его будет на порядок проще и быстрее. Схемотехнический ввод де-факто мертв (и уже давно)

iosifk
Цитата(sakol @ Mar 13 2012, 15:09) *
на виртуальной.
ни я ни препод (ему 72 года) с этой прогой не работали, но кто-то ему рассказал, что тут можно реализовать с большим быстродействием. Вот и загрузил меня.


может преподу чем-то помочь надо? Спросите его, пусть напишет...
Вы в каком городе? Можете мне хоть в личку написать...
sakol
Цитата(iosifk @ Mar 14 2012, 12:25) *
может преподу чем-то помочь надо? Спросите его, пусть напишет...
Вы в каком городе? Можете мне хоть в личку написать...


отправлять ЛС мне еще нельзя sm.gif
я из Донецка.
с преподавателем пообщаюсь, выясню более подробно, позже отпишусь
sakol
а какие элементы необходимы, чтобы на регистре появились импульсы? (см. первый рис.)
кроме vcc надо наверное ibuf еще добавить?
XVR
Цитата(sakol @ Mar 16 2012, 02:41) *
а какие элементы необходимы, чтобы на регистре появились импульсы? (см. первый рис.)
Надо сделать test bench. Сами по себе импульсы не появятся

sakol
Цитата(XVR @ Mar 16 2012, 09:31) *
Надо сделать test bench. Сами по себе импульсы не появятся


не, я имею ввиду, что должно входить в состав:
вот регистр, к нему надо подать питание, и всё?
наверное нужно еще добавить счетчик, тактовый генератор?
XVR
Цитата(sakol @ Mar 19 2012, 18:53) *
не, я имею ввиду, что должно входить в состав:
вот регистр, к нему надо подать питание, и всё?
Про питание забудьте - оно в FPGA уже встроенно
Цитата
наверное нужно еще добавить счетчик, тактовый генератор?
Тесты пишутся либо в виде временных диаграмм, либо в виде скриптов. Последние могут быть как в виде tcl скриптов для симулятора, так и в виде Verilog (или VHDL) функциональных модулей.
sakol
Нажмите для просмотра прикрепленного файла
Народ, подскажите пожалуйста - этот буфер не могу найти, это потому что надо выбрать плату где такой буфер поддерживается или версия проги старенькая?
использую ISE 9.2
andrew_b
Цитата(sakol @ Mar 22 2012, 00:19) *
Нажмите для просмотра прикрепленного файла
Народ, подскажите пожалуйста - этот буфер не могу найти, это потому что надо выбрать плату где такой буфер поддерживается или версия проги старенькая?
использую ISE 9.2
Смотря что вы хотите. Это тристабильный буфер. В современных FPGA такие есть только в IOB.

Работает это так:
Код
O <= I when (T = '0') else (others => 'Z');
Не уверен на счёт активного уровня T.
XVR
Цитата(sakol @ Mar 22 2012, 01:19) *
Нажмите для просмотра прикрепленного файла
Народ, подскажите пожалуйста - этот буфер не могу найти, это потому что надо выбрать плату где такой буфер поддерживается или версия проги старенькая?
Этот 'буфер' должен поддерживаться не 'платой', а FPGA, на ней установленной
Цитата
использую ISE 9.2
Т.е. у вас Xilinx. Доки читать не пробовали?
BUFT16 - это макрос из 16 штук BUFT
BUFT - это внутренний буфер с 3мя состояниями. Последний кристал, где это поддерживалось (если мне память не изменяет) - Virtex II. (Для справки - сейчас в производстве Virtex 7)
Никакие современные кристаллы этот BUFT (а равно и BUFE) не поддерживают, т.к. у них нет внутренних 3х стабильных шин.
Переделайте схему, что бы BUFT не было

NB. Синтезатор может отконвертировать ваши BUFT в набор мультиплексоров, но закладываться на это я бы не стал

sakol
преподавателю какраз и нужно, чтобы буфер имел переход в 3-е состояние.
сегодня поговорю с ним, может что-то изменится.
суть нашей задачи - создание нового способа сортировки, вечером выложу схему на чем остановились и где нужен этот тристабильный буф.
XVR
Цитата(sakol @ Mar 22 2012, 11:11) *
преподавателю какраз и нужно, чтобы буфер имел переход в 3-е состояние.
Внутри FPGA или снаружи?
Цитата
суть нашей задачи - создание нового способа сортировки, вечером выложу схему на чем остановились и где нужен этот тристабильный буф.
На чем бы вы там не остановились, в современных FPGA нет внутри 3х стабильных шин, и соотвественно буферов.
Если же вы их все же поставите (в схематике или в HDL - не важно), синтезатор при разводке вашей схемы поменяет их на мультиплексоры.
Делайте сразу на мультиплексорах - они в FPGA физически есть

sakol
понял, спасибо за обьяснение sm.gif
sakol
Возникла загвоздка с переходом от шины к одиночному входу(в мультиплекторе), скажите возможно просто отредактировать элемент и дорисовать ему шины ? sm.gif
XVR
Нет, вам нужен соотвествующий элемент. M2_1 это мультиплексор для проводов, а вам нужен для шин. Посмотрите в библиотеке или сделайте сами (у вас внутри этого элемента будет 16 штук M2_1)

sakol
ага, вот я отредактировал элемент внешне, теперь задаю его значения. Если задавать на vhdl такая фишка в описании прокатит?
entity copy_of_m2_1 is
Port ( D0 : in STD_LOGIC_VECTOR (15 downto 0);
D1 : in STD_LOGIC_VECTOR (15 downto 0);
S : in STD_LOGIC_VECTOR (1 downto 0);
Q : out STD_LOGIC_VECTOR (15 downto 0));
end copy_of_m2_1;

architecture Behavioral of copy_of_m2_1 is

begin
when S==0 then Q = D0; else
when S==1 then Q = D1;

end Behavioral;
XVR
Наверное прокатит. (Я больше по Verilog специалист sm.gif )
sakol
не прокатило sad.gif

выдает такую ошибку - referencing symbol 'copy_of_m2_1' is out of date.

entity copy_of_m2_1 is
Port ( C(15:0) : in STD_LOGIC_VECTOR (15 downto 0);
D(15:0) : in STD_LOGIC_VECTOR (15 downto 0);
S : in STD_LOGIC_VECTOR (1 downto 0);
Q : out STD_LOGIC_VECTOR (15 downto 0));
end copy_of_m2_1;

architecture Behavioral of copy_of_m2_1 is
process (C(15:0), D(15:0), S)
begin
case S is
when '0' => O <= C(15:0);
when '1' => O <= D(15:0);
when others => NULL;
end case;
end process;
end Behavioral;
XVR
Видимо надо что то где то перегенерировать. Это ошибка не из VHDL
sakol
покопался, теперь вот что выдает:
ERROR:HDLCompilers:87 - "F:/xilinx/1111/variant.vf" line 159 Could not find module/primitive 'M2_1_HXILINX'

я так понял мне мой созданный элемент надо добавить в какую-то библиотеку?
XVR
Цитата(sakol @ Apr 2 2012, 21:52) *
покопался, теперь вот что выдает:
ERROR:HDLCompilers:87 - "F:/xilinx/1111/variant.vf" line 159 Could not find module/primitive 'M2_1_HXILINX'
Судя по сообщению в схематике ваш модуль называется M2_1_HXILINX, а не copy_of_m2_1 (как у вас в VHDL)

sakol
именно эта мысль мне и пришла утром пока шел в универ sm.gif
и загвоздка была именно в этом
sakol
подскажите пожалуйста, каким образом можно реализовать линию задержки?
мне необходимо, чтобы сигнал с тригера поступал чз определенное время.
нашел такой вариант
XVR
Цитата(sakol @ Apr 8 2012, 19:18) *
подскажите пожалуйста, каким образом можно реализовать линию задержки?
Если вам нужна задержка на целое число тактов, то схема правильная (1 регистр в цепи дает задержку на 1 такт)

sakol
а если мне нужна задержка, равная времени прохождению данных чз мультиплексор? это ж, наверное, просто так не измерить? и еще одна, равная прохождению всей схемы (по цепи ОС разрешает запись в регистр)

XVR
Цитата(sakol @ Apr 8 2012, 19:54) *
а если мне нужна задержка, равная времени прохождению данных чз мультиплексор?
Если работоспособность вашей схемы зависит от таких задержек, то ваша схема работать вообще не будет. Читайте букварь на тему 'синхронный дезайн' (других в FPGA не бывает)

sakol
понял sm.gif
sakol
спустя некоторое время вернулся к схеме sm.gif
так и не получается правильно описать свой элемент (мультиплексор с шинами)
подскажите пожалуйста, кто разбирается, как правильно описать:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity copy_of_m2_1 is
Port ( D0 : in STD_LOGIC_VECTOR (15 downto 0);
D1 : in STD_LOGIC_VECTOR (15 downto 0);
S : in STD_LOGIC_VECTOR (1 downto 0);
Q : out STD_LOGIC_VECTOR (15 downto 0));
end copy_of_m2_1;

architecture Behavioral of copy_of_m2_1 is
begin
when S==0 then Q = D0; else
when S==1 then Q = D1;

end Behavioral;

выдает ошибку - ERROR:HDLParsers:164 - "F:/xilinx/1111/copy_of_m2_1.vhd" Line 40. parse error, unexpected WHEN
andrew_b
Цитата(sakol @ Apr 23 2012, 23:47) *
так и не получается правильно описать свой элемент (мультиплексор с шинами)
Может, в книжку заглянуть, а не методом тыка?
stu
а нельзя написать как ниже?
Код
architecture Behavioral of copy_of_m2_1 is
begin
if S==0 then
   Q = D0;
else  -- elsif S==1 then
   Q = D1;
end if;
end Behavioral;

-----------------------------------------------------
для справки:
Код
     case expression is
           when choices =>
                sequential statements
           when choices =>
                sequential statements
                -- branches are allowed
           [ when others => sequential statements ]
     end case;


Код
     case SEL is
           when ”00” => Z <= A;
           when ”01” => Z <= B;      
           when ”10” => Z <= C;                  
           when ”11” => Z <= D;
           when others => Z <= ‘X’;
     end case;
Postoroniy_V
Цитата(stu @ Apr 24 2012, 15:28) *
а нельзя написать как ниже?
...............

нельзя, вы сами то проверили как оно синтезится+симулируется?
з.ы. это vhdl а не verilog
Hoodwin
Пишите так:

Код
architecture Behavioral of copy_of_m2_1 is
begin

Q <= D1 when to_x01(S(0))='1' else D0;

end Behavioral;

Postoroniy_V
Цитата(Hoodwin @ Apr 25 2012, 13:44) *
Пишите так:
...

что такое to_x01? и зачем оно там?
Код
architecture Behavioral of copy_of_m2_1 is
begin
Q <= D1 when S(0)='1' else D0;
end Behavioral;
stu
Цитата(Postoroniy_V @ Apr 24 2012, 10:40) *
нельзя, вы сами то проверили как оно синтезится+симулируется?
з.ы. это vhdl а не verilog


Совсем забыл VHDL. Исправил. Синтезируются в одинаковую схему

Код
architecture Behavioral of Vhdl1 is
begin
--    Q <= D0 when S=0 else D1;
    process (S)
    begin
        if S=0 then
           Q <= D0;
        else  -- elsif S==1 then
           Q <= D1;
        end if;
    end process;

end Behavioral;
Hoodwin
Цитата(Postoroniy_V @ Apr 25 2012, 09:06) *
что такое to_x01? и зачем оно там?


Ну это такая функция, которая приводит 9 вариантов std_logic к 3: 0,1,X.
помогает правильно моделировать проект, если в нем будут встречаться слабые 1 и 0 - H, L.
Postoroniy_V
Цитата(Hoodwin @ Apr 25 2012, 16:35) *
Ну это такая функция, которая приводит 9 вариантов std_logic к 3: 0,1,X.
помогает правильно моделировать проект, если в нем будут встречаться слабые 1 и 0 - H, L.

в данном конкретном случае это крайне вредная информация для ТС. он мультиплексор описать не может.
а тут ещё какие то 9 вариантов std_logic biggrin.gif к тому же в моделировании
andrew_b
Цитата(stu @ Apr 25 2012, 09:32) *
Синтезируются в одинаковую схему
Описание с процессом будет неправильно симулироваться.
sakol
ниодин из вариантов не сработал sad.gif
sakol
выскакивает такая ошибка:
ERROR:Xst:2587 - Port <S0> of instance <XLXI_72> has different type in definition <copy_of_m2_1>. - имеет другой тип в определении

Подскажите пожалуйста, это мне надо другое обозначение в строке S0 : in STD_LOGIC_VECTOR (1 downto 0); ??


entity copy_of_m2_1 is
Port ( D0 : in STD_LOGIC_VECTOR (15 downto 0);
D1 : in STD_LOGIC_VECTOR (15 downto 0);
S0 : in STD_LOGIC_VECTOR (1 downto 0);
O : out STD_LOGIC_VECTOR (15 downto 0));
end copy_of_m2_1;
architecture Behavioral of copy_of_m2_1 is
begin
O <= D0 when S0=0 else D1;
process (S0)
begin
if S0=0 then
O <= D0;
else -- elsif S=0 then
O <= D1;
end if;
end process;
end Behavioral;
ivanoffer
Оставьте что-то одно из двух

O <= D0 when S0=0 else D1;

или

process (S0)
begin
if S0=0 then
O <= D0;
else -- elsif S=0 then
O <= D1;
end if;
end process;
sakol
Цитата(ivanoffer @ May 8 2012, 12:51) *
Оставьте что-то одно из двух

O <= D0 when S0=0 else D1;

или

process (S0)
begin
if S0=0 then
O <= D0;
else -- elsif S=0 then
O <= D1;
end if;
end process;


тоже самое выдает, попробовал и так, и так
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.