|
Nios II + VGA проблема |
|
|
|
Jun 4 2009, 08:21
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 3-06-09
Пользователь №: 49 896

|
Добрый день! У меня такая проблемка: Я составил самый простой процессор на Ниосе....  Попробивал запустить и откомпилировать. Всё работает! дальше... Написал VGA модуль на VHDL: CODE LIBRARY ieee; USE ieee.std_logic_1164.ALL;
ENTITY vga_sync_gv IS PORT ( clk : IN STD_LOGIC; v_sync : out STD_LOGIC; h_sync : OUT STD_LOGIC; h_out, v_out : INOUT INTEGER RANGE 0 TO 1023; VGA_Blank, VGA_sync : INOUT STD_LOGIC; blue, red, green : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END vga_sync_gv;
ARCHITECTURE a OF vga_sync_gv IS SIGNAL h, v: INTEGER RANGE 0 TO 1023; BEGIN
PROCESS VARIABLE video_on_h, video_on_v: STD_LOGIC; BEGIN WAIT UNTIL RISING_EDGE(clk);
IF h < 800 THEN --skaita 800 horizontâlos pixeïus (ieskaitot palîgpixeïus)! h <= h + 1; ELSE h <= 0; END IF;
IF ( h <= 755 ) AND (h >= 659 ) THEN h_sync <= '0'; ELSE h_sync <= '1'; END IF;
IF ( v >= 524 ) AND ( h >= 699 ) THEN v <= 0; ELSIF ( h = 699 ) THEN v <= v + 1; END IF;
------------------------------------------ IF ( v <= 494 ) AND ( v >= 493 ) THEN v_sync <= '0'; ELSE v_sync <= '1'; END IF; IF ( h <= 639 ) THEN video_on_h := '1'; h_out <= h; ELSE video_on_h := '0'; END IF; IF ( v <= 479 ) THEN video_on_v := '1'; v_out <= v;
ELSE video_on_v := '0'; END IF; VGA_Blank<= (video_on_h AND video_on_v);
END PROCESS;
PROCESS (VGA_Blank, v_out, h_out) BEGIN blue<= "0000000000"; red<= "0000000000"; green<= "0000000000"; IF (h_out > 100) AND (h_out<400) AND (v_out > 100) AND (v_out<300) THEN green<= "0011100000"; blue<= "1001100000"; red<= "1111100000"; END IF; END PROCESS; END a; Прикрепил его к Ниосу:  Получилось:   При компиляции выдаёт ошибку.....  Скажите пожалуйста что я делаю не так?
Сообщение отредактировал Omen_13 - Jun 8 2009, 15:16
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 20)
|
Jun 4 2009, 10:38
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 3-06-09
Пользователь №: 49 896

|
Цитата(Kuzmi4 @ Jun 4 2009, 13:04)  2 Artur Nikolajev - если в 2-х словах - в компонент эдиторе неправильно сигналы выставили  A mozno popodrobnej?
|
|
|
|
|
Jun 5 2009, 04:42
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 3-06-09
Пользователь №: 49 896

|
Цитата(vadimuzzz @ Jun 5 2009, 03:02)  первый видимо вызван тем, что на vga подается клок 27МГц, а проц работает на 100. надо бы переделать: регистры vga должны писаться/читаться по клоку процессора. когда переходите от одного клока к другому, принято ставить FIFO. а почему не используете это : http://www.altera.com/literature/hb/nios2/qts_qii55006.pdf ? второй говорит, что у вас шина 10 бит, а у авалона 32. либо ставьте byteenable, либо сделайте 32 бита, а старшие можно игнорить внутри модуля. А как правельно усановить byteenable?
|
|
|
|
|
Jun 7 2009, 14:53
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 3-06-09
Пользователь №: 49 896

|
Цитата(vadimuzzz @ Jun 5 2009, 02:02)  первый видимо вызван тем, что на vga подается клок 27МГц, а проц работает на 100. надо бы переделать: регистры vga должны писаться/читаться по клоку процессора. когда переходите от одного клока к другому, принято ставить FIFO. а почему не используете это : http://www.altera.com/literature/hb/nios2/qts_qii55006.pdf ? второй говорит, что у вас шина 10 бит, а у авалона 32. либо ставьте byteenable, либо сделайте 32 бита, а старшие можно игнорить внутри модуля. Извините, может за глупий вопрос. А если устанавливать 32 бита, то это в каких сигналах нужно делать?
|
|
|
|
|
Jun 7 2009, 16:54
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 3-06-09
Пользователь №: 49 896

