UOMOP

QPSK DeMapper using VHDL 본문

Wireless Comm./VHDL

QPSK DeMapper using VHDL

Happy PinGu 2022. 4. 28. 15:22

RTL code

library ieee;
use ieee.std_logic_1164.all;

entity QPSKdemapper is
port(	nrst : in std_logic;
	pclk : in std_logic;
	rdata_de : in std_logic_vector(5 downto 0);
	idata_de : in std_logic_vector(5 downto 0);
	outdata_de : out std_logic_vector(1 downto 0)
	);
end entity;

architecture arch of QPSKdemapper is
signal finalbits : std_logic_vector(1 downto 0);

begin

process(nrst, pclk)
begin
	if nrst = '0' then
		finalbits <= (others => '0');
	elsif pclk = '1' and pclk'event then
		if rdata_de(5) = '0' then
			if idata_de(5) = '0' then
				finalbits <= "00";
			else
				finalbits <= "01";
			end if;
		else
			if idata_de(5) = '0' then
				finalbits <= "10";
			else
				finalbits <= "11";
			end if;
		end if;
	end if;
end process;

outdata_de <= finalbits;

end arch;

Testbench code

library ieee;
use ieee.std_logic_1164.all;

entity tb_QPSKdemapper is
end tb_QPSKdemapper;

architecture behavior of tb_QPSKdemapper is

component clkgen
   port(nrst  : in std_logic;
        mclk  : in std_logic;
   
        clk8x : out std_logic;   
        clk4x : out std_logic;
        clk2x : out std_logic;
        clk1x : out std_logic
   );
end component;

component rbgen
   port(nrst : in std_logic;
        clk  : in std_logic;

        rbit : out std_logic
   );
end component;

component Serial2Parallel
   port(nrst  : in std_logic;
        sclk  : in std_logic;
        pclk  : in std_logic;
        inbit : in std_logic;

        outbits : out std_logic_vector(1 downto 0)
   );
end component;

component QPSKmapper
	port(nrst : in std_logic;
	     pclk : in std_logic;
	     inbits : in std_logic_vector(1 downto 0);

	     rdata : out std_logic_vector(5 downto 0);
	     idata : out std_logic_vector(5 downto 0)
	);
end component;

component QPSKdemapper
	port(nrst, pclk : in std_logic;
	     rdata_de, idata_de : in std_logic_vector(5 downto 0);
	
	     outdata_de : out std_logic_vector(1 downto 0)
	);
end component;


signal nrst, mclk : std_logic;
signal clk8x, clk4x, clk2x, clk1x : std_logic;
signal rbit : std_logic;
signal outbits : std_logic_vector(1 downto 0);
signal rmapout, imapout : std_logic_vector(5 downto 0);

signal finalbits : std_logic_vector(1 downto 0);


begin 
iclkgen : clkgen port map(
      nrst  => nrst, 
      mclk  => mclk,
      clk8x => clk8x, 
      clk4x => clk4x,
      clk2x => clk2x,
      clk1x => clk1x
   );

irbgen : rbgen port map(
      nrst => nrst, 
      clk  => clk2x,
      rbit => rbit
   );

is2p : Serial2Parallel port map(
      nrst    => nrst, 
      sclk    => clk2x,
      pclk    => clk1x,
      inbit   => rbit,
      outbits => outbits
   );

iqmap : QPSKmapper port map(
	nrst => nrst,
	pclk => clk1x,
	inbits => outbits,

	rdata => rmapout,
	idata => imapout
	);

iqdemap : QPSKdemapper port map(
	nrst => nrst,
	pclk => clk1x,
	rdata_de => rmapout,
	idata_de => imapout,

	outdata_de => finalbits
	);

tb : process
begin
   mclk <= '1';
   wait for 20 ns;
   mclk <= '0';
   wait for 20 ns;
end process;

rstp : process
begin
   nrst <= '0';
   wait for 100 ns;
   nrst <= '1';
   wait;
end process;

end behavior;

 

 

 

 

 

 

 

 

 

'Wireless Comm. > VHDL' 카테고리의 다른 글

DownSampling using VHDL  (0) 2022.04.30
UpSampling using VHDL  (0) 2022.04.29
QPSK Mapper using VHDL  (0) 2022.04.27
Serial to Parallel using VHDL  (0) 2022.04.26
Parallel to Serial using VHDL  (0) 2022.04.26
Comments