📄 fq_divider.v
字号:
`define logb2(n) ((n) <= (1<<0) ? 0 : (n) <= (1<<1) ? 1 :\
(n) <= (1<<2) ? 2 : (n) <= (1<<3) ? 3 :\
(n) <= (1<<4) ? 4 : (n) <= (1<<5) ? 5 :\
(n) <= (1<<6) ? 6 : (n) <= (1<<7) ? 7 :\
(n) <= (1<<8) ? 8 : (n) <= (1<<9) ? 9 :\
(n) <= (1<<10) ? 10 : (n) <= (1<<11) ? 11 :\
(n) <= (1<<12) ? 12 : (n) <= (1<<13) ? 13 :\
(n) <= (1<<14) ? 14 : (n) <= (1<<15) ? 15 :\
(n) <= (1<<16) ? 16 : (n) <= (1<<17) ? 17 :\
(n) <= (1<<18) ? 18 : (n) <= (1<<19) ? 19 :\
(n) <= (1<<20) ? 20 : (n) <= (1<<21) ? 21 :\
(n) <= (1<<22) ? 22 : (n) <= (1<<23) ? 23 :\
(n) <= (1<<24) ? 24 : (n) <= (1<<25) ? 25 :\
(n) <= (1<<26) ? 26 : (n) <= (1<<27) ? 27 :\
(n) <= (1<<28) ? 28 : (n) <= (1<<29) ? 29 :\
(n) <= (1<<30) ? 30 : (n) <= (1<<31) ? 31 : 32)
module fq_divider
(
clk,
clrn,
ena,
q
);
input clk;
input clrn;
input ena;
output q;
parameter COUNTER = 55;
// `include "log2.h"
/* function integer log2;
input integer num;
integer i;
log2 = 0;
begin
for (i = 0; num < 1; i = i + 1)
begin
log2 = log2 + 1;
num = num / 2;
end
end
endfunction */
parameter width = `logb2(COUNTER);
reg [width-1:0] cnt;
reg q;
always @(posedge clk or negedge clrn)
begin
if (clrn == 1'b0)
cnt <= 'b0;
else if (ena)
begin
if (cnt < COUNTER / 2 - 1)
begin
q <= 1'b0;
cnt <= cnt + 1;
end
else if (cnt < COUNTER-1)
begin
q <= 1'b1;
cnt <= cnt + 1;
end
else
begin
q<= 1'b0;
cnt <= 'b0;
end
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -