|
|
  |
"Схемотехнические трюки для ПЛИСоводов", создание аналога "Алгоритмические трюки для программистов" |
|
|
|
Dec 30 2017, 12:39
|
Профессионал
    
Группа: Свой
Сообщений: 1 883
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Александр77 @ Dec 30 2017, 14:17)  В VHDL нет разницы между UP, Up, uP или up. Про Down можно сказать тоже самое. Тащемта там строка, а не перечислимый тип. Цитата(Flip-fl0p @ Dec 30 2017, 13:31)  Можете сказать навскидку где вообще такой счетчик мог бы пригодится ? Дело в принципе. Если вы пишете модуль, претендующий на универсальность, пишите его на самом деле универсальным, с минимальным количеством ограничений.
|
|
|
|
|
Dec 30 2017, 12:58
|

В поисках себя...
   
Группа: Свой
Сообщений: 534
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(andrew_b @ Dec 30 2017, 15:39)  Тащемта там строка, а не перечислимый тип.
Дело в принципе. Если вы пишете модуль, претендующий на универсальность, пишите его на самом деле универсальным, с минимальным количеством ограничений. Понял. Учтем ! А вообще в VHDL сделать модуль полностью универсальным очень сложно. Например я как-то хотел сделать модуль полностью настраиваемым. Т.е в области generic настраивать все возможные комбинации входных и выходных портов. Например если нужен сигнал синхронного сброса, сигнал переноса, разрешения работы, и пр то их можно включить просто настройкой параметров модуля. Но столкнулся с проблемой отсутствием возможности генерировать по условию входные\выходные порты. Вернее не так, возможность есть, но она очень кривая и модуль выдает кучу предупреждений. Хотя синтезируется нормально. Иногда даже жалко что у VHDL нет предпроцессора.
|
|
|
|
|
Jan 22 2018, 14:36
|
Частый гость
 
Группа: Участник
Сообщений: 87
Регистрация: 16-11-10
Пользователь №: 60 920

|
Цитата(ViKo @ Nov 13 2017, 14:27)  Вот. Последние варианты (4 и 5, одинаковые). Остальные показывают процесс разработки. :-) CODE `define LENTH 28 `define VAR5
`ifdef VAR1 `define TIM1 `elsif VAR2 `define TIM1 `elsif VAR3 `define TIM1 `else `define TIM2 `endif
module Timer_m `ifdef TIM1 ( (* chip_pin = "91", altera_attribute = "-name global_signal on; -name io_standard lvds" *) input bit clk, // high-speed clock input bit [`LENTH-1:0] rld, // reload data output bit pls // timer overload pulse ); `endif
`ifdef VAR1 bit [`LENTH:0] cnt; always_ff @(posedge clk) begin if (cnt[`LENTH]) cnt <= {1'b0, rld}; else cnt <= cnt - 1; end assign pls = cnt[`LENTH];
`elsif VAR2 bit [`LENTH-1:0] cnt; always_ff @(posedge clk) begin if (cnt[`LENTH-1]) cnt <= rld; else cnt <= cnt - 1; end assign pls = cnt[`LENTH-1]; `elsif VAR3 bit [`LENTH-1:0] cnt; always_ff @(posedge clk) begin if (cnt[`LENTH-1]) cnt <= rld; else cnt <= cnt[`LENTH-2:0] - 1; end assign pls = cnt[`LENTH-1]; `endif
`ifdef TIM2 ( (* chip_pin = "91", altera_attribute = "-name global_signal on; -name io_standard lvds" *) input bit clk, // high-speed clock input bit [`LENTH-1:0] rld, // reload data input bit ldp, // load pulse output bit pls // timer overload pulse ); `endif
`ifdef VAR4 bit [`LENTH:0] cnt; always_ff @(posedge clk) begin if (cnt[`LENTH]) cnt <= {ldp, rld}; else cnt <= cnt[`LENTH-1:0] - 1; end assign pls = cnt[`LENTH]; `endif
`ifdef VAR5 bit [`LENTH-1:0] cnt; always_ff @(posedge clk) begin if (pls) {pls, cnt} <= {ldp, rld}; else {pls, cnt} <= cnt - 1; end `endif
endmodule : Timer_m
Извините, забыл совсем ответить. Если я не ошибаюсь в Вашем варианте загружаемое значение lpd должно быть на 1 меньше от желаемого значения счета.
|
|
|
|
|
Apr 16 2018, 08:40
|

Знающий
   
Группа: Свой
Сообщений: 801
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847

|
Простенький ФНЧ Uout = Uout-1 + (Utek - Uout-1)>> K Выручал неоднократно... Делюсь Все-таки добавлю к нему TestBanch...
Прикрепленные файлы
IQ_filtr.vhd ( 1.93 килобайт )
Кол-во скачиваний: 18
IQ_tb.vhd ( 2.49 килобайт )
Кол-во скачиваний: 5
RND.vhd ( 9.17 килобайт )
Кол-во скачиваний: 10
|
|
|
|
|
Сегодня, 13:25
|
Группа: Новичок
Сообщений: 1
Регистрация: 29-03-18
Пользователь №: 102 753

|
Ребят... Тут скорее не трюк нужен, а какое-то схемное решение / конфигурация ПЛИС. Проблема следующая: при подаче питания на FPGA (Cyclone 4 E) на выводах I/O банков появляется единица (подтяжка к Vcc) на время инициализации (загрузки прошивки из EPCS16). Длится это безобразие ~100-200 us, что ни в какие ворота... Банки питаются от 3.3В. Где-то читал, что выводы якобы должны быть в третьем состоянии и что порядок установки напряжений не важен для современных ПЛИС Altera или Intel, как Вам угодно)). Вторая проблема, пока менее важная, это выбросы на I/O выходах во время сброса питания. Кто сталкивался с подобным? Куда тут копнуть? Напряжение ядра надо подать раньше, чем напряжение банок? P.S. ПЛИС находится на отладочной плате, схема питания (и всего остального) прилагается в PDF
Development_board_schematic_diagram_V2.1.pdf ( 1.11 мегабайт )
Кол-во скачиваний: 2
Сообщение отредактировал Nerevarine - Сегодня, 13:28
|
|
|
|
|
  |
7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0
|
|
|