|
|
Counters use sequential logic to count clock pulses. Some counters can count forward and backward, and can be loaded with data and cleared to zero. Counters can be defined with D flipflops (DFF, DFFE, and DFFEA ) and If Then Statements or with the lpm_counter function.
The ahdlcnt.tdf file shown below implements a 16-bit loadable up counter that can be cleared to zero.
SUBDESIGN ahdlcnt
(
clk, load, ena, clr, d[15..0] : INPUT;
q[15..0] : OUTPUT;
)
VARIABLE
count[15..0] : DFF;
BEGIN
count[].clk = clk;
count[].clrn = !clr;
IF load THEN
count[].d = d[];
ELSIF ena THEN
count[].d = count[].q + 1;
ELSE
count[].d = count[].q;
END IF;
q[] = count[];
END;
In this file, 16 D flipflops are declared in the Variable Section and assigned the names count0 through count15. The If Then Statement determines the value that is loaded into the flipflops on the rising clock edge (such as, if load is driven by VCC, the flipflops are assigned the value of d[]).
The lpm_cnt.tdf file shown below uses the lpm_counter function to implement the same functionality as ahdlcnt.tdf:
INCLUDE "lpm_counter.inc"; SUBDESIGN lpm_cnt ( clk, load, ena, clr, d[15..0] : INPUT; q[15..0] : OUTPUT; ) VARIABLE my_cntr: lpm_counter WITH (LPM_WIDTH=16); BEGIN my_cntr.clock = clk; my_cntr.aload = load; my_cntr.cnt_en = ena; my_cntr.aclr = clr; my_cntr.data[] = d[]; q[] = my_cntr.q[]; END;
|
- PLDWorld - |
|
|
| Created by chm2web html help conversion utility. |