|
|
  |
Не срабатывает регистр защёлка |
|
|
|
Apr 5 2005, 21:37
|

Частый гость
 
Группа: Свой
Сообщений: 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-триггера) работает нормально и логика тоже. Не могу понять в чём причина.
|
|
|
|
|
Apr 7 2005, 13:04
|

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

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

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

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

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

|
Цитата(Anybody @ Apr 7 2005, 20:50) Constraints'ы помогают почти всегда! Если Вы делаете PCI контроллер, то без них лучше и не соваться, вероятность того что Вы получите рабочее устройство, стремится к нолю. Как я понял у Вас даже проблемы при тайминг анализе ... Тогда дорога Ваша только к файлу ... Если нет, тогда, хотя видя Ваш простейший код, могу сказать заранее что такого быть не может... Бывают еще метастабильности, когда приходится по схеме расставлять синхронизаторы, заботиться о деревьях клоков, но это только в больших проектах, более 2000 LE начинает проявляться. А тут Вы столкнулись, с обыденностью - простым глитчем. Синтезатор сгенерил, то что Вы просили ... Но так как Вы не попросили его соблюдать тайминги, то уж простите ... Что нагенерили, то и получили ... Это было бы хорошо!! Если всё дело было бы в глюке ПО. Особой любви к ModelSim я не питаю, но альтернатив не знаю. Да и с HDL Bencher та же история. Открою секрет, дело в том что я студент и это мой диплом. В принципе я бы мог привести диаграммы и после поведенческого моделирования, но тут уже дело в моём самолюбии. И хотелось бы идти на защиту с осознаванием того, что это работает Я понимаю, что сейчас задам обсалютно ламерский вопрос, но.. А как его об этом попросить? (нет, я конечно интуитивно догадываюсь, но хотелось бы знать мнение специалиста)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|