Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   ПЛИС и всё что с ними связано (http://zx-pk.ru/showthread.php?t=9342)

Keeper 5th June 2010 01:05

В анриале жмем Esc попадаем в отладчик, там жмем Alt+w -> to binary file, дальше думаю будет понятно..

aniSKY 5th June 2010 17:20

1 Attachment(s)
пока убрал цвет, попытался вывести ЧБ картинку. результат ниже.
могут ли данные глюки пикселей возникнуть от то того что я используюу Флэшром (M29F002NT-120PI) от старой материнки и она подключена к циклону 3.3в IO а сама флэш запитана от 5в? или тут скорости самой флэши нехватает? если нужно могу выложить проект квартуса, на случай если косяк не в флэшке.
клок счетчиков - 14МГц, адрес считается с 4го вывода счетчика - 0.875МГц

svofski 5th June 2010 17:37

Больше всего похоже на то, что данные защелкиваются слишком рано.

aniSKY 5th June 2010 17:59

пока они не защелкиваются, я просто мультиплексором их вывожу, каждые 8 пикселов адрес меняется на следующий

svofski 5th June 2010 18:11

Выглядит так, как будто проблемы только на границах слов. Попробуй сделать что-то наподобие конвейера: пиксели выдвигать из своего внутреннего регистра, а запись в регистр делать в противофазе с переключением счетчика адресов. Тогда у флешки будет достаточно времени, чтобы выдать устоявшийся сигнал.

aniSKY 5th June 2010 18:26

1 Attachment(s)
попрбую и этот способ, но я тут присмотрелся и заметил, что глюк всегда один и тот же и на том же месте, идут с определенной закономерностью. вероятно что в схеме косяк (я в квартусе схемно все нарисовал).
вот скрин по больльше, на нем видно что оба диззика глючат одинаково, да все по вертикали одинаково глюкнуло, выходит знакоместо здвинуто на 1 пиксел по кругу.
но как я это утворил - буду думаьт

svofski 5th June 2010 18:52

Да, точно, все сдвинуто циклически на 1. Я не заметил на той фотке.

aniSKY 5th June 2010 19:36

победил я его!!! но при этом пришлось с мухлевать, здвинул биты на 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 ----------

теперь видно, что весь экран съехал на пиксель влево (
как это можно регулировать?

svofski 5th June 2010 19:38

Странно, должен бы съехать на 1 пикесль вправо, ведь на месте самого левого пикселя ты не можешь показать бит 0 еще не загруженного слова.

aniSKY 6th June 2010 01:29

1 Attachment(s)
то была старая схема и слеплена наугад, терь я сделал на сдвиговом регистре, биты стоят по порядку D0..D7, сдвигаю 14МГц клоком. Может кто пояснит на каком такте данные должны грузиться в регистр сдвига (вроде надо дополнительный регистр?) и как грузить первый пиксел в строке?
добалю проект квартуса, может я где еще ошибся :confused:

Ewgeny7 6th June 2010 14:48

Разжился я тут Кактусом полным, с таблэткой. Жужжит нормально. Только непонятно как использовать пресловутую incremental compilation. Включил в опциях компилирования "smart compilation", но ничего не изменилось. Кто-нить работал на полных версиях?

ZEK 6th June 2010 15:14

Там есть tuning advisor для incremental compilation
Много чего не совместимо, тот же Signal Tap

aniSKY 25th June 2010 16:51

может кто подскажет как синхронизировать данный код с сигналом клока, т.е. привязать сигналы к такту клока:

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';

Keeper 25th June 2010 16:58

Code:

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;


IanPo 25th June 2010 18:35

или так (не знаю, занимает ли этот вариант больше LC, однако):
if rising_edge(CLC) then
if hcnt>=8 and hcnt<264 then
HSCR<='1';
else
HSCR<='0';
end;
....остальные сигналы
end;

aniSKY 25th June 2010 20:55

правильно ли будет написать следующее безобразие:
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:

Keeper 25th June 2010 21:13

кажись через & надо, я так писал: SHIFT_REG_DB(7 downto 1) & MISO

Ewgeny7 25th June 2010 21:24

Quote:

Originally Posted by Keeper (Post 294602)
кажись через & надо

Именно так.

aniSKY 25th June 2010 22:38

я вроде еще порядок битов задом наперед поставил )
так вроде правильно будет?
sPIX_adr (12 downto 0) <= vcnt (8 downto 7)&vcnt (3 downto 1)&vcnt (6 downto 4)&hcnt (7 downto 3);

Ewgeny7 25th June 2010 23:40

Вроде правильно.
Вот кусочек Скорпиона на Циклоне:
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;

aniSKY 26th June 2010 00:05

Quote:

Originally Posted by ewgeny7 (Post 294653)
Вроде правильно.
Вот кусочек Скорпиона на Циклоне:
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:

Ewgeny7 26th June 2010 12:29

Quote:

Originally Posted by aniSKY (Post 294662)
... вроде дошло:

Да, это формула case (выбор)
если hcnt(2) равно нулю, то в А поступают одни данные,
если равно единице - то другие.
Здесь реализовано чтение данных по видео и по атрибутам экрана.

IanPo 26th June 2010 20:27

Вот так более понятно:
Code:

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;


skyther 1st July 2010 01:14

altera SDRAM
http://whoyouvotefor.info/altera_sdram.html

aniSKY 5th July 2010 00:14

помогите понять что не так: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:???

Ewgeny7 5th July 2010 00:36

Quote:

Originally Posted by aniSKY (Post 297069)
can't determine definition of operator ""<="" -- found 0 possible definitions

"Невозможно применение <= в данном конкретном случае". На какую строчку укажет курсор если щелкнуть по сообщению об ошибке?
Как у тебя описан сигнал hcnt?

---------- Post added at 23:30 ---------- Previous post was at 23:29 ----------

Quote:

Originally Posted by aniSKY (Post 297069)
if hcnt(8 downto 0) <= 448 then

слепая я п... :)
Поправь <= на =.
Удачи :)

