реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
anatol1983
сообщение Apr 5 2005, 21:37
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-02-05
Из: РОССИЯ г. Пенза
Пользователь №: 2 690



Код
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ram is
generic(Amax     : integer:=3);
port (clk,Wr,WrArg,fixhit,RdEqual, RdMore,RdLess: in std_logic;
  af    : out std_logic_vector(Amax downto 0);
  a     : in std_logic_vector(Amax downto 0);
     di    : in std_logic_vector(31 downto 0);
      argo  : out std_logic_vector(31 downto 0);
     do    : out std_logic_vector(31 downto 0));
procedure foundCompS (R,arg:in std_logic_vector (31 downto 0);signal E,M,L:out std_logic)is
begin
if R=Arg then E<='1';else E<='0';end if;
if R>Arg then M<='1';else M<='0';end if;
if R<Arg then L<='1';else L<='0';end if;
end foundCompS;  
end ram;

architecture Behavioral of ram is
type ram_type is array ((2**(Amax+1)-1)downto 0) of std_logic_vector (31 downto 0);
signal R      : ram_type;
signal arg    : std_logic_vector(31 downto 0);
signal SEqual : std_logic_vector((2**(Amax+1)-1) downto 0);
signal SMore  : std_logic_vector((2**(Amax+1)-1) downto 0);
signal SLess  : std_logic_vector((2**(Amax+1)-1) downto 0);
signal CMD   : std_logic_vector(5 downto 0);
begin
process(clk)
variable M_var : std_logic_vector((2**(Amax+1)-1)downto 0);
variable T     : std_logic;
variable Equal : std_logic_vector((2**(Amax+1)-1)downto 0);
variable More  : std_logic_vector((2**(Amax+1)-1)downto 0);
variable Less  : std_logic_vector((2**(Amax+1)-1)downto 0);
begin
CMD<=(Wr,WrArg,FixHit,RdEqual,RdMore,RdLess);
    if (clk'event and clk = '1') then
 case CMD is
 when ("100000") =>R(conv_integer(a)) <= di;
[B]--  when ("010000") =>arg<=di;[/B]--после синтеза это набор D-тр
 when ("001000") =>Equal:=SEqual;More:=SMore;Less:=SLess;
 when ("000100") =>T:='0';
     for i in 0 to (2**(Amax+1)-1) loop
     if Equal(i)='1' then T:='1';af<=CONV_STD_LOGIC_VECTOR (i, Amax+1);
     Equal(i):='0';end if;
     exit when T='1';
     end loop;
 when ("000010") =>T:='0';
     for i in 0 to (2**(Amax+1)-1) loop
     if More(i)='1' then T:='1';af<=CONV_STD_LOGIC_VECTOR (i, Amax+1);
     More(i):='0';end if;
     exit when T='1';
     end loop;
 when ("000001") =>T:='0';
     for i in 0 to (2**(Amax+1)-1) loop
     if Less(i)='1' then T:='1';
     af<=CONV_STD_LOGIC_VECTOR (i, Amax+1);
     Less(i):='0';end if;
     exit when T='1';
     end loop;
 when others =>null;
 end case;
end if;
end process;
forM:for i in 0 to (2**(Amax+1)-1)generate
  foundCompS(R(i),Arg,SEqual(i),SMore(i),SLess(i));    
end generate forM;
argo<=arg;--введено для контроля потом выкину
[B]Arg<=Di when WrArg='1';[/B] --после синтеза это превращается в защёлку
do <= R(conv_integer(a));
end Behavioral;


проблема вот в чём: моделирую этот VHDL-код всё работает как часы. Синтезирую и размещаю в кристалл Virtex2p, моделирую и при периоде 80 ns на наборе триггеров коды не фиксируются, на защёлке коды не фиксируются при 60 ns. Хотя R (после синтеза D-триггера) работает нормально и логика тоже. Не могу понять в чём причина.
Go to the top of the page
 
+Quote Post
3.14
сообщение Apr 6 2005, 14:14
Сообщение #2


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



<проблема вот в чём: моделирую этот VHDL-код всё работает как часы. >
Т.е. это после поведенческого моделирования?

<Синтезирую и размещаю в кристалл Virtex2p, моделирую ...>
Надо полагать, это моделирование после PAR?

<Не могу понять в чём причина>
Вы констрейном затягивали "clk", что PAR пишет?


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
anatol1983
сообщение Apr 6 2005, 20:30
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-02-05
Из: РОССИЯ г. Пенза
Пользователь №: 2 690



3.14
<проблема вот в чём: моделирую этот VHDL-код всё работает как часы. >
Т.е. это после поведенческого моделирования?

-да

<Синтезирую и размещаю в кристалл Virtex2p, моделирую ...>
Надо полагать, это моделирование после PAR?

-да

<Не могу понять в чём причина>
Вы констрейном затягивали "clk", что PAR пишет?

-нет. Я без каких либо дополнительных описаний проекта (Constraints и прочее) сразу синтезировал, размещал и моделировал. Я Constraints описание делал (ещё на другой версии) так PAR заканчивался неудачей sad.gif Да к тому как с ним работать я до конца не разобрался. Я так понимаю, мне может помочь Constraints-файл? А что там надо прописать?
Go to the top of the page
 
+Quote Post
3.14
сообщение Apr 7 2005, 13:04
Сообщение #4


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



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

Я так понимаю, мне может помочь Constraints-файл
Ну например, имеете блок у которого между регистрами получается 4 слоя логики (LUT), на каждом слое получаете задержку в 2 нс, итого 8нс. плюс задержки на цепях связи ~50%. Итак, получили 12нс. Получается, безсмысленно указывать констрейн на эту логику меньше 8 нс, PAR может сократить только задержку на межсоединениях.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
Anybody
сообщение Apr 7 2005, 16:50
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 6-04-05
Пользователь №: 3 909



Constraints'ы помогают почти всегда!
Если Вы делаете PCI контроллер, то без них лучше и не соваться, вероятность того что Вы получите рабочее устройство, стремится к нолю.
Как я понял у Вас даже проблемы при тайминг анализе ...
Тогда дорога Ваша только к файлу ...
Если нет, тогда, хотя видя Ваш простейший код, могу сказать заранее что такого быть не может...
Бывают еще метастабильности, когда приходится по схеме расставлять синхронизаторы, заботиться о деревьях клоков, но это только в больших проектах, более 2000 LE начинает проявляться.
А тут Вы столкнулись, с обыденностью - простым глитчем.
Синтезатор сгенерил, то что Вы просили ... Но так как Вы не попросили его соблюдать тайминги, то уж простите ...
Что нагенерили, то и получили ...


--------------------
Вся жизнь - борьба! Борьба с шумами. :)
Go to the top of the page
 
