17.12.2015, 16:02
|
#231
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: ПЛИС С чего начать?
|
|
|
|
17.12.2015, 16:10
|
#232
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: ПЛИС С чего начать?
Сообщение от pvu
|
Easyrider83, преобразовать в десятичную систему счисления?
делить на 10 и брать остаток, а частное снова на 10 и т.д. 5 раз
или за 1 такт ПЛИС?
|
Нет, конечно. Можно и счетчиком до каждого разряда считать. Я думал, есть какое-то элегантное решение.
Спасибо, я столько не выкурю
|
|
|
|
17.12.2015, 16:18
|
#233
|
Временная регистрация
Регистрация: 25.08.2006
Сообщений: 76
Сказал спасибо: 3
Сказали Спасибо 12 раз(а) в 4 сообщении(ях)
|
Re: ПЛИС С чего начать?
целая часть от деления на 10
(i*0xCCCD) shr 19
|
|
|
|
17.12.2015, 17:22
|
#234
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ПЛИС С чего начать?
Сообщение от Easyrider83
|
Подскажите, как 16 бит целое положительное число разбить на 5 цифр?
|
А что является исходными данными?
|
|
|
|
17.12.2015, 17:50
|
#235
|
Временная регистрация
Регистрация: 25.08.2006
Сообщений: 76
Сказал спасибо: 3
Сказали Спасибо 12 раз(а) в 4 сообщении(ях)
|
Re: ПЛИС С чего начать?
Сообщение от omercury
|
А что является исходными данными?
|
Зарплата в евро
Звиняйте, не удержался...
|
|
|
|
17.12.2015, 18:13
|
#236
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ПЛИС С чего начать?
|
|
|
|
20.12.2015, 12:44
|
#237
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: ПЛИС С чего начать?
|
|
|
|
20.12.2015, 13:03
|
#238
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ПЛИС С чего начать?
Сообщение от Easyrider83
|
Пока неведомо как, но он работает. Не понятно, как пользоваться стробами nRD и nWR.
|
Дык на картинке постом выше.
Сигналы подаются с внешней для этого модуля схемы. В данном случае использовался STM32F100.
По окончании приёма модулем байта (при W=8 ) выставляется флаг Ready, по нему внешнее устройство читает выход и формирует строб чтения - флаг сбрасывается.
Для записи в модуль байта, надо подать этот байт на входы SPI_D_in и дёрнуть строб nWR, по нему происходит запись в сдвиговой регистр модуля.
По-хорошему, этот модуль тоже не совсем полный - отсутствует контроль (и индикация) переполнения приёмника SPI, нет двойной буферизации данных на передачу с автозагрузкой в сдвиговой регистр в нужное время, но зато он полностью синхронизирован и поэтому может работать стабильно и на высоких (действительно высоких, сотни МГц) скоростях.
Последний раз редактировалось omercury; 20.12.2015 в 13:27.
|
|
|
Сказали "Спасибо" omercury
|
|
|
20.12.2015, 13:59
|
#239
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: ПЛИС С чего начать?
Спасибо, с чтением разобрался. Обновил модуль ШИМ согласно новым требованиям к стробовым импульсам. Теперь данные обновляются только при переходе через ноль.
Код:
|
module PWM #(parameter W = 8)
(
input[W-1:0] VALUE, //вход значения длительности
input wire CLK, //вход тактовых импульсов
output reg PWM_OUT, //выход ШИМ
input wire nUPDATE, //вход готовности данных
output reg nUPDATED = 1 //выход, данные обновлены
);
reg[W-1:0] cnt; //регистр счета
reg[W-1:0] CurrentValue; //текущее значение длительности
reg[W-1:0] NewValue; //обновленное значение длительности
always @ (negedge nUPDATE) //по сигналу готовности сохранить данные во временный регистр
NewValue ‹= VALUE;
always @ (posedge CLK)
begin
if (cnt ‹= CurrentValue) PWM_OUT ‹= 1; //собственно сам ШИМ
else PWM_OUT ‹= 0;
cnt ‹= cnt + 1;
if (cnt == 0 && CurrentValue != NewValue) //если данные обновлены
begin
CurrentValue ‹= NewValue; //обновить данные при переходе через ноль
nUPDATED ‹= 0; //строб на сброс готовности данных
end
else
nUPDATED ‹= 1; //строб закрыть
end
endmodule |
Но что делать с записью пока не понятно. Откуда взять строб?
|
|
|
|
20.12.2015, 14:02
|
#240
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: ПЛИС С чего начать?
Тестбенчи уже научился писать?
Вот так происходит синхронизация внутри модуля
|
|
|
Сказали "Спасибо" omercury
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:21.
|
|