![]() |
В анриале жмем Esc попадаем в отладчик, там жмем Alt+w -> to binary file, дальше думаю будет понятно..
|
1 Attachment(s)
пока убрал цвет, попытался вывести ЧБ картинку. результат ниже.
могут ли данные глюки пикселей возникнуть от то того что я используюу Флэшром (M29F002NT-120PI) от старой материнки и она подключена к циклону 3.3в IO а сама флэш запитана от 5в? или тут скорости самой флэши нехватает? если нужно могу выложить проект квартуса, на случай если косяк не в флэшке. клок счетчиков - 14МГц, адрес считается с 4го вывода счетчика - 0.875МГц |
Больше всего похоже на то, что данные защелкиваются слишком рано.
|
пока они не защелкиваются, я просто мультиплексором их вывожу, каждые 8 пикселов адрес меняется на следующий
|
Выглядит так, как будто проблемы только на границах слов. Попробуй сделать что-то наподобие конвейера: пиксели выдвигать из своего внутреннего регистра, а запись в регистр делать в противофазе с переключением счетчика адресов. Тогда у флешки будет достаточно времени, чтобы выдать устоявшийся сигнал.
|
1 Attachment(s)
попрбую и этот способ, но я тут присмотрелся и заметил, что глюк всегда один и тот же и на том же месте, идут с определенной закономерностью. вероятно что в схеме косяк (я в квартусе схемно все нарисовал).
вот скрин по больльше, на нем видно что оба диззика глючат одинаково, да все по вертикали одинаково глюкнуло, выходит знакоместо здвинуто на 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 еще не загруженного слова.
|
1 Attachment(s)
то была старая схема и слеплена наугад, терь я сделал на сдвиговом регистре, биты стоят по порядку 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'; |
Code:
signal sHSCR; |
или так (не знаю, занимает ли этот вариант больше 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
|
Quote:
|
я вроде еще порядок битов задом наперед поставил )
так вроде правильно будет? 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; |
Quote:
а все остальное я понял вроде...: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: |
Quote:
если hcnt(2) равно нулю, то в А поступают одни данные, если равно единице - то другие. Здесь реализовано чтение данных по видео и по атрибутам экрана. |
Вот так более понятно:
Code:
case hcnt(2) is |
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:??? |
Quote:
Как у тебя описан сигнал hcnt? ---------- Post added at 23:30 ---------- Previous post was at 23:29 ---------- Quote:
Поправь <= на =. Удачи :) ---------- 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" |
1 Attachment(s)
Извините что не в тему, хочу задать вопрос. Что-то в Квартусе 2 у меня после компиляции не пишется отчет о задействованных ячейках, в том числе и памяти (использую ПЗУ на 4 кБайта в проекте). Может я где-то какие-то крыжики не поставил?
|
файлы проекта в студию...
|
Quote:
Дай сам файлик посмотреть. |
1 Attachment(s)
Вот сам файлик. Но привязку я сделал, не первый раз замужем. В других проектах (они в большинстве на 7128, а этот - на Циклоне) все нормально. Причем выходные файлы компилятора создаются.
|
Quote:
Code:
VAIT : out std_logic; |
1 Attachment(s)
Пожалуйста, правда причем здесь остальные файлы для понимания. Суть проблемы-то не меняется.
|
Quote:
Хотя нет в vhdl языке переменная wait зарезервирована и ее нельзя использовать. В редакторе при попытке поменять на правильное WAIT последнее подсвечивается синем цветом. |
Картинка говорит о том, что где-то упущен 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. Я поменял в самом начале программы на следующее: Quote:
---------- 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'; схема просто не тактировалась, отсюда и "оптимизация в ноль". Quote:
Переключаю банально руля старшим адресом ROM. На клавиатуре у меня задействована кнопка F8 для переключения, в модуле это сигнал cpm_s (нажата - "1"), сигнал идет на обычный триггер, с которого и рулится старший адрес ROM с мониторами. Quote:
У меня в "напиханном" Орионе 25 варнингов. Избавляйся по мере возможностей от latch (простые "защелки" в проекте заменяй на регистры, тактируемые клоком). Quote:
---------- 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 можешь получать другие частоты :) |
Quote:
|
| All times are GMT +4. The time now is 06:42. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.