В анриале жмем Esc попадаем в отладчик, там жмем Alt+w -> to binary file, дальше думаю будет понятно..
Вид для печати
В анриале жмем Esc попадаем в отладчик, там жмем Alt+w -> to binary file, дальше думаю будет понятно..
пока убрал цвет, попытался вывести ЧБ картинку. результат ниже.
могут ли данные глюки пикселей возникнуть от то того что я используюу Флэшром (M29F002NT-120PI) от старой материнки и она подключена к циклону 3.3в IO а сама флэш запитана от 5в? или тут скорости самой флэши нехватает? если нужно могу выложить проект квартуса, на случай если косяк не в флэшке.
клок счетчиков - 14МГц, адрес считается с 4го вывода счетчика - 0.875МГц
Больше всего похоже на то, что данные защелкиваются слишком рано.
пока они не защелкиваются, я просто мультиплексором их вывожу, каждые 8 пикселов адрес меняется на следующий
Выглядит так, как будто проблемы только на границах слов. Попробуй сделать что-то наподобие конвейера: пиксели выдвигать из своего внутреннего регистра, а запись в регистр делать в противофазе с переключением счетчика адресов. Тогда у флешки будет достаточно времени, чтобы выдать устоявшийся сигнал.
попрбую и этот способ, но я тут присмотрелся и заметил, что глюк всегда один и тот же и на том же месте, идут с определенной закономерностью. вероятно что в схеме косяк (я в квартусе схемно все нарисовал).
вот скрин по больльше, на нем видно что оба диззика глючат одинаково, да все по вертикали одинаково глюкнуло, выходит знакоместо здвинуто на 1 пиксел по кругу.
но как я это утворил - буду думаьт
Да, точно, все сдвинуто циклически на 1. Я не заметил на той фотке.
победил я его!!! но при этом пришлось с мухлевать, здвинул биты на 1 в мультеплексоре - УРА! Диззик в номе, как и все изображение впрочем.
было раньше : 7-6-5-4-3-2-1-0 терь 0-7-6-5-4-3-2-1
---------- Post added at 17:36 ---------- Previous post was at 17:03 ----------
теперь видно, что весь экран съехал на пиксель влево (
как это можно регулировать?
Странно, должен бы съехать на 1 пикесль вправо, ведь на месте самого левого пикселя ты не можешь показать бит 0 еще не загруженного слова.
то была старая схема и слеплена наугад, терь я сделал на сдвиговом регистре, биты стоят по порядку D0..D7, сдвигаю 14МГц клоком. Может кто пояснит на каком такте данные должны грузиться в регистр сдвига (вроде надо дополнительный регистр?) и как грузить первый пиксел в строке?
добалю проект квартуса, может я где еще ошибся :confused:
Разжился я тут Кактусом полным, с таблэткой. Жужжит нормально. Только непонятно как использовать пресловутую incremental compilation. Включил в опциях компилирования "smart compilation", но ничего не изменилось. Кто-нить работал на полных версиях?
Там есть tuning advisor для incremental compilation
Много чего не совместимо, тот же Signal Tap
может кто подскажет как синхронизировать данный код с сигналом клока, т.е. привязать сигналы к такту клока:
HSCR<='1' when (hcnt>=8 and hcnt<264) else '0';
HVOE<='0' when (hcnt>=309 and hcnt<397) else '1';
HS<='0' when (hcnt>=320 and hcnt<372) else '1';
HRST<='1' when hcnt=448 else '0';
Код:signal sHSCR;
signal sHVOE;
signal sHS;
signal sHRST;
process(CLC)
begin
if CLC'event and CLC = '1' then
sHSCR <= HSCR;
sHVOE <= HVOE;
sHS <= HS;
sHRST <= HRST;
end if;
end process;
или так (не знаю, занимает ли этот вариант больше LC, однако):
if rising_edge(CLC) then
if hcnt>=8 and hcnt<264 then
HSCR<='1';
else
HSCR<='0';
end;
....остальные сигналы
end;
правильно ли будет написать следующее безобразие:
sPIX_adr (4 downto 0) <= hcnt (7 downto 3);
sPIX_adr (7 downto 5) <= vcnt (6 downto 4);
sPIX_adr (10 downto 8) <= vcnt (3 downto 1);
sPIX_adr (12 downto 11) <= vcnt (8 downto 7);
такой строчкой:
sPIX_adr (12 downto 0) <= hcnt (7 downto 3),vcnt (6 downto 4),vcnt (3 downto 1),vcnt (8 downto 7);
??? :v2_blush:
кажись через & надо, я так писал: SHIFT_REG_DB(7 downto 1) & MISO
я вроде еще порядок битов задом наперед поставил )
так вроде правильно будет?
sPIX_adr (12 downto 0) <= vcnt (8 downto 7)&vcnt (3 downto 1)&vcnt (6 downto 4)&hcnt (7 downto 3);
Вроде правильно.
Вот кусочек Скорпиона на Циклоне:
case hcnt(2) is
when '0'=>a<="001" & p7ffd(3) & "10" & vcnt(7 downto 6) & vcnt(2 downto 0) & vcnt(5 downto 3) & hcnt(7 downto 3);
when '1'=>a<="001" & p7ffd(3) & "10110" & vcnt(7 downto 3) & hcnt(7 downto 3);
end case;
а можно разжувать для меня что есть за конструкция ...=>a<=...?:v2_blush:
а все остальное я понял вроде...:smile:
... вроде дошло:
когда 0, тогда в "а" идет ("001" & p7ffd(3) & "10" & vcnt(7 downto 6) & vcnt(2 downto 0) & vcnt(5 downto 3) & hcnt(7 downto 3))
когда 1, тогда в "а" идет ("001" & p7ffd(3) & "10110" & vcnt(7 downto 3) & hcnt(7 downto 3))
вроде так..?
ЗЫ: а вот на сдвигающем регистре я чувствую долго корячиться буду, буду лопатить книги пока пойму иль опять в тупик не зайду:v2_smile:
Вот так более понятно:
Код:case hcnt(2) is
when '0'=>
a<="001" & p7ffd(3) & "10" & vcnt(7 downto 6) & vcnt(2 downto 0) & vcnt(5 downto 3) & hcnt(7 downto 3);
when '1'=>
a<="001" & p7ffd(3) & "10110" & vcnt(7 downto 3) & hcnt(7 downto 3);
end case;
altera SDRAM
http://whoyouvotefor.info/altera_sdram.html
помогите понять что не так:confused:
process (CLK0)
begin
if (CLK0'event and CLK0='1') then
if hcnt(8 downto 0) <= 448 then
hcnt <= hcnt + 1;
else hcnt <= "000000000";
end if;
end if;
end process;
Квартус выдает ошибку:
Error (10327): VHDL error at vgasync.vhd(36): can't determine definition of operator ""<="" -- found 0 possible definitions
:v2_conf2: скопировал из другого проекта где процесс работал, что я не так делаю:v2_conf3:???
"Невозможно применение <= в данном конкретном случае". На какую строчку укажет курсор если щелкнуть по сообщению об ошибке?
Как у тебя описан сигнал hcnt?
---------- Post added at 23:30 ---------- Previous post was at 23:29 ----------
слепая я п... :)
Поправь <= на =.
Удачи :)
---------- Post added at 23:36 ---------- Previous post was at 23:30 ----------
Кстати, лучше писать так:
process(clk0,hcnt)
begin
if (clk0'event and clk0='1') then
if hcnt=447 then -- для 448 пикселей (0-447)
hcnt<="000000000";
else
hcnt<=hcnt+1;
end if;
end if;
end process;
спасибо,:v2_wink: оказалось нужно было добавить это в начало:
use IEEE.std_logic_unsigned.all;
только после этого все заработало:v2_blush:
Подскажите как в квартусе задать в настройках, чтобы задержка группы сигналов (например идущих на сдрам) была приблизительно одинаковой (например по отношению к клоку).
Если для притирки SDRAM, то стоит взять TimeQuest II и в нем "отконстрейнить" дизайн (то есть задать все ограничения и требования по времянкам). Тогда квартус при компиляции будет эти требования и ограничения учитывать.
Книжки на тему (мне их не прицепить, но гуглятся легко):
"Quartus II TimeQuest Timing Analyzer Cookbook"
документ "Constraining SOPC Designs v1.1.doc"
документ "TimeQuest_Clocks_Quick_Start_Guide.doc"
" AN433 - Constraining and Analyzing Source-Synchronous Interfaces.pdf"
Извините что не в тему, хочу задать вопрос. Что-то в Квартусе 2 у меня после компиляции не пишется отчет о задействованных ячейках, в том числе и памяти (использую ПЗУ на 4 кБайта в проекте). Может я где-то какие-то крыжики не поставил?
файлы проекта в студию...
Вот сам файлик. Но привязку я сделал, не первый раз замужем. В других проектах (они в большинстве на 7128, а этот - на Циклоне) все нормально. Причем выходные файлы компилятора создаются.
Пожалуйста, правда причем здесь остальные файлы для понимания. Суть проблемы-то не меняется.
Картинка говорит о том, что где-то упущен clock, или enable, или есть еще какой-то промах из-за которого вся схема упростилась практически до пустышки.
Надо внимательно читать сообщения, которые Квартус выдает при компиляции и внимательно смотреть все свои сигналы и шины. Бывает.
Комментарии к проекту:
1. Описания и организацию работы с клавиатурой (еще не задействована) я позаимствовал у Ewgeny7.
2. Пока пытаюсь эмуллировать оригинальный Специалист, но в плане и МХ.
3. Буду применять готовые исходники 8253 для эмулляции последнего.
Ewgeny7, на словах объясни каким образом у тебя меняются прошивки мониторов в проекте.
---------- Post added at 07:02 ---------- Previous post was at 07:00 ----------
Возможно. Предупреждений более 100 пока. На какой вывод данного Циклона следует привязывать сигнал CLOCK в моем проекте частотой 24 МГц?
---------- Post added at 07:16 ---------- Previous post was at 07:02 ----------
Вопрос о выводе результатов компиляции снимается. Просто компилятор в одном из предупреждений выдал мне что не используется вход clock. Я поменял в самом начале программы на следующее:
И все стало выводится. Пока задействовано 50% ячеек и 32832 из 59904 бит памяти (4 кБайта).Цитата:
clk <= '0' when clock = '0' else '1';
---------- Post added at 07:17 ---------- Previous post was at 07:16 ----------
А как сделать деление входной частоты на 3?
---------- Post added at 07:27 ---------- Previous post was at 07:17 ----------
Количество предупреждений доведено до 44!
Да, ошибка была тут:
clk <= '1' when clock = '0' else '1';
схема просто не тактировалась, отсюда и "оптимизация в ноль".
Делаю ROM размером с два монитора. Соответственно, оба монитора там и сидят.
Переключаю банально руля старшим адресом ROM. На клавиатуре у меня задействована кнопка F8 для переключения, в модуле это сигнал cpm_s (нажата - "1"), сигнал идет на обычный триггер, с которого и рулится старший адрес ROM с мониторами.
Хорошо, но лучше меньше :)
У меня в "напиханном" Орионе 25 варнингов.
Избавляйся по мере возможностей от latch (простые "защелки" в проекте заменяй на регистры, тактируемые клоком).
Проще всего - PLL. Но без нормальной разводки питания может подглюкивать и "плыть". Сделай простой счетчик на три клока, по заполнению меняй фазу выходного клока.
---------- Post added at 10:03 ---------- Previous post was at 09:51 ----------
Кстати, если деление частоты тебе нужно только для процессора, то есть такая удобная хитрость - не делить частоту, а просто приостанавливать подачу тактовой на нужное время. Например, у тебя есть счетчик пикселей hcnt. Можно сделать так, например:
clk_cpu<=not(clk_cpu) when ((clock'event and clock='1') and (hcnt(2)='0'));
Это даст тебе псевдоделение частоты на два. Изменяя параметры hcnt можешь получать другие частоты :)