|
Цитата(vadimuzzz @ Jun 7 2009, 19:33)  шина данных Шина данных Это там где avalon_slave интерфейс?
|
|
|
|
|
Jun 9 2009, 07:59
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 3-06-09
Пользователь №: 49 896

|
Цитата(vadimuzzz @ Jun 8 2009, 14:24)  да, туда проц пишет/читает, а у него мастер 32 бита. Уменя с avalon_slave связано: input address; input cs; input write; input [7:0] fifo_data; output fifo_not_full; output lastpixel; Как это правельно записать? Так: input [31:0] address; input [31:0] cs; input [31:0] write; input [31:0] fifo_data; output [31:0] fifo_not_full; output [31:0] lastpixel;
|
|
|
|
|
Jun 9 2009, 13:54
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(Artur Nikolajev @ Jun 9 2009, 14:59)  Уменя с avalon_slave связано: input address; input cs; input write; input [7:0] fifo_data; output fifo_not_full; output lastpixel; Как это правельно записать? Так: input [31:0] address; input [31:0] cs; input [31:0] write; input [31:0] fifo_data; output [31:0] fifo_not_full; output [31:0] lastpixel; точно не так  какой хотите интерфейс? Avalon Memory Mapped? я выше пример приводил http://www.altera.com/support/examples/nio...celeration.htmlдля MM надо адрес(сколько бит внутреннее адр. пространство модуля) данные(запись, чтение) - для простоты 32 бита clk,rst,cs,wr,rd по 1 бит внешние сигналы - как вам надо. всем сигналам сделать префиксы для авт. распознавания. p.s. может задачку поконкретнее сформулируете?
|
|
|
|
|
Aug 7 2009, 12:08
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Цитата(Копейкин @ Aug 7 2009, 11:39)  Уважаемые всезнающие господа, помогите советом пожалуйста. У меня в системе 2 модуля FIFO. В один из них аппаратно, из потока, пишутся данные очень редко. Из другого аппаратно извлекаются данные и встраиваются в поток. Тоже не быстро. Оба модуля 8 битные, глубиной 16 байт. Подскажите, как их (модули) правильно подключить на Авалон ММ чтобы NIOSII мог из одного модуля читать, а в другой записывать побайтно. Модули созданы МегаВизардом на основе dcfifo и уже вставлены в систему. Клоки чтения и записи разные. Ширина шины входа/выхода - 8/8бит. На стороне ФИФО, подключаемой к NIOS надо подавать тот же клок, что подается на модуль процессора? 1. Периферийный модуль может тактироваться любым клоком, просто Quartus автоматом вставит логику перехода между доменами, довольно медленную. Если нужно более высокое быстродействие обмена между доменами, смотрите Avalon-MM Clock Crossing Bridge. 2. В Вашем случае стоит посмотреть в сторону Avalon-ST и компонент типа Avalon-ST Dual Clock FIFO. Avalon-ST, условно говоря, не шинный интерфейс Avalon-MM, а интерфейс типа точка-точка, заточенный под потоковые передачи. 3. Если лень разбираться с Avalon-ST, то можно посмотреть примеры и сделать периферийный модуль на Avalon и в нем обратиться к FIFO. Там внутри и с разрядностью разберетесь как надо.
|
|
|
|
|
Aug 7 2009, 13:32
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134

