Counters: Log File
Counters: Log File
Counters
Asynchronous Set/Clear
Synchronous Set/Clear
Asynchronous/Synchronous Load (signal and/or constant)
Clock Enable
Modes (Up, Down, Up/Down)
Mixture of all mentioned above possibilities
HDL coding styles for the following control signals are equivalent to the ones described in the
"Registers" section of this chapter:
Clock
Asynchronous Set/Clear
Synchronous Set/Clear
Clock Enable
Log File
The XST log file reports the type and size of recognized counters during the macro recognition
step:
...
Summary:
inferred 1 Counter(s).
==============================
Macro Statistics
# Counters : 1
...
The following table shows pin definitions for a 4-bit unsigned up counter with asynchronous
clear.
IO Pins Description
C Positive-Edge Clock
CLR Asynchronous Clear (active High)
Q[3:0] Data Output
VHDL Code
Following is VHDL code for a 4-bit unsigned up counter with asynchronous clear.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(C, CLR : in std_logic;
Q : out std_logic_vector(3 downto 0));
end counter;
architecture archi of counter is
signal tmp: std_logic_vector(3 downto 0);
begin
process (C, CLR)
begin
if (CLR='1') then
tmp <= "0000";
elsif (C'event and C='1') then
tmp <= tmp + 1;
end if;
end process;
Q <= tmp;
end archi;
Verilog Code
Following is the Verilog code for a 4-bit unsigned up counter with asynchronous clear.
module counter (C, CLR, Q);
input C, CLR;
output [3:0] Q;
reg [3:0] tmp;
C Positive-Edge Clock
S Synchronous Set (active High)
Q[3:0] Data Output
VHDL Code
Following is the VHDL code for a 4-bit unsigned down counter with synchronous set.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(C, S : in std_logic;
Q : out std_logic_vector(3 downto 0));
end counter;
architecture archi of counter is
signal tmp: std_logic_vector(3 downto 0);
begin
process (C)
begin
if (C'event and C='1') then
if (S='1') then
tmp <= "1111";
else
tmp <= tmp - 1;
end if;
end if;
end process;
Q <= tmp;
end archi;
Verilog Code
Following is the Verilog code for a 4-bit unsigned down counter with synchronous set.
always @(posedge C)
begin
if (S)
tmp = 4'b1111;
else
tmp = tmp - 1'b1;
end
assign Q = tmp;
endmodule
The following table shows pin definitions for a 4-bit unsigned up counter with asynchronous
load from primary input.
IO Pins Description
C Positive-Edge Clock
ALOAD Asynchronous Load (active High)
VHDL Code
Following is the VHDL code for a 4-bit unsigned up counter with asynchronous load from
primary input.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(C, ALOAD : in std_logic;
D : in std_logic_vector(3 downto 0);
Q : out std_logic_vector(3 downto 0));
end counter;
architecture archi of counter is
signal tmp: std_logic_vector(3 downto 0);
begin
process (C, ALOAD, D)
begin
if (ALOAD='1') then
tmp <= D;
elsif (C'event and C='1') then
tmp <= tmp + 1;
end if;
end process;
Q <= tmp;
end archi;
Verilog Code
Following is the Verilog code for a 4-bit unsigned up counter with asynchronous load from
primary input.
C Positive-Edge Clock
SLOAD Synchronous Load (active High)
VHDL Code
Following is the VHDL code for a 4-bit unsigned up counter with synchronous load with a
constant.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(C, SLOAD : in std_logic;
Q : out std_logic_vector(3 downto 0));
end counter;
architecture archi of counter is
signal tmp: std_logic_vector(3 downto 0);
begin
process (C)
begin
if (C'event and C='1') then
if (SLOAD='1') then
tmp <= "1010";
else
tmp <= tmp + 1;
end if;
end if;
end process;
Q <= tmp;
end archi;
Verilog Code
Following is the Verilog code for a 4-bit unsigned up counter with synchronous load with a
constant.
always @(posedge C)
begin
if (SLOAD)
tmp = 4'b1010;
else
tmp = tmp + 1'b1;
end
assign Q = tmp;
endmodule
The following table shows pin definitions for a 4-bit unsigned up counter with asynchronous
clear and clock enable.
IO Pins Description
C Positive-Edge Clock
CLR Asynchronous Clear (active High)
CE Clock Enable
VHDL Code
Following is the VHDL code for a 4-bit unsigned up counter with asynchronous clear and clock
enable.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(C, CLR, CE : in std_logic;
Q : out std_logic_vector(3 downto 0));
end counter;
architecture archi of counter is
signal tmp: std_logic_vector(3 downto 0);
begin
process (C, CLR)
begin
if (CLR='1') then
tmp <= "0000";
elsif (C'event and C='1') then
if (CE='1') then
tmp <= tmp + 1;
end if;
end if;
end process;
Q <= tmp;
end archi;
Verilog Code
Following is the Verilog code for a 4-bit unsigned up counter with asynchronous clear and clock
enable.
module counter (C, CLR, CE, Q);
input C, CLR, CE;
output [3:0] Q;
reg [3:0] tmp;
C Positive-Edge Clock
CLR Asynchronous Clear (active High)
UP_DOWN up/down count mode selector
VHDL Code
Following is the VHDL code for a 4-bit unsigned up/down counter with asynchronous clear.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(C, CLR, UP_DOWN : in std_logic;
Q : out std_logic_vector(3 downto 0));
end counter;
architecture archi of counter is
signal tmp: std_logic_vector(3 downto 0);
begin
process (C, CLR)
begin
if (CLR='1') then
tmp <= "0000";
elsif (C'event and C='1') then
if (UP_DOWN='1') then
tmp <= tmp + 1;
else
tmp <= tmp - 1;
end if;
end if;
end process;
Q <= tmp;
end archi;
Verilog Code
Following is the Verilog code for a 4-bit unsigned up/down counter with asynchronous clear.
module counter (C, CLR, UP_DOWN, Q);
input C, CLR, UP_DOWN;
output [3:0] Q;
reg [3:0] tmp;
The following table shows pin definitions for a 4-bit signed up counter with asynchronous reset.
IO Pins Description
C Positive-Edge Clock
CLR Asynchronous Clear (active High)
Q[3:0] Data Output
VHDL Code
Following is the VHDL code for a 4-bit signed up counter with asynchronous reset.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_signed.all;
entity counter is
port(C, CLR : in std_logic;
Q : out std_logic_vector(3 downto 0));
end counter;
architecture archi of counter is
signal tmp: std_logic_vector(3 downto 0);
begin
process (C, CLR)
begin
if (CLR='1') then
tmp <= "0000";
elsif (C'event and C='1') then
tmp <= tmp + 1;
end if;
end process;
Q <= tmp;
end archi;
Verilog Code
There is no equivalent Verilog code, as Verilog does not support signed values.