jamba1919 0 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба Добрый день! Есть процесс, который по клоку считыввает 8 бит паралельного слова в регистр а затем часть данных перекидывает в промежуточный регистр. Как я представлял ПРОЦЕСС выполняется последовательно и полностью если не изменится список чувствительности(CLK). Команда out_d <=freq_reg(0 TO 7); --test выводит данные на выход для теста. При моделировании выяснилось что данные на выходе появляются только при 3ем тактовом импульсе CLK, хотя по идее дожны бы сразу. Вобщем все как бы работает но с задержкой на 3 импульса. В чем причина? такое ощущение что за эти три импульса схема дорабатывает ПРОЦЕСС. Но по описаниям ПРОЦЕСС всегда начинается с начала?. Поясните пожалуйста ситуацию PROCESS (clk) BEGIN IF (clk'EVENT and clk = '1') THEN -- прищел фронт синлала клок sr(7 DOWNTO 1) <= sr(6 DOWNTO 0); -- сдвигаем 64 разрядный регистр на 8 вверх,sr7>>MSB sr0>>LSB sr(0) <= in_d; -- в освободившиюся позицыю sr(0) записываем 8 бит -- проверяем на наличие конца записи 64 bits --переписываем данные в промежуточный регистр freq_reg(0 TO 7) <= sr(0); freq_reg(8 TO 15) <= sr(1); freq_reg(16 TO 23) <= sr(2); freq_reg(24 TO 31) <= sr(3); - out_d <=freq_reg(8 TO 15); --test END IF; END PROCESS; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dspx 0 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба Добрый день! Есть процесс, который по клоку считыввает 8 бит паралельного слова в регистр а затем часть данных перекидывает в промежуточный регистр. Как я представлял ПРОЦЕСС выполняется последовательно и полностью если не изменится список чувствительности(CLK). Команда out_d <=freq_reg(0 TO 7); --test выводит данные на выход для теста. При моделировании выяснилось что данные на выходе появляются только при 3ем тактовом импульсе CLK, хотя по идее дожны бы сразу. Вобщем все как бы работает но с задержкой на 3 импульса. В чем причина? такое ощущение что за эти три импульса схема дорабатывает ПРОЦЕСС. Но по описаниям ПРОЦЕСС всегда начинается с начала?. Поясните пожалуйста ситуацию PROCESS (clk) BEGIN IF (clk'EVENT and clk = '1') THEN -- прищел фронт синлала клок sr(7 DOWNTO 1) <= sr(6 DOWNTO 0); -- сдвигаем 64 разрядный регистр на 8 вверх,sr7>>MSB sr0>>LSB sr(0) <= in_d; -- в освободившиюся позицыю sr(0) записываем 8 бит -- проверяем на наличие конца записи 64 bits --переписываем данные в промежуточный регистр freq_reg(0 TO 7) <= sr(0); freq_reg(8 TO 15) <= sr(1); freq_reg(16 TO 23) <= sr(2); freq_reg(24 TO 31) <= sr(3); - out_d <=freq_reg(8 TO 15); --test END IF; END PROCESS; Как-то сумбурно объясняете, видно сами с трудом понимаете, что хотите получить. Исходя из вашего описания, sr(7 DOWNTO 0) - 8-разрядный сдвиговый регистр, который по каждому положительному фронту клока защелкивает в младший разряд входной сигнал. Содержимое регистр каждый такт сдвигает вправо. Далее, в каждый старший бит октета 32-го регистра freq_reg вы забисываете соотв бит вашего сдвигового регистра. На каждом такте в ваш выходной регистр out_d защелкивается значение2-го октета freq_reg. Так как процесс работает параллельно, то на 1-м такте ваш входной сигнал оказывается на выходе sr(0), на 2-м такте он взводится в freq_reg(7)и в sr(1), на 3-м в freq_reg(15) и в sr(2) и на 4-м оказывается на выходе out_d(0). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSV 0 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба В чем причина?А Вы попытайтесь нарисовать временнУю диаграмму Вашей схемы (только учтите, что все присвоения в процессе выполняются параллельно (т.е. в пределе одновременно), а не последовательно, в данном случае по восходящему фронту тактового сигнала) и сразу поймете в чем причина. P.S. Прежде, чем задавать вопрос, полезно немного думать, литературу читать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jamba1919 0 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба Вы все верно описали. Как я понял моя ошибка в том что я считал ПРОЦЕСС выполняющимся последовательно а он выполняется паралельно? Написано что процесс это совокупность последовательных операторов. Если не сложно поясните эту ситуацию. В процессе все операторы выполняться тоже параллельно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dspx 0 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба Вы все верно описали. Как я понял моя ошибка в том что я считал ПРОЦЕСС выполняющимся последовательно а он выполняется паралельно? Написано что процесс это совокупность последовательных операторов. Если не сложно поясните эту ситуацию. В процессе все операторы выполняться тоже параллельно? Сложно комментровать то что где-то у кого-то написано. Но смысл должен быть такой. Каждая строка в теле процесса вида a<=b; -это описание регистра, который по сигналу из списка чувствительности процесса(в данном случае по положительному фронту клока) сохранит на выходе a то что у него было на входе b. Если таких строк несколько, то каждую строку синтезатор заменит регистром. Поэтому конструкция a1<=a0; a2<=a1; a3<=a2; a4<=a3; представляет собой 4 регистра соединенных в последовательную цепочку, где выход предыдущего регистра заведен на вход последующего, таким образом сигнал попавший на вход а0 окажется на выходе а4 через 4 такта. Читайте документацию по VHDL c примерами :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jamba1919 0 4 января, 2010 Опубликовано 4 января, 2010 · Жалоба Спасибо за помощь! Мозги прояснились.. Все таки это первый проект на плис а переход с Си требует некоторой ломки:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 4 января, 2010 Опубликовано 4 января, 2010 · Жалоба ... Написано что процесс это совокупность последовательных операторов. ... Бибило читаете? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 5 января, 2010 Опубликовано 5 января, 2010 · Жалоба Оператор a<=b сам выполняется параллельно. Т.е. реальное присваивание a произойдет ПОСЛЕ исполнения тела процесса. Так что присваивания в процессе действительно выполняются строго по очереди, но переменные, из которых они берут значения в момент присваивания 'заморожены', и обновляются все одновременно в самом конце. (Это несколько упрощенная трактовка, но в данном случае вполне адекватная) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laptop 0 5 января, 2010 Опубликовано 5 января, 2010 · Жалоба Если уж очень хочется использовать результаты сразу внутри процесса, то заводите переменные и используйте оператор ':='. А так все выполняется только по положительному перепаду тактового сигнала. Выносите из процесса то что должно без условий выполняться. Почитайте о отличии переменных от сигналов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nikolascha 0 8 января, 2010 Опубликовано 8 января, 2010 · Жалоба Как я понял моя ошибка в том что я считал ПРОЦЕСС выполняющимся последовательно а он выполняется паралельно? Написано что процесс это совокупность последовательных операторов. Если не сложно поясните эту ситуацию. В процессе все операторы выполняться тоже параллельно? В процессе операторы выполняются последовательно. Только при этом нужно учитывать, что сигналы по ходу последовательного выполнения команд процесса не меняют своих значений до завершения процесса. Т.е. если на момент срабатывания процесса сигнал А=5, B=2, то для такого кода: PROCESS(...) ... A<=A+1; B<=A; A<=A+B; ... END PROCESS мы будем иметь А=7, B=5, а не А=6, B=12 как в обычном языке программирования... Причем то, что А=7, а не 6 доказывает то, что операторы в процессе выполняются последовательно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 8 января, 2010 Опубликовано 8 января, 2010 · Жалоба В процессе операторы выполняются последовательно. Только при этом нужно учитывать, что сигналы по ходу последовательного выполнения команд процесса не меняют своих значений до завершения процесса. Добавлю, что временами можно упростить понимание кода и себе жизнь, используя внутри процессов вместо сигналов переменные. У переменных только одно значение, которое изменяется сразу после присваивания. Только снаружи процесса они не видны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jamba1919 0 13 января, 2010 Опубликовано 13 января, 2010 · Жалоба еще раз все спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться