2-bit Serial to Parallel Conversion in VHDL

vhdl
serial
parallel
conversion
sipo

This document presents the VHDL source code for a 2-bit serial to parallel converter. It also provides a link to the corresponding 2-bit parallel to serial conversion code.

VHDL Code

-- library declaration
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

-- entity declaration
entity SIPO_2_n is
    port(
        CLK         : in  STD_LOGIC;                     -- global clk
        D_IN        : in  STD_LOGIC;                     -- serial data in
        EN          : in  STD_LOGIC;                     -- enable
        RESET       : in  STD_LOGIC;                     -- asynchronous reset
        D_OUT       : out STD_LOGIC_VECTOR(1 downto 0);  -- parallel data out
        valid_out   : out std_logic                      -- valid out
    );
end SIPO_2_n;

-- architecture declaration
architecture SIPO4_2_ARCH of SIPO_2_n is
    signal dout_i :     std_logic;
    signal tog    :     std_logic;
begin
    -- process to convert serial to parallel data
    process (clk, reset)
    begin
        if reset = '1' then
            valid_out   <= '0';
            tog         <= '0';
            dout_i      <= '0';
            D_out       <= "00";
        elsif rising_edge(clk) then
            if en = '1' then
                tog  <= not tog;
            else
                tog  <= '0';
            end if;
            dout_i <= D_IN;
            if tog = '1' then
                D_OUT     <= dout_i & D_in;
                valid_out <= '1';
            elsif tog = '0' then
                valid_out <= '0';
            end if;
        end if;
    end process;
end SIPO4_2_ARCH;

Code Explanation

The VHDL code defines an entity SIPO_2_n that implements a 2-bit Serial-In Parallel-Out (SIPO) shift register. Here’s a breakdown:

  • Libraries: The code starts by declaring the necessary IEEE libraries for standard logic and unsigned arithmetic.

  • Entity Declaration: The entity block defines the input and output ports of the SIPO register:

    • CLK: Clock input signal.
    • D_IN: Serial data input signal.
    • EN: Enable signal. When high, data shifts in.
    • RESET: Asynchronous reset signal. Resets the register to its initial state.
    • D_OUT: 2-bit parallel data output signal.
    • valid_out: Indicates when the output data is valid.
  • Architecture Declaration: The architecture block defines the behavior of the SIPO register.

    • Internal Signals: dout_i stores the previous input data bit, and tog is a toggle signal used for controlling when the new parallel output is valid.
    • Process: A sequential process is used to implement the shift register logic. This process is sensitive to the clock (clk) and reset (reset) signals.
      • Reset Condition: If reset is high (‘1’), the output valid_out, the toggle signal tog, the internal data signal dout_i, and the parallel output D_out are all reset to ‘0’ or “00”.
      • Clocked Logic: On the rising edge of the clock (rising_edge(clk)), the following happens:
        • Enable Check: If en is high (‘1’), the tog signal toggles. Otherwise, it is set to ‘0’.
        • Data Shifting: The current D_IN value is stored in dout_i.
        • Parallel Output and Validity: If tog is ‘1’, D_OUT is assigned the concatenated value of dout_i and the current D_in, effectively creating the 2-bit parallel output. valid_out is then set to ‘1’. If tog is ‘0’, valid_out is ‘0’, indicating the output is not yet valid.

VHDL, Verilog, and FPGA Training Resources

Comprehensive list of VHDL, Verilog, and FPGA training resources, including courses, examples, and tutorials for both beginners and experienced engineers.

vhdl
verilog
fpga