реклама на сайте
подробности

 
 
14 страниц V  « < 12 13 14  
Reply to this topicStart new topic
> "Схемотехнические трюки для ПЛИСоводов", создание аналога "Алгоритмические трюки для программистов"
Александр77
сообщение Dec 30 2017, 11:17
Сообщение #196


Знающий
****

Группа: Свой
Сообщений: 590
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(andrew_b @ Dec 30 2017, 07:54) *
Нет проверки на то, что что в DIRECTION будет нечто, отличное от "UP" и "DOWN". Например, "Up" или "Down". Не всем нравится верхний регистр. Лучше заменить строку на boolean.

В VHDL нет разницы между UP, Up, uP или up. Про Down можно сказать тоже самое.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Dec 30 2017, 11:17
Сообщение #197


В поисках себя...
***

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



Цитата(Александр77 @ Dec 30 2017, 14:17) *
В VHDL нет разницы между UP, Up, uP или up. Про Down можно сказать тоже самое.

Для типа string разница есть !
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 30 2017, 12:39
Сообщение #198


Профессионал
*****

Группа: Свой
Сообщений: 1 855
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Александр77 @ Dec 30 2017, 14:17) *
В VHDL нет разницы между UP, Up, uP или up. Про Down можно сказать тоже самое.
Тащемта там строка, а не перечислимый тип.

Цитата(Flip-fl0p @ Dec 30 2017, 13:31) *
Можете сказать навскидку где вообще такой счетчик мог бы пригодится ?
Дело в принципе. Если вы пишете модуль, претендующий на универсальность, пишите его на самом деле универсальным, с минимальным количеством ограничений.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Dec 30 2017, 12:58
Сообщение #199


В поисках себя...
***

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



Цитата(andrew_b @ Dec 30 2017, 15:39) *
Тащемта там строка, а не перечислимый тип.

Дело в принципе. Если вы пишете модуль, претендующий на универсальность, пишите его на самом деле универсальным, с минимальным количеством ограничений.

Понял. Учтем !
А вообще в VHDL сделать модуль полностью универсальным очень сложно.
Например я как-то хотел сделать модуль полностью настраиваемым. Т.е в области generic настраивать все возможные комбинации входных и выходных портов. Например если нужен сигнал синхронного сброса, сигнал переноса, разрешения работы, и пр то их можно включить просто настройкой параметров модуля. Но столкнулся с проблемой отсутствием возможности генерировать по условию входные\выходные порты. Вернее не так, возможность есть, но она очень кривая и модуль выдает кучу предупреждений. Хотя синтезируется нормально.
Иногда даже жалко что у VHDL нет предпроцессора.
Go to the top of the page
 
+Quote Post
alxkon
сообщение Jan 22 2018, 14:36
Сообщение #200


Частый гость
**

Группа: Участник
Сообщений: 83
Регистрация: 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 меньше от желаемого значения счета.
Go to the top of the page
 
+Quote Post

14 страниц V  « < 12 13 14
Reply to this topicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th February 2018 - 11:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.00866 секунд с 7
ELECTRONIX ©2004-2016