Я не специалист, но по-моему "always @(negedge clk or negedge SHRTC)" это неправильно. Попробуй разделить на две части, одна из которых будет привязана к negedge clk, а вторая - к negedge SHRTC.
Я не специалист, но по-моему "always @(negedge clk or negedge SHRTC)" это неправильно. Попробуй разделить на две части, одна из которых будет привязана к negedge clk, а вторая - к negedge SHRTC.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Да вроде работает и так в других процессах. Вот, например, вертикальная развертка:
Но, за совет спасибо! Попробую прямо сейчас!Код:assign VRTC_out = (vr_cnt == 0) | ~(SVRTC); always @(negedge SVRTC or negedge clk) // Vertical sync control begin if (SVRTC == 'b0) vr_cnt <= 'b111111111; else if (vr_cnt > 'b0) begin if ((vr_cnt != 'b1) || (SHRTC == 'b0)) vr_cnt <= vr_cnt - 1; else; end else; end
Заработало!!! Спасибо! Вот что значит свежий взгляд!
Последний раз редактировалось Santechnik; 19.06.2010 в 14:06.
Формально в этом нету особой неправильности. Но на практике все такие конструкции имеют такой вид:
Если посмотреть на RTL схему от этой конструкции, то можно увидеть, что yyy подается на вход асинхронного сброса (или асинхронной установки) счетчика, а xxx -- на тактирующий вход. Какой фронт используется у обоих сигналов, значения не имеет.Код:reg [3:0] rrr; always @(posedge xxx or posedge yyy) if (yyy) rrr <= 0; else rrr <= rrr + 1;
В коде вертикальной развертки все просто -- одна из половинок делает асинхронную установку. А в горизонтальной написано так, что на оба фронта загружается не константа, выходит, что это не регистр с асинхронным сбросом, а что-то типа двухпортовой ячейки, или я даже не знаю что это. Наверное, Квартус тоже не понял.
Больше игр нет
Последний раз редактировалось b2m; 19.06.2010 в 14:46.
Интересно, что я там в первый раз пытался квартусу всучить, что он так ругался "Internal Error"? Кстати, до того как заработало, конструкция занимала около 60 элементов. Сейчас 30
Я думал, что неважно, что напишу, квартус разрулит это как-нибудь. Спасибо за разъяснения! Может мне книжку какую посоветуешь почитать для восполнения пробелов? А то вот так и тыкаюсь как слепой котенок иногда на таких вещах.
К сожалению не знаю подходящих книжек. Так получилось, что все из интернетов. И да здравствует опенсорс.
Клифф Каммингс написал много интересных статей про Верилог. Полторы из них я даже наполовину осилил когда-то. Мне нравится, что он часто подходит к проблеме со стороны инженера-самоучки, который в принципе многое уже умеет, но не знает почему так получается.
http://www.sunburst-design.com/papers/
Больше игр нет
Набросал свою версию Радио-86РК. Качать, как всегда, на моём сайте в разделе ПЛИС. Работает почти всё, загружать программы можно через магнитофон, хотя лично я просто соеденил выход звуковой карты со входом DE1 и "жужжал" из своего эмулятора
Есть отличие от стандартного РК - я реализовал инверсию, чтобы проверить работу курсора-блока.
Супер! Попробую сегодня. А "почти все работает" что означает? Что не работает? Как реализовал ВГ75?
Все детали проектов ЮТ-88 на ПЛИС, АГАТ-7 на ПЛИС и прочее в моем блоге на http://electronicsfun.net
Почти всё работает - означает, что реализованы все БИС, в том числе ВТ57 и ВГ75.
Мелочи всякие, которые в основном не используются: сдвиг приоритетов каналов ПДП, атрибуты LA0,LA1, ну и т.п.
По аналогии с тем, что у меня в эмуляторе Ну и конечно, сверялся по Шахнову. Нельзя сказать, что реализовано в точности как в железе, но основные функции оно выполняет. В частности, кадровые и строчные СИ я использовал внешние, от генератора развёртки 800х600@50Гц. Шину данных разделил на три части (ввод,вывод и вход символа от ПДП), управляющие сигналы тоже (чтобы не городить мультиплексоров). Шину адреса ВТ57 сделал без заморочек со старшим байтом в регистре - просто 16 бит. Вобщем, разница не принципиальная, в основном адаптация для ПЛИС.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)