Делаю 'real time clock' для восьмибитной системы.
Есть процесс, который по внешним клокам инкрементирует счетчик.
Есть процесс, который по внешнему сигналу чтения читает (в том числе и) этот
счетчик.
(пока всё ок).
Добавляю процесс, который по внешнему сигналу записи пишет в счетчик, получаю
конфликт.
Как бы его так логически разрулить?
Двупортовую память ставить? Маразмовато выходит.
Есть другие методы?
. С уважением, Hикита.
... С сегодняшнего дня этот вопpос y нас - наболевший.
NAS> Привет, All !
NAS> Делаю 'real time clock' для восьмибитной системы.
NAS> Есть процесс, который по внешним клокам инкрементирует счетчик.
NAS> Есть процесс, который по внешнему сигналу чтения читает (в том числе и)
NAS> этот счетчик.
NAS> (пока всё ок).
NAS> Добавляю процесс, который по внешнему сигналу записи пишет в счетчик,
NAS> получаю конфликт.
NAS> Как бы его так логически разрулить?
NAS> Двупортовую память ставить? Маразмовато выходит.
NAS> Есть другие методы?
Hаписать все в одном процессе, причем приоритет должен быть у того, кто пишет
в счетчик. А сейчас получается, что регистр счетчика должен одновременно
принимать значения и счетчик+1 и "загружаемое значение". Двупортовая память не
спасет, она только разделит счетчик на две альтернативные ветки.
if rising_edge(clk)
if load = '1 then counter <= load_value;
elsif (тут проверка на достижение конца и инкремент)
bye
27 Nov 07 , 22:24 Ilia Tarasov писал к Nickita A Startcev:
IT> Hаписать все в одном процессе, причем приоритет должен быть у того,
IT> кто пишет в счетчик.
то есть, сделать процесс, чувствительный ко всему и уже внутри выбирать, что
именно случилось?
IT> А сейчас получается, что регистр счетчика должен одновременно
IT> принимать значения и счетчик+1 и "загружаемое значение".
именно так.
IT> Двупортовая память не спасет, она только разделит счетчик на две
IT> альтернативные ветки.
IT> if rising_edge(clk)
IT> if load = '1 then counter <= load_value;
IT> elsif (тут проверка на достижение конца и инкремент)
Ага. Ясно.
. С уважением, Hикита.
... Во всём виноваты тараканы в голове.
27 Nov 07 , 22:24 Ilia Tarasov писал к Nickita A Startcev:
IT> if rising_edge(clk)
IT> if load = '1 then counter <= load_value;
IT> elsif (тут проверка на достижение конца и инкремент)
Ага. Ясно.
Точнее неясно. Где и кто должен сбрасывать 'load'?
NAS> то есть, сделать процесс, чувствительный ко всему и уже внутри выбирать,
NAS> что именно случилось?
Только к clk. А уже внутри проверять управляющие сигналы. То, что проверяется
строго по фронту тактового, в список чувствительности не пишется (и вообще в
него пишутся сигналы, изменение которых должно приводить к пересчету _модели_,
на синтез список чувствительности не влияет).
bye
IT>> if rising_edge(clk)
IT>> if load = '1 then counter <= load_value;
IT>> elsif (тут проверка на достижение конца и инкремент)
NAS> Ага. Ясно.
NAS> Точнее неясно. Где и кто должен сбрасывать 'load'?
Так это... внешняя схема.
bye
28 Nov 07 , 23:13 Ilia Tarasov писал к Nickita A Startcev:
IT>>> if rising_edge(clk)
IT>>> if load = '1 then counter <= load_value;
IT>>> elsif (тут проверка на достижение конца и инкремент)
NAS>> Ага. Ясно.
NAS>> Точнее неясно. Где и кто должен сбрасывать 'load'?
IT> Так это... внешняя схема.
Как я понял, транслятор выругался на "в эту переменную пишут из разных мест,
асинхронно. Конфликты будут".
А ты свёл задачу к кем же конфликтам, но не с счетчиком, а с load'ом.
. С уважением, Hикита.
... "Пыль толще 1 см падает сама".
NAS> Как я понял, транслятор выругался на "в эту переменную пишут из разных
NAS> мест, асинхронно. Конфликты будут".
NAS> А ты свёл задачу к кем же конфликтам, но не с счетчиком, а с load'ом.
Load с явным приоритетом. Если load, то плевать на "не-load".
bye
NAS> Делаю 'real time clock' для восьмибитной системы.
NAS> Есть процесс, который по внешним клокам инкрементирует счетчик.
NAS> Есть процесс, который по внешнему сигналу чтения читает (в том числе и) этот
NAS> счетчик.
NAS> (пока всё ок).
NAS> Добавляю процесс, который по внешнему сигналу записи пишет в счетчик, получаю
NAS> конфликт.
А помнишь наше общение в ЖЖ, когда я утверждал, что счётчик,
считающий время, переписывать нельзя, а надо использовать второй
счётчик?
Hа данной системе не хватает ресурсов, или всё же считаешь, что
можно обойтись одним?
-netch-
29 Nov 07 , 22:43 Valentin Nechayev писал к Nickita A Startcev:
NAS>> Делаю 'real time clock' для восьмибитной системы.
NAS>> Есть процесс, который по внешним клокам инкрементирует счетчик.
NAS>> Есть процесс, который по внешнему сигналу чтения читает (в том
NAS>> числе и) этот счетчик. (пока всё ок). Добавляю процесс, который
NAS>> по внешнему сигналу записи пишет в счетчик, получаю конфликт.
VN> А помнишь наше общение в ЖЖ, когда я утверждал, что счётчик,
VN> считающий время, переписывать нельзя, а надо использовать второй
VN> счётчик?
Помню, но слабо.
Перезапись этого счетчика заинтересовала меня в основном в смысле общей
стройности концепции. Кроме того, расширил счетчик до 32 бит, 136 лет аптайма у
этого девайса, я думаю, не будет.
VN> Hа данной системе не хватает ресурсов, или всё же считаешь, что
VN> можно обойтись одним?
Ресурсов хватает, вопрос скорее общеинтересный, чем 'вот кровь из носа надо
сделать так'.
Сейчас привязал все процессы к клоку (в том числе и инкремент счетчика), запись
нового значения делаю во временный регистр, его переписываю "по запросу" в
регистр счетчика. Запрос снимаю из того же места, где и выставляю, но по
заднему фронту сигнала записи (или по низкому уровню? не помню)
ps: сейчас в проекте сидит ядро пикоблейз, 32 ШИМа, 7сегментный индикатор,
вывод на 8светодиодиков, УАРТ. Всё работает независимо от процессора, например,
семисегментник выглядит как три восьмиразрядных регистра (пишем два числа и
маску 'десятичных точек', железо само всё отображает не отвлекая процессор на
регенерацию). Размышляю о блокирующем вводе/выводе в/из УАРТ.
Проект занимает порядка 13-25% ресурсов xc3s200 (то есть, в принципе, влезет и
в 50й), заводится на 70МГц, но об оптимизации я пока что вообще не задумывался.
. С уважением, Hикита.
... как игогокнется, так и отфофыкнется?
29 Nov 07 , 15:05 Ilia Tarasov писал к Nickita A Startcev:
NAS>> Как я понял, транслятор выругался на "в эту переменную пишут из
NAS>> разных мест, асинхронно. Конфликты будут". А ты свёл задачу к
NAS>> кем же конфликтам, но не с счетчиком, а с load'ом.
IT> Load с явным приоритетом. Если load, то плевать на "не-load".
В переменную load запись идет в нескольких асинхронных местах. Разве нет?
. С уважением, Hикита.
... Чужие неврозы надо уважать. Что не сделаешь для хорошего человека?
NAS> В переменную load запись идет в нескольких асинхронных местах. Разве
NAS> нет?
Hадо сделать в одном. По принципу "если процессор хочет - он пишет, иначе
нет".
bye