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

 
 
> Проблема синтеза под Altera, Не моделируется синтезированная схема
White
сообщение Sep 9 2005, 11:48
Сообщение #1


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

Группа: Свой
Сообщений: 81
Регистрация: 31-01-05
Из: Москва
Пользователь №: 2 324



Дроброго времени суток.

Если кто может-помогите wacko.gif
Проблема вот в чем:
Есть код на VHDL. Вот он:
Цитата
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.std_logic_arith.all;



entity imit is
  port(
  clk : in STD_LOGIC;
  enable : in STD_LOGIC;
  synh_out : out STD_LOGIC;
  data_strob : out STD_LOGIC;
  data_out : out STD_LOGIC_VECTOR(31 downto 0)
      );
end imit;

--}} End of automatically maintained section

architecture rl of imit is
constant t_min:integer:=100; --100 ns

begin

p1: process (clk, enable) 

constant temp1:STD_LOGIC_VECTOR(31 downto 0):=B"00000001100000000110010000110011";
constant temp2:STD_LOGIC_VECTOR(31 downto 24):=X"02";
constant temp3:STD_LOGIC_VECTOR(31 downto 0):=B"00000011000000010000001010111100";
constant temp4:STD_LOGIC_VECTOR(31 downto 0):=B"11100100000000000000000000001000";

variable count_temp:integer range 0 to 256 :=0;
variable t1:integer:=750;
variable temp:integer range 0 to 16777215 :=0;
variable num:integer range 0 to 32;


begin
  if enable='0' then
  count_temp:=0;
  t1:=750;
  data_out<=(others=>'0');
  data_strob<='1';
  synh_out<='1';
  temp:=0;
  num:=0;

  else
    if clk'event and clk='1' then  --CLK rising edge
    count_temp:=count_temp+1;
    end if;
    if clk'event and clk='0' then
    case count_temp is
      when 1 =>data_strob<='0';
      when 2 =>synh_out<='0';
        data_out<=temp1;
      when 3 => synh_out<='1';
      when 4 =>synh_out<='0'; 
      ------------------------
        temp:=temp+t1;
        data_out<=temp2 & CONV_STD_LOGIC_VECTOR(temp,24);
        num:=num+1;
        if t1 = 750 and num = 20 then
        t1:=1000;
        num:=0;
        elsif t1=1000 and num=20 then
          t1:=750;
          num:=0;
        end if;
     
      ------------------------
      when 5 => synh_out<='1';
      when 6 =>synh_out<='0';
        data_out<=temp3;
      when 7 => synh_out<='1';
      when 8 =>synh_out<='0';
        data_out<=temp4;
      when 9 => synh_out<='1';
      when 11 =>data_strob<='1';
      when 150 => if t1=750 then
          count_temp:=0;
        end if;
      when 200 => if t1=1000 then
          count_temp:=0;
        end if;
      when others => null;
    end case;
    end if;
  end if;
  end process p1; 
end rl;

он замечательно моделируется в A-HDL но при попытке моделировать синтезированое устройство в Quartus не чего не происходит т е результате состояния выходов не меняются. ПЛИС-MAX 7000S
Вообщем вопрос что я делаю не так, и если объяснять долго то где посмотреть.

PS До этого с ПЛИС не работал. Так что сильно не бейте
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 29)
vetal
сообщение Sep 12 2005, 16:57
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Ни одна программа не запакует триггеры в эвв max7s, потому что их там просто нет нет. Логический элемент, триггер и ножка являются одной ячейкой max7s(Если ячеек больше то они просто не имеют вывода).
И если честно то в вашей схеме могут быть проблеммы с битами, т.к. ваша выходная шина является синхронной лишь частично. При различных настройках оптимизации могут появляться биты значение которых выражено через другие, другими словами комбинаторный выход.
Для получения наиболее правильного результатарекомендую отключить все оптимизации вашего синтезатора, или использовать synplify с установленной галочкой "Disable Sequential Optimizations".
Go to the top of the page
 
