VHDL - JOHNSON & RING COUNTER CODE -
VLSI LAB MANUAL
Here is the code for Johnson & Ring Counter in VHDL. This is the synthesised code in Xilinx ISE.VLSI LAB MANUAL
The working is simple..
reset, clk are the inputs
x is data out
if reset is '1', then all register are loaded all zeros
else for every rising clock edge, the count is advanced.
reset, clk are the inputs
x is data out
if reset is '1', then all register are loaded all zeros
else for every rising clock edge, the count is advanced.
Johnson counter
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --Truth Table
-- Company: elecdude.com
-- Engineer: sa
--
-- Create Date: 16:44:55 03/12/2014
-- Design Name: JohnsonCounter
-- Module Name: john
--
-- Author: ElecDude
-- admin@elecdude.com
--
-- Copyright - 2014 - ElecDude
--
-- DISCLAIMER:
--
-- THIS SOURCE FILE MAY BE USED AND DISTRIBUTED WITHOUT
-- RESTRICTION PROVIDED THAT THIS COPYRIGHT STATEMENT IS NOT
-- REMOVED FROM THE FILE AND THAT ANY DERIVATIVE WORK CONTAINS
-- THE ORIGINAL COPYRIGHT NOTICE AND THE ASSOCIATED DISCLAIMER.
--
-- This is provided without any express or implied warranties,
-- including, but not limited to, the implied warranties of merchantability
-- and fitnessfor a particular purpose. FOR EDUCATIONAL PURPOSE ONLY.
--
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity john isPort ( clk,rst : in STD_LOGIC;x : out STD_LOGIC_VECTOR (3 downto 0));end john;architecture Behavioral of john issignal r_reg,r_next:std_logic_vector(3 downto 0);beginprocess(clk,rst)beginif(rst='1')thenr_reg<=(0=>'1',others=>'0');elsif(clk'event and clk='1')thenr_reg<=r_next;end if;end process;r_next<=(not r_reg(0))&r_reg(3 downto 1);x<=r_reg;end Behavioral;
RST
|
CLK
|
X
|
1
|
x
|
0000
|
0
|
0 -> 1
|
0000
|
0
|
0 -> 1
|
1000
|
0
|
0 -> 1
|
1100
|
0
|
0 -> 1
|
1110
|
0
|
0 -> 1
|
1111
|
0
|
0 -> 1
|
0111
|
0
|
0 -> 1
|
0011
|
0
|
0 -> 1
|
0001
|
0
|
0 -> 1
|
0000
|
Ring counter
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- Company: elecdude.com
-- Module Name: Ring - Behavioral
-- Author: ElecDude
-- admin@elecdude.com
-- Copyright - 2014 - ElecDude
--
-- DISCLAIMER:
-- THIS SOURCE FILE MAY BE USED AND DISTRIBUTED WITHOUT
-- RESTRICTION PROVIDED THAT THIS COPYRIGHT STATEMENT IS NOT
-- REMOVED FROM THE FILE AND THAT ANY DERIVATIVE WORK CONTAINS
-- THE ORIGINAL COPYRIGHT NOTICE AND THE ASSOCIATED DISCLAIMER.
--
-- This is provided without any express or implied warranties,
-- including, but not limited to, the implied warranties of merchantability
-- and fitnessfor a particular purpose. FOR EDUCATIONAL PURPOSE ONLY.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ringc is
Port ( clk,rst : in STD_LOGIC;
x : out STD_LOGIC_VECTOR (3 downto 0));
end ringc;
architecture Behavioral of ringc is
signal r_reg:std_logic_vector(3 downto 0);
begin
process(clk,rst)
begin
if(rst='1')then
r_reg<=(3=>'1',others=>'0');
elsif(clk'event and clk='1')then
r_reg(3)<=r_reg(2);
r_reg(2)<=r_reg(1);
r_reg(1)<=r_reg(0);
r_reg(0)<=r_reg(3);
end if;
end process;
x<=r_reg;
end Behavioral;
-- Company: elecdude.com
-- Module Name: Ring - Behavioral
-- Author: ElecDude
-- admin@elecdude.com
-- Copyright - 2014 - ElecDude
--
-- DISCLAIMER:
-- THIS SOURCE FILE MAY BE USED AND DISTRIBUTED WITHOUT
-- RESTRICTION PROVIDED THAT THIS COPYRIGHT STATEMENT IS NOT
-- REMOVED FROM THE FILE AND THAT ANY DERIVATIVE WORK CONTAINS
-- THE ORIGINAL COPYRIGHT NOTICE AND THE ASSOCIATED DISCLAIMER.
--
-- This is provided without any express or implied warranties,
-- including, but not limited to, the implied warranties of merchantability
-- and fitnessfor a particular purpose. FOR EDUCATIONAL PURPOSE ONLY.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ringc is
Port ( clk,rst : in STD_LOGIC;
x : out STD_LOGIC_VECTOR (3 downto 0));
end ringc;
architecture Behavioral of ringc is
signal r_reg:std_logic_vector(3 downto 0);
begin
process(clk,rst)
begin
if(rst='1')then
r_reg<=(3=>'1',others=>'0');
elsif(clk'event and clk='1')then
r_reg(3)<=r_reg(2);
r_reg(2)<=r_reg(1);
r_reg(1)<=r_reg(0);
r_reg(0)<=r_reg(3);
end if;
end process;
x<=r_reg;
end Behavioral;
rst
|
clk
|
out
|
1
|
x
|
1000
|
0
|
0 -> 1
|
000
|
0
|
0 -> 1
|
0010
|
0
|
0 -> 1
|
0100
|
0
|
0 -> 1
|
1000
|
0
|
0 -> 1
|
0001
|
0
|
0 -> 1
|
0010
|