|
Я разобрался с чтением из FIFO, подключенным к Авалон ММ: В редакторе нового компонента создал компонент с сигналами: clk readdata[7..0] read address[1..0] - вывел, но не использовал. Файлы описания не подключал и SOPC билдер вывел эти сигналы наружу из процессора. Еще указал в свойствах интерфейса: Все времена задержек = 0 и в Deprecated параметрах указал тип адресации NATIVE а не DYNAMIC. Если этого не сделать то при 8-битной шине будут проводится 4 чтения подряд.!!! Сам интерфейс чтения у FIFO должен быть: Show-ahead sinchronouse FIFO mode. Тактовая частота та же, что и для процессора. Таким образом заработало. Теперь добиваю запись в FIFO... ------------------------- Подскажите еще: Если тип адресации DYNAMIC, то как при 8-битной шине данных избежать 4-х кратного чтения. Для записи вроде сигнал byteenable[] должен помочь. Или выводить шину address[1..0] и строить дешифратор для доступа к младшему байту. Или я вообще ни разу не прав????? Всем откликнувшимся громадное спасибо!!! Цитата(Sergey'F @ Aug 7 2009, 16:08)  1. Периферийный модуль может тактироваться любым клоком... 2. В Вашем случае стоит посмотреть в сторону Avalon-ST и компонент типа Avalon-ST Dual Clock FIFO. 3. Если лень разбираться с Avalon-ST, то можно посмотреть примеры и сделать периферийный модуль на Avalon и в нем обратиться к FIFO. Там внутри и с разрядностью разберетесь как надо. 1. Этого не требуется 2. К сожалению переход между Avalon-ST и Avalon-MM остался выше моего понимания. Я так понял, нужно ставить Scatter-Gather DMA и все равно делать свой компонент для вывода сигналов Avalon-ST наружу из процессора. Это мне кажется слишком сложно для обработки изредка приходящих команд управления. 3. Avalon-ST Dual Clock FIFO все равно никак не подключается к шине Avalon MM. А мне надо, чтобы NIOSII получал эти байты команд... Спасибо за советы Цитата(torik @ Aug 7 2009, 15:52)  Для записи надо напрямую подключить данные шины авалон на вход FIFO, а в качестве сигнала записи - datavalid. В шину выдать сигнал готовности при необходимости (переполнение фифо). Для чтения по аналогии. А как быть с таймингами? Для dcfifo запись/чтение производится по положительным перепадам clk. rdreq/wrreq являются только сигналами разрешения. Пока они активны с каждым перепадом будет запись/чтение. А для чтения FIFO отдельная заморочка с выдачей данных...
|
|
|
|
|
Aug 7 2009, 14:14
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Цитата(Копейкин @ Aug 7 2009, 17:32)  3. Avalon-ST Dual Clock FIFO все равно никак не подключается к шине Avalon MM. Я не про компонент ST FIFO, я про обычный пользовательский модуль со slave портом на avalon-mm. И в нем внутри осуществляется обращение к Вашему FIFO, которое Вы уже создали. Можно как пример вставить в проект модуль PIO и посмотреть после генерации его исходники. Там понятно, как разбираться с адресом, чипселектом и т.д.. Но Вы уже все равно сделали, так что это ни к чему. dynamic alignment: Если master пишет в slave большей разрядности, шина выставляет byteenable на нужные байты (естественно, slave их должен корректно обработать). Если master читает из slave большей разрядности, читается слово целиком и выбираются данные из нужных байт. Если master пишет в slave меньшей разрядности, шина формирует n записей по последовательным адресам (и пока не закончит, master ждет). Если master читает из slave меньшей разрядности, шина формирует n чтений по последовательным адресам (и пока не закончит, master ждет). Ели такое поведение не нужно - проще всего не использовать deprecated параметры, тем более про включение native alignment в документации написано очень размыто, а, например, объявить 32-х разрядный порт, а в устройстве использовать только младшие 8 бит (читать младшие 8 при записи от шины и выставлять младшие 8, а остальные нули при чтении от шины).
Сообщение отредактировал Sergey'F - Aug 7 2009, 14:33
|
|
|
|
|
Aug 10 2009, 05:07
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Цитата А как быть с таймингами? Для dcfifo запись/чтение производится по положительным перепадам clk. Ну и что, у вас разве что-то работает по отрицательным перепадам? Цитата rdreq/wrreq являются только сигналами разрешения. Пока они активны с каждым перепадом будет запись/чтение. А для чтения FIFO отдельная заморочка с выдачей данных... Конечно, необходимо добавить немного логики, которая контролирует заполненность FIFO.
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|