// Имя модуля : divide_by_3
// Имя файла : divide_by_3.v
// Функц. назначение : Делитель на 3
// Программист : portal-ed.ru
module divide_by_3 (
clk_in , //Входные такты
reset , // Вход сброса
clk_out // Выходные такты
);
//-----------Входные порты---------------
input clk_in;
input reset;
//-----------Выходные порты---------------
output clk_out;
//---------Внутренние переменные--------
reg [1:0] pos_cnt;
reg [1:0] neg_cnt;
//-------------Начало кода-----------------
// Счёт по положительному(нарастающему) фронту
always @ (posedge clk_in)
if (reset) begin
pos_cnt <= 0;
end else begin
pos_cnt <= (pos_cnt == 2) ? 0 : pos_cnt + 1;
end
// Счёт по отрицательному(спадающему) фронту
always @ (negedge clk_in)
if (reset) begin
neg_cnt <= 0;
end else begin
neg_cnt <= (neg_cnt == 2) ? 0 : neg_cnt + 1;
end
assign clk_out = ((pos_cnt != 2) && (neg_cnt != 2));
endmodule