---------- 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;

aniSKY 5th July 2010 01:02

спасибо,:v2_wink: оказалось нужно было добавить это в начало:
use IEEE.std_logic_unsigned.all;
только после этого все заработало:v2_blush:

syd 22nd July 2010 12:05

Подскажите как в квартусе задать в настройках, чтобы задержка группы сигналов (например идущих на сдрам) была приблизительно одинаковой (например по отношению к клоку).

tnt23 22nd July 2010 13:13

Если для притирки 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"

fifan 4th August 2010 19:58

1 Attachment(s)
Извините что не в тему, хочу задать вопрос. Что-то в Квартусе 2 у меня после компиляции не пишется отчет о задействованных ячейках, в том числе и памяти (использую ПЗУ на 4 кБайта в проекте). Может я где-то какие-то крыжики не поставил?

Keeper 4th August 2010 20:12

файлы проекта в студию...

Ewgeny7 4th August 2010 20:15

Quote:

Originally Posted by fifan (Post 303894)
Может я где-то какие-то крыжики не поставил?

Гы... А ты привязку сигналов к пинам сделал в заголовке?
Дай сам файлик посмотреть.

fifan 5th August 2010 05:22

1 Attachment(s)
Вот сам файлик. Но привязку я сделал, не первый раз замужем. В других проектах (они в большинстве на 7128, а этот - на Циклоне) все нормально. Причем выходные файлы компилятора создаются.

Keeper 5th August 2010 05:40

Quote:

Originally Posted by Keeper (Post 303896)
файлы проекта в студию...

Неплохо было бы увидеть все файлы проекта, от одного vhdl файла толку мало...

Code:

VAIT                : out std_logic;
Скорее всего WAIT

fifan 5th August 2010 05:46

1 Attachment(s)
Пожалуйста, правда причем здесь остальные файлы для понимания. Суть проблемы-то не меняется.

fifan 5th August 2010 05:50

Quote:

Originally Posted by Keeper (Post 304011)
Неплохо было бы увидеть все файлы проекта, от одного vhdl файла толку мало...

Code:

VAIT                : out std_logic;
Скорее всего WAIT

Возможно, хотя я эту переменную не изменял.

Хотя нет в vhdl языке переменная wait зарезервирована и ее нельзя использовать. В редакторе при попытке поменять на правильное WAIT последнее подсвечивается синем цветом.

svofski 5th August 2010 05:53

Картинка говорит о том, что где-то упущен clock, или enable, или есть еще какой-то промах из-за которого вся схема упростилась практически до пустышки.

Надо внимательно читать сообщения, которые Квартус выдает при компиляции и внимательно смотреть все свои сигналы и шины. Бывает.

fifan 5th August 2010 06:27

Комментарии к проекту:
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:

clk <= '0' when clock = '0' else '1';
И все стало выводится. Пока задействовано 50% ячеек и 32832 из 59904 бит памяти (4 кБайта).

---------- Post added at 07:17 ---------- Previous post was at 07:16 ----------

А как сделать деление входной частоты на 3?

---------- Post added at 07:27 ---------- Previous post was at 07:17 ----------

Количество предупреждений доведено до 44!

Ewgeny7 5th August 2010 11:03

Да, ошибка была тут:
clk <= '1' when clock = '0' else '1';
схема просто не тактировалась, отсюда и "оптимизация в ноль".


Quote:

Originally Posted by fifan (Post 304015)
Ewgeny7, на словах объясни каким образом у тебя меняются прошивки мониторов в проекте.

Делаю ROM размером с два монитора. Соответственно, оба монитора там и сидят.
Переключаю банально руля старшим адресом ROM. На клавиатуре у меня задействована кнопка F8 для переключения, в модуле это сигнал cpm_s (нажата - "1"), сигнал идет на обычный триггер, с которого и рулится старший адрес ROM с мониторами.

Quote:

Originally Posted by fifan (Post 304015)
Количество предупреждений доведено до 44!

Хорошо, но лучше меньше :)
У меня в "напиханном" Орионе 25 варнингов.
Избавляйся по мере возможностей от latch (простые "защелки" в проекте заменяй на регистры, тактируемые клоком).

Quote:

Originally Posted by fifan (Post 304015)
А как сделать деление входной частоты на 3?

Проще всего - 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 можешь получать другие частоты :)

ZEK 5th August 2010 11:31

Quote:

Originally Posted by Ewgeny7 (Post 304050)
Сделай простой счетчик на три клока, по заполнению меняй фазу выходного клока.

это на 6


All times are GMT +4. The time now is 06:42.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.