-
wowa
-
-
Не в сети
-
Давно я тут
-
-
Сообщений: 157
-
Спасибо получено: 37
-
-
-
-
|
Извеняюсь что так долго не отвечал. Много работы, купил дом :) Прочитал давно на планшете - но писать на нём я нелюблю..
Вобщем как я вижу - всё правильно. Так и нужно использовать ПЛИС. Ещё совет- нужно смотреть и считать где происходит задержка данных - если в обработчике - попробовать запаралелить обработчик. Под обработчиком я имел ввиду модуль "inst25" и "inst35". Всегда можно поменять разрядность данных с 8 на 32 средствами ПЛИС например, и понизить скорость обработки в 4 раза или усложнить алгоритм. Можно использовать конвеер модулей..
Ещё можно поработать над топ модулем в Verilog. Иногда помогает упростить схему и недопустить ошибок с синхронизацией. А так всё что работает правильно и не глючит - сделано правильно :)
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
wowa
-
-
Не в сети
-
Давно я тут
-
-
Сообщений: 157
-
Спасибо получено: 37
-
-
-
-
|
Ещё помогает выделить в отдельный модуль всю логику от ТОП модуля и почитать о синхронизации входных и выходных данных. Так как вы их защёлкиваетет в тригер тут может работать а с другим МК может и не сработать. Обычно входные синхронизаторы работают на вышей частоте чем остальная логика, иначе могут пропускать данные..
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Alucard
-
Автор темы
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 208
-
Спасибо получено: 20
-
-
-
-
|
Извеняюсь что так долго не отвечал. Много работы, купил дом
Рад за вас. :)
Вобщем как я вижу - всё правильно. Так и нужно использовать ПЛИС. Ещё совет- нужно смотреть и считать где происходит задержка данных - если в обработчике - попробовать запаралелить обработчик. Под обработчиком я имел ввиду модуль "inst25" и "inst35". Всегда можно поменять разрядность данных с 8 на 32 средствами ПЛИС например, и понизить скорость обработки в 4 раза или усложнить алгоритм. Можно использовать конвеер модулей..
Спасибо за советы. Я, кстати, как раз хотел перейти к конвейеру.
Ещё помогает выделить в отдельный модуль всю логику от ТОП модуля и почитать о синхронизации входных и выходных данных. Так как вы их защёлкиваетет в тригер тут может работать а с другим МК может и не сработать. Обычно входные синхронизаторы работают на вышей частоте чем остальная логика, иначе могут пропускать данные..
Это учел. Синхронизаторы работают на частоте в два раза большей, чем все остальное. :)
Хочу еще попробовать передавать данные и адрес на внешнем интерфейсе по одним и тем же линиям. (адрес по фронту, а данные по спаду) Однако еще не проводил испытания.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Alucard
-
Автор темы
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 208
-
Спасибо получено: 20
-
-
-
-
|
Хочу еще попробовать передавать данные и адрес на внешнем интерфейсе по одним и тем же линиям. (адрес по фронту, а данные по спаду) Однако еще не проводил испытания.
А нет, дурак. :) Таких триггеров нет, которые both edge, если только отдельными микросхемами делать.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
wowa
-
-
Не в сети
-
Давно я тут
-
-
Сообщений: 157
-
Спасибо получено: 37
-
-
-
-
|
Для синхронизатора ненадо дуальных тригеров.. Вполне нормально рабоает и связка из двух тригеров.. module synchronizer(
input wire clk,
input wire in,
output reg out
);
reg reg1;
always @(posedge clk)
begin
reg1 <= in;
out <= reg1;
end
endmodule
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от wowa.
|
-
Alucard
-
Автор темы
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 208
-
Спасибо получено: 20
-
-
-
-
|
wowa пишет: Для синхронизатора ненадо дуальных тригеров.. Вполне нормально рабоает и связка из двух тригеров.. module synchronizer(
input wire clk,
input wire in,
output reg out
);
reg reg1;
always @(posedge clk)
begin
reg1 <= in;
out <= reg1;
end
endmodule
Идея понравилась. Работает. Я просимулировал с ARM в более жестких условиях: module sinc (
input wire clk,
input wire [7:0] in,
output reg [7:0] out
);
reg state;
always @(posedge clk)
begin
if (state)
out <= in;
else
out <= 0;
state <= !state;
end
endmoduleДанные считались искаженно, несмотря на то, что частота чтения в 4 раза ниже тактовой. Для объединения шин данных и адреса в одну шину придется городить много дискретной логики вокруг ARM. Жаль.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
wowa
-
-
Не в сети
-
Давно я тут
-
-
Сообщений: 157
-
Спасибо получено: 37
-
-
-
-
|
Непонятно зачем была эта конструкция? Чтобы через раз выдвавать или данные или 0? Или по идее это был 8 битный синхронизер? Тут нет начальной и вообще никакой инициализации.. Ну и должны быть ещё какие входные управляющие данные.. Так это бесмысленный модуль. Рулетка :)
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от wowa.
|
-
Alucard
-
Автор темы
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 208
-
Спасибо получено: 20
-
-
-
-
|
wowa пишет: Непонятно зачем была эта конструкция? Чтобы через раз выдвавать или данные или 0? Или по идее это был 8 битный синхронизер? Тут нет начальной и вообще никакой инициализации.. Ну и должны быть ещё какие входные управляющие данные.. Так это бесмысленный модуль. Рулетка :)
Не совсем. Этим я эмулировал то, что когда передается адрес с МК, то передающая шина занята, и данных для МК пока нет (они появятся на второй такт), правда я его сделал без синхронизации по операциям. Впрочем, эта идея все равно плохая, я не знаю как сделать шину, по которой за нечетные такты передается адрес, а по четным тактам идут данные, причем как туда, так и обратно. Получается довольно большой и сложный адаптер для МК.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от Alucard.
|
-
wowa
-
-
Не в сети
-
Давно я тут
-
-
Сообщений: 157
-
Спасибо получено: 37
-
-
-
-
|
Боюсь что тут без арбитра или сигнала с МК неполучится. Можно следить например за адресом и при попадании в границы - производить запись. Но желательно иметь с МК сигнал Адрес/Данные.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Alucard
-
Автор темы
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 208
-
Спасибо получено: 20
-
-
-
-
|
Название темы "VGA" - совершенно фальшивое. :)
Сделал такой шинный арбитр (обсуждали в ветке про "Отключение ПЛИС от шины"):
* Система с двумя master-ами, разделенными специальным двунаправленным MUX/DEer-ом. Замечательная
вещь
!
* Возможны такие соединения: МК=Внешние_устройства, ПЛИС=Внешние_устройства, МК=ПЛИС.
* Два слота для "внешних_устройств"
* Логика арбитра: ПЛИС имеет приоритет, т.е. может занять шину в любой момент; МК получает сигнал ожидания при попытке записи/чтения.
Логика сейчас совсем примитивна, я планирую подключить арбитр в общую шину и дать возможность назначать приоритеты. Кстати, собрана она на микросхемах стандартной логики.
Весь этот ужас вместе:
Записал короткое видео, где демонстрируется переключение шины.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от Alucard.
|
Время создания страницы: 2.143 секунд