+Quote Post
sazh
сообщение Sep 12 2005, 17:49
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



(C VHDL не знаком. Посмотрел в Квартусе в RTL просмотрщике):
По большому счету вроде все нормально. Синхронная схема. Регистровые выходы.
Так как данные сопровождаются стробом, то на переходные процессы (не соизмеримые с периодом клока) обращать внимание не стоит. (Для более качественного размещения в Квартусе существует Редактор ассигнований.)
На чтобы я обратил внимание:
1. асинхронный глобальный ресет. Конечно ничего страшного. Но обычно на выходные регистры он не нужен.(Какое кому дело до состояния регистров вне интервала сопровождения)
2. Если это входной сигнал, его бы надо простробировать. А при разводке печатной платы разводить первоначально. Наводки по печати на этот сигнал будут “сбивать “ работу всей схемы
3. Как уже говорилось, клок используйте по одному фронту. В результате мягче требования к быстродействию кристалла да и при использовании PLL не надо будет проект переделывать.
4. Ну и самое главное. Разведите проект в Quartus и устраните все предупреждения.
5. НЕТ у Вас ни одного полноразрядного счетчика. Все реализуется на сумматорах (lpm_add_sub max7000s , ACEX). В результате нерациональное использование ресурсов. Как у Вас это получилось, ума не приложу. Если б хотя бы в верилоге, тогда бы смог бы качественнее ответить.
Go to the top of the page
 
+Quote Post
vetal
сообщение Sep 12 2005, 19:31
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



sazh : Вы не туда смотрите. На RTL действительно все почти как нанаписано. А вот в железке совсем другое реализуется.
К примеру отфильтруйте по sources в TMV выводы dataout[0] и dataout[31].

White: добавьте следующие строчки между "архитектурой и begin" или в "секции entity после портов, перед закрытием entity"

Код
attribute preserve: boolean;
attribute preserve of data_out: signal is true;
attribute preserve of data_strob: signal is true;
attribute preserve of synh_out: signal is true;
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 13 2005, 04:53
Сообщение #19


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(vetal @ Sep 12 2005, 11:57)
Ни одна программа не запакует триггеры в эвв max7s, потому что их там просто нет нет. Логический элемент, триггер и ножка являются одной ячейкой max7s(Если ячеек больше то они просто не имеют вывода).


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


--------------------
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 13 2005, 05:31
Сообщение #20


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Раз пошла такая пьянка, то ИМХО по моим иследованиям в коде не совсем правильно следующее
Код
temp1:STD_LOGIC_VECTOR(31 downto 0):=B"00000001100000000110010000110011";
temp2:STD_LOGIC_VECTOR(31 downto 24):=X"02";
temp3:STD_LOGIC_VECTOR(31 downto 0):=B"00000011000000010000001010111100";
temp4:STD_LOGIC_VECTOR(31 downto 0):=B"11100100000000000000000000001000"


Если это секция generic , то задайте лучше integer, будет понятно и давайте настроечным параметрам нормальные названия и отделяйте их от остального текста регистром букв.

Код
signal count_temp:integer range 0 to 1020;
signal count_end:bit;

лучше сделать
Код
signal count_temp : std_logic_vector(9 downto 0); -- 0 to 2*10-1
signal count_end : std_logic;

т.к. все равно интеджер будет приведен к стд лоджику а на ваше ограничение 1020 синтезатор "забьет".

Код
p0:    process    (clk, enable)
variable count:integer range 0 to 1020;
variable count_stop:integer range 0 to 1020;
    begin  
 if enable='0' then
     count:=0;
 elsif rising_edge(clk) then  --CLK rising edge
     count:=count+1;
     if    count_end='0' then
   count_stop:=150;
     else
   count_stop:=200;
     end if;
     if count=count_stop then
   count:=0;
     end if;
 end if;
    count_temp<=count;
    end process    p0;


