- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Dear All,
I've read in multiple posts etc that I'm not allowed to use ripple clocks etc but would anyone be so kind as to give me the actual Verliog code (without using a PLL) for how to produce a 1KHz clock from a 50MHz clock. Everything I've read says use "clock enables" but I'm such a newbie that I have no idea what that means and all the references give me lots of pretty diagrams but no code... please put me out of my ignorant misery. Thanks, LomaxСсылка скопирована
5 Ответы
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Divide 50 MHz by 50000 and get a signal that's '1' for one clock period and '0' for 49999. Use it as clock enable in a synchronous process, that's clocked by the 50 MHz as well.
Clock enable means e.g.always @(posedge clk50)
begin
if (cnt_1kHz)
begin
cnt_1kHz--;
ce_1kHz <= 1'b0;
end
else
begin
cnt_1kHz <= 16'd49999;
ce_1kHz <= 1'b1;
end;
if (ce_1kHz)
begin
// This code executes at 1 kHz speed
end
end
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Perfect, no more warnings and I appear to be able to "export" the result for want of a better phrase :
reg [15:0] paddleCount = 16'd0; reg PADDLE_CLOCK; always @(posedge CLOCK_50) begin if (paddleCount) begin paddleCount <= paddleCount - 16'd1; PADDLE_CLOCK <= 1'b0; end else begin paddleCount <= 16'd49999; PADDLE_CLOCK <= 1'b1; end end always @(posedge PADDLE_CLOCK) begin etc I'm still not sure why the original didn't work - was it the "wire" as opposed to the "reg"? wire PADDLE_CLOCK; assign PADDLE_CLOCK = (paddleCount == (16'd50000)); always @(posedge CLOCK_50) begin if (PADDLE_CLOCK) paddleCount <= 16'd0; else paddleCount <= paddleCount + 16'd1; end Many thanks for your help Lomax- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Your clock divider as such should work as well, although it divides by 50001.
The problem is in using PADDLE_CLOCK in an edge sensitive expression. It's a formed by combinational logic and has glitches. Making PADDLE_CLOCK a register and assigning it inside the posedge block would avoid this problem. But it's still a ripple clock, delayed in relation to CLOCK_50. The problem arises with signals, that are used in both clock domains CLOCK_50 and PADDLE_CLOCK. Using PADDLE_CLOCK as a clock enable instead keeps one clock domain for the design.- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
Just curious - does it increase the power when using enables this way instead of a 1KHz clock because now we have to route both the enable and the clock through out the device? And if it is a large device then 50MHz is still a lot of unnecessary toggles.
- Отметить как новое
- Закладка
- Подписаться
- Отключить
- Подписка на RSS-канал
- Выделить
- Печать
- Сообщить о недопустимом содержимом
--- Quote Start --- does it increase the power when using enables this way instead of a 1KHz clock --- Quote End --- Basically, yes. With a reasonable system clock (e.g. 50 MHz), it isn't a problem with usual designs. Furthermore, operating consderable parts of a design with 1 kHz clock frequency is rather a lab exercises problem than a typical situation of real world FPGA design. Generally, you're free to use ripple clocks if they are helpful to save power. But in most designs, these slow clock domain partitions have to cooperate with other design parts. Timing closure of domain crossing signals will become much more difficult with ripple clocks. That's why their usage is discouraged.

Ответить
Параметры темы
- Подписка на RSS-канал
- Отметить тему как новую
- Отметить тему как прочитанную
- Выполнить отслеживание данной Тема для текущего пользователя
- Закладка
- Подписаться
- Страница в формате печати