+Quote Post
anatol1983
сообщение Apr 7 2005, 20:29
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-02-05
Из: РОССИЯ г. Пенза
Пользователь №: 2 690



Цитата(Anybody @ Apr 7 2005, 20:50)
Constraints'ы помогают почти всегда!
Если Вы делаете PCI контроллер, то без них лучше и не соваться, вероятность того что Вы получите рабочее устройство, стремится к нолю.
Как я понял у Вас даже проблемы при тайминг анализе ...
Тогда дорога Ваша только к файлу ...
Если нет, тогда, хотя видя Ваш простейший код, могу сказать заранее что такого быть не может...
Бывают еще метастабильности, когда приходится по схеме расставлять синхронизаторы, заботиться о деревьях клоков, но это только в больших проектах, более 2000 LE начинает проявляться.
А тут Вы столкнулись, с обыденностью - простым глитчем.
Синтезатор сгенерил, то что Вы просили ... Но так как Вы не попросили его соблюдать тайминги, то уж простите ...
Что нагенерили, то и получили ...
*


Это было бы хорошо!! Если всё дело было бы в глюке ПО. Особой любви к ModelSim я не питаю, но альтернатив не знаю. Да и с HDL Bencher та же история. Открою секрет, дело в том что я студент и это мой диплом. В принципе я бы мог привести диаграммы и после поведенческого моделирования, но тут уже дело в моём самолюбии. И хотелось бы идти на защиту с осознаванием того, что это работает smile3046.gif
Я понимаю, что сейчас задам обсалютно ламерский вопрос, но.. А как его об этом попросить? (нет, я конечно интуитивно догадываюсь, но хотелось бы знать мнение специалиста)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th July 2025 - 04:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016