[an error occurred while processing this directive]
Делитель с целым переменным коэфф. деления на Verilog-е (тут кто-то спрашивал)
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))
миниатюрный аудио-видеорекордер mAVR

Отправлено Dimonira 11 июля 2002 г. 20:19

/////////////////////////////////////////////////////////////////////////////////
// Module: clk_divider_res
/////////////////////////////////////////////////////////////////////////////////
// Description: clock divider with asynchronous reset
// Parameters: DIVIDER_WIDTH
// Inputs:
// RESET - asynchronous reset
// CLK - clock
// DIVIDER[DIVIDER_WIDTH-1:0] - divider value (0-1, 1-1/2, 2-1/3, 3-1/4, etc.)
// Outputs:
// CLK_OUT - clock out
/////////////////////////////////////////////////////////////////////////////////

`timescale 1ns / 100ps

module clk_divider_res(RESET, CLK, DIVIDER, CLK_OUT);

parameter DIVIDER_WIDTH = 4;

input RESET;
input CLK;
input [DIVIDER_WIDTH-1:0] DIVIDER;
output CLK_OUT;

reg [DIVIDER_WIDTH-1:0] cnt;
wire yes_div, cnt_out;

// for simulator only: //////////////////////////////////////////////////////////
initial begin
cnt = {DIVIDER_WIDTH{1'b0}};
end
/////////////////////////////////////////////////////////////////////////////////

assign cnt_out = (cnt == DIVIDER)?1'b1:1'b0;
assign yes_div = |DIVIDER;
assign CLK_OUT = (yes_div)?cnt_out:CLK;

always @(posedge CLK or posedge RESET) // asynchronous reset
begin
if(RESET)
cnt <= {DIVIDER_WIDTH{1'b0}};
else begin
if(cnt == DIVIDER)
cnt <= {DIVIDER_WIDTH{1'b0}};
else
cnt <= cnt + 1;
end
end

endmodule

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru