[an error occurred while processing this directive]
|
Такой подход неприемлем при работе с программируемой логикой.
Потому что все пакеты заточены прежде всего под одноклоковую глобальную синхронизацию. Если вдруг появиться многоклоковая, нужно разбираться с установками пакета. Иначе пролетите с временами установки и удержания данных относительно клоков.
А это значит, что качественный макрос должен начинаться и кончаться триггером.
Все установки и загрузки только синхронные.
В противном случае Вы не сможете его переносить от проекта в проект.
Посмотрите на макрос 7497. Клок приходит на логику. Значит глобальной синхронизации не будет. Выходы нестробируемая логика. Значит может быть вся в пичках на каком либо этапе изменения проекта.
Более того, макросы повторяющие влоб интегральные микросхемы, избыточны. Это правильно для микросхем средней степени интеграции. Для минимизации ассортимента закупки. И неприемлемо для пакета. Синтезатор лишнее все равно выбросит. Более того все это слеплено на базовых библиотечных примитивах. Ради чего ковыряться на гейтовом уровне..
А ведь пакет может опираться не только на базовые примитивы, но и на базовые мегафункции. ВСЕ можно описать с этим минимальным набором.
А это уже поведенческое описание. Значит это легко ложиться на языки описания. Ваша задача так описать свой проект, чтобы он лег на базовые примитивы или мегафункции.
Что касается Вашей задачи. Если я правильно понял, Вам нужен вобулирующий период повторения. Вот пример.
module ct_vobul
(
input global_clk,
input s_set,
input [3:0] data,
output reg cs
);
reg [3:0] ct;
always @(posedge global_clk)
begin
if (s_set)
ct <= data;
else if (ct == 4'd1)
ct <= data;
else
ct <= ct - 1'b1;
end
always @(posedge global_clk)
begin
cs <= (ct == 4'd1);
end
endmodule
E-mail: info@telesys.ru