|
Signal cannot be synthesized, bad synchronous description., Не пойму в чем дело... |
|
|
|
Feb 4 2012, 18:26
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 23-09-11
Пользователь №: 67 345

|
Добрый вечер, было уже когда-то похожая проблема но сейчас уже не помню с чем связана. В итоге есть код: Код function read_bit(signal RX, SCK:std_ulogic) return bit is variable read_data: Std_uLogic_Vector ( 4 downto 0); variable current_bit : bit; begin for i in 0 to 4 loop if(rising_edge(SCK)) then read_data(i) := RX; end if; end loop;
if (read_data = "00000") then current_bit:='0'; elsif (read_data = "00001") then current_bit:='0'; elsif (read_data = "00010") then current_bit:='0'; elsif (read_data = "00011") then current_bit:='0'; elsif (read_data = "00100") then current_bit:='0'; elsif (read_data = "00101") then current_bit:='0'; elsif (read_data = "00110") then current_bit:='0'; elsif (read_data = "00111") then current_bit:='1'; elsif (read_data = "01000") then current_bit:='0'; elsif (read_data = "01001") then current_bit:='0'; elsif (read_data = "01010") then current_bit:='0'; elsif (read_data = "01011") then current_bit:='1'; elsif (read_data = "01100") then current_bit:='0'; elsif (read_data = "01101") then current_bit:='1'; elsif (read_data = "01110") then current_bit:='1'; elsif (read_data = "01111") then current_bit:='1'; elsif (read_data = "10000") then current_bit:='0'; elsif (read_data = "10001") then current_bit:='0'; elsif (read_data = "10010") then current_bit:='0'; elsif (read_data = "10011") then current_bit:='1'; elsif (read_data = "10100") then current_bit:='0'; elsif (read_data = "10101") then current_bit:='1'; elsif (read_data = "10110") then current_bit:='1'; elsif (read_data = "10111") then current_bit:='1'; elsif (read_data = "11000") then current_bit:='0'; elsif (read_data = "11001") then current_bit:='1'; elsif (read_data = "11010") then current_bit:='1'; elsif (read_data = "11011") then current_bit:='1'; elsif (read_data = "11100") then current_bit:='1'; elsif (read_data = "11101") then current_bit:='1'; elsif (read_data = "11110") then current_bit:='1'; elsif (read_data = "11111") then current_bit:='1'; end if; return current_bit; end;
begin process (SCK,RX) variable current_bit:bit; variable read_data: Std_uLogic_Vector ( 4 downto 0); begin if (falling_edge(RX)) then current_bit:=read_bit(RX,SCK); current_bit:=read_bit(RX,SCK);
DATA <= "0000000000000000000000000000000000000000000000000000000000000000000000000000 000"&to_stdulogic(current_bit); end if; end process; И получаю ошибку line 57: Signal read_data1<0> cannot be synthesized, bad synchronous description. The description style you are using to describe a synchronous element (register, memory, etc.) is not supported in the current software release.. Подскажите в чем дело. Тема похожая уже здесь была, я ее просматривал но осознать как подправить код не смог(. Спасибо. P.S. про жуткий способ вычисления current_bit знаю, просто я игрался с ошибкой что-бы понять в чем дело.
Сообщение отредактировал h0t - Feb 4 2012, 18:28
|
|
|
|
|
Feb 4 2012, 19:18
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 23-09-11
Пользователь №: 67 345

|
Да вроде можно, если вытащить функцию то это не помогает( Там что-то с сигналами связано, но вот не помню что...
|
|
|
|
|
Feb 4 2012, 19:22
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 23-09-11
Пользователь №: 67 345

|
Цитата(gosu-art @ Feb 4 2012, 23:18)  Так мало того там установка бита по rising_edge и по falling_edge  Можно подробнее, я не понял что Вы имели ввиду. Это вроде же разные сигналы....
|
|
|
|
|
Feb 4 2012, 19:36
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 23-09-11
Пользователь №: 67 345

|
Цитата(gosu-art @ Feb 4 2012, 23:27)  А то, что такую конструкцию в ПЛИС невозможно реализовать. Причем у вас явно мышление "обычного" программиста - типа все операторы выполняются последовательно Если поменять один из них на if (RX='0') результат будет такой же...( у меня process
Сообщение отредактировал h0t - Feb 4 2012, 19:36
|
|
|
|
|
Feb 4 2012, 19:45
|
Знающий
   
Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939

|
Цитата for i in 0 to 4 loop if(rising_edge(SCK)) then read_data(i) := RX; end if; end loop; Вот эта штука - ваще атасс  хотя бы попробуйте пока ее вообще выкинуть
|
|
|
|
|
Feb 4 2012, 19:48
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 23-09-11
Пользователь №: 67 345

|
я писал, что над функцией я игрался что-бы понять в чем ошибка. Если я ее выкину то вопрос станет не актуальный. Прошу Вас конструктивно объяснить в чем проблема.
|
|
|
|
|
Feb 5 2012, 08:46
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 23-09-11
Пользователь №: 67 345

|
Цитата(gosu-art @ Feb 4 2012, 23:27)  А то, что такую конструкцию в ПЛИС невозможно реализовать. Причем у вас явно мышление "обычного" программиста - типа все операторы выполняются последовательно Кажется я понял что Вы имели ввиду. НО полного осознания еще ни пришло код переписал полностью по тактам только от SCK. Но если объясните подробно буду благодарен. .
|
|
|
|
|
Feb 5 2012, 09:36
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(h0t @ Feb 4 2012, 21:26)  Код function read_bit(signal RX, SCK:std_ulogic) return bit is ... begin ... if(rising_edge(SCK)) then read_data(i) := RX; end if; ... end; ... begin process (SCK,RX) ... begin if (falling_edge(RX)) then current_bit:=read_bit(RX,SCK); ... end if; end process; если подставить функцию на место её применения то получается Код ... begin process (SCK,RX) ... begin if (falling_edge(RX)) then if(rising_edge(SCK)) then read_data(i) := RX; end if; end if; end process; То есть вложенные друг в друга констпукции if с срабатыванием по фронту (falling_edge или rising_edge). Этого нельзя - в ПЛИС нет схем которые умеют так работать, и синтезатор поэтому отказывается.
|
|
|
|
|
Feb 5 2012, 11:44
|
Участник

Группа: Участник
Сообщений: 51
Регистрация: 23-09-11
Пользователь №: 67 345

|
Все спасибо, осознал. Всем спасибо.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|