Skip to main content

Gray code counter in VHDL

Author : Kishore Papisetty

code : VHDL


Gray code is the code with only bit transition between adjacent words. The direct description of Gray counter is based on the equation extraction from the truth table.
Such solution of n bit counter demands 2^(n-2). product terms. Implementation may be difficult for greater width of counter. The alternative is using of auxiliary bit.

The design was based on the Auxiliary bit generation.

vhdl code for the gray counter

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity gray_counter is
    Port ( clk : in  STD_LOGIC;
           rst : in  STD_LOGIC;
           gray_code : out  STD_LOGIC_VECTOR (3 DOWNTO 0));
end gray_counter;

architecture Behavioral of gray_counter is
signal count:STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";
begin
process(clk)
begin
if(rst='1')
then
count <= "0000";
elsif(rising_edge(clk))
then
count<=count+"0001";
end if;
end process;
gray_code <= count xor('0'&count(3 DOWNTO 1));


end Behavioral;







testbench for the gray counter



LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY gray_conter_tb IS
END gray_conter_tb;
ARCHITECTURE behavior OF gray_conter_tb IS 
    -- Component Declaration for the Unit Under Test (UUT)
    COMPONENT gray_counter
    PORT(
         clk : IN  std_logic;
         rst : IN  std_logic;
         gray_code : OUT  std_logic_vector(3 downto 0)
        );
    END COMPONENT;
    

   --Inputs
   signal clk : std_logic := '0';
   signal rst : std_logic := '1';

  --Outputs
   signal gray_code : std_logic_vector(3 downto 0);

   -- Clock period definitions
   constant clk_period : time := 10 ns;
BEGIN
-- Instantiate the Unit Under Test (UUT)
   uut: gray_counter PORT MAP (
          clk => clk,
          rst => rst,
          gray_code => gray_code
        );

   -- Clock process definitions
   clk_process :process
   begin
clk <= '0';
wait for clk_period/2;
clk <= '1';
wait for clk_period/2;
   end process;

   -- Stimulus process
   stim_proc: process
   begin
      -- hold reset state for 100 ns.
      wait for 100 ns;
rst<='0';
      wait for clk_period*10;

      -- insert stimulus here 

      wait;
   end process;

END;

The code was generated on the xilinx tool and executed successfully. 



Comments

Popular posts from this blog

FSM 101 in Mealy state

Author : Kishore Papisetty fsm style : mealy fsm verilog code for the sequence detector 101 in mealy state   module fsm_101(clk,rst,x,z); input clk,rst,x; output z; reg [1:0]pstate,nstate; reg z;   always@(x,pstate) case(pstate) 2'd0: if(x==1'd1) begin nstate<=2'd1; z<=1'd0; end else begin nstate<=2'd0; z<=1'd0; end 2'd1: if(x==1'd0) begin nstate<=2'd2; z<=1'd0; end else begin nstate<=2'd1; z<=1'd0; end 2'd2: if(x==1'd1) begin nstate<=2'd1; z<=1'd1; end else begin nstate<=2'd0; z<=1'd0; end endcase   always@(posedge clk) begin if(rst==1'd0) pstate<=2'd0; else pstate<=nstate; end   endmodule //TEST BENCH// `timescale 1ns / 1ps module fsm_tb; reg clk; reg rst; reg x; wire z; fsm_101 uut (

VHDL code for a 3-bit binary to thermometer converter

Author : Kishore Papisetty Platform : Xilinx code : VHDL //bit binary to thermometer converter// library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.numeric_std.all; entity bin2therm2bit is                 port (                                 binary_input : in std_logic_vector (1 downto 0);                                 therm_output : out std_logic_vector (6 downto 0)                 ); end bin2therm6bit; architecture Behavioral of bin2therm6bit is begin                 process (binary_input)                 begin                                 label1 : case binary_input is                                                 when "000" => therm_output <= "0000000";                                                 when "001" => therm_output <= "0000001";                                                 when "010" => therm_output <= "0000011";