В чем минус с точки зрения синтеза, вы как я понял делаете стейт машину на счетчке, хотя я не однократно уже вам говорил, что бы вы воспользовались перечисляемыми типами.
я взял на себя смелость немного подправить ваш код и убрать лишнее
Код
signal count_stop : std_logic;
begin  
    
    count_stop <= '1' when (count = conv_std_logic_vector(150, count_stop'length))and(count_end = '0') else
 '1' when (count = conv_std_logic_vector(200, count_stop'length))and(count_end = '1') else '0';
    
    p0:    
    process    (clk, enable)
    begin  
 if (enable = '0') then
     count <= (others => '0');
 elsif rising_edge(clk) then  
     if (count_stop = '1') then count <= (others => '0');
     else           count <= count + '1';
     end if;
 end if;
    end process    p0;

Что мы тут имеем вы описываете счетчк с двуми видами ресета, асинхронным и синхронным, ИМХО именно это и не позволяет сделать счетчик как счетчик, а не как суматор с тригерами на вашей архитектуре. Это я говорю по памяти, т.к. щас софта для альтер у меня нет и проверить не на чем., может быть я ошибаюсь.

Код
p1:    process    (enable,clk)
    
    variable t1:integer:=750;
    variable temp:integer range 0 to 16777215 :=0;
    variable num:integer range 0 to 32;    
    variable data_strob_temp:STD_LOGIC:='1';
    variable synh_out_temp:STD_LOGIC:='1';
    variable data_out_temp:STD_LOGIC_VECTOR(31 downto 0):=(others=>'0');
    
    begin
 if enable='0' then
     t1:=750;
     data_out<=(others=>'0');
     data_strob<='1';
     synh_out<='1';  
     count_end<='0';    
     data_strob_temp:='1';
     synh_out_temp:='1';
     data_out_temp:=(others=>'0');
     temp:=0;
     num:=0;
 elsif falling_edge(clk) then  --CLK rising edge
     case count_temp is
   when 1 =>
     data_strob_temp:='0';
   when 2 =>
     synh_out_temp:='0';
     data_out_temp:=temp1;
   when 3 =>
     synh_out_temp:='1';
   when 4 =>
     synh_out_temp:='0';  
     ------------------------
     temp:=temp+t1;
     data_out_temp:=temp2 & CONV_STD_LOGIC_VECTOR(temp,24);
     num:=num+1;
     if t1 = 750 and num = 20 then
         t1:=1000;
         num:=0;
         count_end<='0';
     elsif t1=1000 and num=20 then
         t1:=750;
         num:=0;
         count_end<='1';
     end if;
     ------------------------
   when 5 =>
     synh_out_temp:='1';
   when 6 =>
     synh_out_temp:='0';
     data_out_temp:=temp3;
   when 7 =>
     synh_out_temp:='1';
   when 8 =>
     synh_out_temp:='0';
     data_out_temp:=temp4;
   when 9 =>
     synh_out_temp:='1';
   when 11 =>
     data_strob_temp:='1';
   when others =>
         data_strob<=data_strob_temp;
         synh_out<=synh_out_temp;
         data_out<=data_out_temp;
     end case;
     data_strob<=data_strob_temp;
     synh_out<=synh_out_temp;
     data_out<=data_out_temp;
 end if;
 end process p1;  


Я тоже немного подправил, что усложняло восприятие кода
Код
p1:    process    (enable,clk)
    
    variable t1:integer:=750;
 variable temp:integer range 0 to 16777215 :=0;
 variable num:integer range 0 to 32;    
    
    begin
 if enable='0' then
     t1 := 750;
     data_out <= (others=>'0');
     
     data_strob  <='1';
     synh_out  <='1';  
     count_end  <= '0';    
     
     temp := 0;
     num :=0;
 elsif rising_edge(clk) then  
     data_strob <= '0';
     synh_out <= '0';
     --data_out <= '0'; -- нужно если дата аут не должен "подвисать"
     
     case count is
   when 1 => null;
   when 2 => data_out <= temp1;
   when 3 => synh_out <= '1';
   when 4 =>
     ------------------------
     temp := temp + t1;
     data_out <= temp2 & CONV_STD_LOGIC_VECTOR(temp,24);
     num:=num+1;
     if t1 = 750 and num = 20 then
         t1:=1000;
         num:=0;
         count_end <= '0';
     elsif t1=1000 and num=20 then
         t1:=750;
         num:=0;
         count_end <= '1';
     end if;
     ------------------------
   when 5 => synh_out <='1';
   when 6 => data_out <= temp3;
   when 7 => synh_out <='1';
   when 8 => data_out <= temp4;
   when 9 => synh_out <='1';
   when 11 => data_strob <='1';
   when others => null;
     end case;
 end if;
 end process p1;

это как я понял стейт машина.
ИМХО косяк здесь в том, как раз в состоянии 4, т.к. переменная, в отличие от сигнала изменяться сразу же, а не по eventу, что ИМХО усложняет логику формирования сигнала возбуждения тригеров data_out
data_out <= temp2 & CONV_STD_LOGIC_VECTOR(temp,24);
, тоже самое касаеться переменной num
ИМХО на вашем месте я бы еще раз пересмотрел функционирование вашего девайса уже с точки зрения не симуляции, а синтеза и читаемости. Тут есть над чем работать smile.gif

ПС, может где ошибся не пинайте, я толкьо пришел на работу smile.gif


--------------------
Go to the top of the page
 
+Quote Post
sazh
сообщение Sep 13 2005, 06:31
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



to Vetal:
Я посмотрел на плюсик в Proekt Navigator у имени проекта. Увидел lpm_add_sub.
Этого достаточно. Все это можно проще и качественнее реализовать.
Вот и все. (Нет желания в VHDL копаться. Мне терпения не хватает на его лаконичность.
Go to the top of the page
 
+Quote Post
White
сообщение Sep 13 2005, 13:02
Сообщение #22


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

Группа: Свой
Сообщений: 81
Регистрация: 31-01-05
Из: Москва
Пользователь №: 2 324



2 Vetal
Цитата
White: добавьте следующие строчки между "архитектурой и begin" или в "секции entity после портов, перед закрытием entity"


attribute preserve: boolean;
attribute preserve of data_out: signal is true;
attribute preserve of data_strob: signal is true;
attribute preserve of synh_out: signal is true;


а что это если не секрет? что это должно дать?

2 des00
Цитата
Если это секция generic , то задайте лучше integer

а что это изменит ? в бинарном виде мне в данном случае удобнее записывать.

Цитата
лучше сделать
CODE

signal count_temp : std_logic_vector(9 downto 0); -- 0 to 2*10-1
signal count_end : std_logic;

т.к. все равно интеджер будет приведен к стд лоджику а на ваше ограничение 1020 синтезатор "забьет".


можно а можно просто указать нормальное ограничение - 1023, я пробывал и так и так разницы при чистом счетчике не было.

Цитата
я взял на себя смелость немного подправить ваш код и убрать лишнее

в вашем исправленом коде счетчик проскакивает лишний такт.

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

Объясните мне наконец в чем разница будет между тем и тем? а то я действительно не понимаю!

Цитата
Я тоже немного подправил, что усложняло восприятие кода


Ну моя времянка была уничноженна полностью smile.gif



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

Цитата
ИМХО косяк здесь в том, как раз в состоянии 4, т.к. переменная, в отличие от сигнала изменяться сразу же, а не по eventу, что ИМХО усложняет логику формирования сигнала возбуждения тригеров data_out
data_out <= temp2 & CONV_STD_LOGIC_VECTOR(temp,24);
, тоже самое касаеться переменной num


да вот это похоже на правду надо будет попробывать покрутить

Цитата
ИМХО на вашем месте я бы еще раз пересмотрел функционирование вашего девайса уже с точки зрения не симуляции, а синтеза и читаемости. Тут есть над чем работать smile.gif


ну с этим трудно спорить smile.gif Работать всегда есть над чем тем более это первая моя работа с VHDL и ПЛИС. И как связан код и то что будет синтезированно я пока понимаю слабо.

Но в общем в вашей или моей smile.gif подправленной программе глюки остались теже

2 all a14.gif Спасибо за потраченое на меня время.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 13 2005, 13:18
Сообщение #23


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата
а что это изменит ? в бинарном виде мне в данном случае удобнее записывать.

а ничего, писать меньше, не нужно разрядности подсчитывать smile.gif
хотя кому как, это не парадигма
Цитата
можно а можно просто указать нормальное ограничение - 1023, я пробывал и так и так разницы при чистом счетчике не было.

асболютно правильно, просто ИМХО если писать хорошо синтезируемый код то по началу лучше делать через std_logic smile.gif

Цитата
в вашем исправленом коде счетчик проскакивает лишний такт.

все правильно, потому что на счетчике либо считаем, либо сбрасываем.
а если делаем одновременно то это уже не счетчик а .... суматор с тригером smile.gif
кроме того да, в случае синхронного сброса, сигнал сброса должен подниматься за 1 такт (еще с кр155).
Цитата
Объясните мне наконец в чем разница будет между тем и тем? а то я действительно не понимаю!

например
type t_state is (idle, state1, state2, .....);
signal state : t_state;
......
if (in_reset_b = '0') then state <= idle;
elseif (rising_edge(in_clock)) then
case (state) is
......
разница в том, что вам проще писать стейт машину, вы можете "играть" способом кодирования с помошью констрейнов.
и не нужно собирать воедино асинхронный и синхронный сброс на одном и том же счетчике.
.
Цитата
Ну моя времянка была уничноженна полностью smile.gif

естественно я не стремился сделатть все как у вас, я просто показал вам как писать, что бы не плодить мнжественных переменных, ВХДЛ и так многословный язык (писать больше чем в верилоге), так зачем писать еще больше. smile.gif

Цитата
Но в принципе идея понятна, единственное что не понятно так это то что присваевать сигналу значение неправильно с моей точки зрения.

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

Цитата
И как связан код и то что будет синтезированно я пока понимаю слабо.

синтезим симплифаем и в RTL вьвер, рекомендую.

Цитата
Но в общем в вашей или моей smile.gif подправленной программе глюки остались теже

естественно smile.gif зачем мне у вас хлеб отбирать smile.gif)))


--------------------
Go to the top of the page
 
+Quote Post
White
сообщение Sep 13 2005, 13:36
Сообщение #24


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

Группа: Свой
Сообщений: 81
Регистрация: 31-01-05
Из: Москва
Пользователь №: 2 324



Цитата
Цитата

Но в принципе идея понятна, единственное что не понятно так это то что присваевать сигналу значение неправильно с моей точки зрения.


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

я имел в виду что некоректно присваивать одной и той же переменной значение дважды

Цитата
например
type t_state is (idle, state1, state2, .....);
signal state : t_state;
......
if (in_reset_b = '0') then state <= idle;
elseif (rising_edge(in_clock)) then
case (state) is
......
разница в том, что вам проще писать стейт машину, вы можете "играть" способом кодирования с помошью констрейнов.


Ну тут state так integer не суть важно вроде дазве что нагляднее.
А можно про констрейны по-подробнее? Или что почитать посоветуйте про них и вообще и если можно с рускими буквами smile.gif?
Цитата
и не нужно собирать воедино асинхронный и синхронный сброс на одном и том же счетчике.

не понял вы о чем и к чему?
Go to the top of the page
 
+Quote Post
vetal
сообщение Sep 13 2005, 13:37
Сообщение #25


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Аттрибуты которые я вам сказал написать предназначены для того, что бы при синтезе эти триггеры у вас не минимизировались.
Резылутат минимизации вы сами видите на вашей временной диаграмме.Некоторые сигналы шины data_out имеют комбинаторный выход.

Если вы опишите автомат перечислимым типом, то по умолчанию(если иное не указано в настройках синтезаторы) у вас будет кодирование one-hot (один триггер - одно состояние), больше возможностей для декодирования автомата, вы частично снимите нагрузку с трассировочных ресурсов. Для того, что бы вернуться к прежнему типу кодирования вам не надо будет переписывать код, достаточно просто указать что вы хотите тот или иной тип кодировок.

В вашем проекте это не критично т.к. частота очень маленькая.
Go to the top of the page
 
+Quote Post
White
сообщение Sep 14 2005, 09:21
Сообщение #26


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

Группа: Свой
Сообщений: 81
Регистрация: 31-01-05
Из: Москва
Пользователь №: 2 324



Цитата
Аттрибуты которые я вам сказал написать предназначены для того, что бы при синтезе эти триггеры у вас не минимизировались.
Резылутат минимизации вы сами видите на вашей временной диаграмме.Некоторые сигналы шины data_out имеют комбинаторный выход.


не помогает sad.gif Сигнал на выходы data_out[31:26] приходит явно позже чем на остальные. И еще чем отличаются RTL вию и текноложи вию ? на первом указаные выходы имеют тригеры а на втором судя по всему нет (хотя я не уверен)

PS И так ни кто и не ответел на вопрос
Цитата
А можно про констрейны по-подробнее? Или что почитать посоветуйте про них и вообще и если можно с рускими буквами smile.gif?
Go to the top of the page
 
+Quote Post
vetal
сообщение Sep 14 2005, 09:37
Сообщение #27


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Выключите так же:
Remove duplicate registers -off.
При просмотре в tmv выделите пины с 26 по 31 и правойкнопкой отфильтруйте по sources.
Все эти выводы должны иметь регистровый выход(У меня по крайней мере так), т.е. разности задержек быть не должно.
Сигнал clk должен сидеть на глобальном буфере.

Цитата
И еще чем отличаются RTL вию и текноложи вию ?

Первый- то что вы написали, а второй то что получили.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 14 2005, 09:52
Сообщение #28


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Насчет счетчика и всех асинхронно/синхронных дел
Если посмотреть на то, из какаих ЛЯ состоит ваша ЦПЛД, то можно увидеть что у вас есть тригеры, которые можно сбрасывать либо асинхронно, либо синхронно.

Если реализовать оба вида сброса на одном и том же элементе, то будет использована дополнительная логика общего применения и то что вы хотите займет больше места на чипе. но вам как я понял это не критично.
Имхо счетчик на ЦПЛД лучше сделать на обычных тригерах, не используя суматор + тригеры (как на ФПГА), но здесь нужно внимательно посмотреть на струкутру ЛЯ. и тогда у вас получиться описать так, что бы синтезатор вас понял.

Насчет КА, вам решать какой способ описания использовать, но если уж учиться то нужно учиться делать хорошо smile.gif)
а если вам потребуеться автомат на 50 состояний ?

Рекомендую почиать вам xst.pdf(раздел HDL coding styles), cfg.pdf (документация на ISE).
и доку на симплифай, там расписанно что такое констрейны и с чем их едят smile.gif


--------------------
Go to the top of the page
 
+Quote Post
White
сообщение Sep 14 2005, 10:07
Сообщение #29


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

Группа: Свой
Сообщений: 81
Регистрация: 31-01-05
Из: Москва
Пользователь №: 2 324



2 vetal Спасибо за советы все заработало a14.gif

2 des00 Понятно. За ссылки на доки спасибо, на русском бы что-нибудь smile.gif
Ну ладно будем есть что дают . Спасибо за помощь a14.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 14 2005, 11:02
Сообщение #30


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(White @ Sep 14 2005, 05:07)
За ссылки на доки спасибо, на русском бы что-нибудь smile.gif

Это врядли, да и еще Douglas Smith HDL Chip design.
ИМХО читать в обяз!!
и John F. Wakerly книгу не знаю, у меня есть главы со 2(number systems and codes) по 9ю(Sequental circut design examples) весит 7.5 метров
могу поделиться.

есть немного по ВХДЛ на руском http://servis-ins.narod.ru/tmp/vhdl/vhdl.html


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:37
Рейтинг@Mail.ru


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