UOMOP

QPSK Mapper using VHDL 본문

Wireless Comm./VHDL

QPSK Mapper using VHDL

Happy PinGu 2022. 4. 27. 11:34

RTL code

library ieee;
use ieee.std_logic_1164.all;

entity QPSKmapper is
port(	nrst, 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 QPSKmapper;

architecture arch of QPSKmapper is
signal rmapout, imapout : std_logic_vector(5 downto 0);
--signal inbits : std_logic_vector(1 downto 0);

begin

process(nrst, pclk)
begin
	if nrst = '0' then
		rmapout <= "000000";
		imapout <= "000000";
	elsif pclk = '1' and pclk'event then
		if inbits = "00" then
			rmapout <= "010000";
			imapout <= "010000";
		elsif inbits = "01" then
			rmapout <= "010000";
			imapout <= "110000";
		elsif inbits = "10" then
			rmapout <= "110000";
			imapout <= "010000";
		else
			rmapout <= "110000";
			imapout <= "110000";
		end if;
	end if;
end process;

rdata <= rmapout;
idata <= imapout;

end arch;

Testbench code

library ieee;
use ieee.std_logic_1164.all;

entity tb_QPSKmapper is
end tb_QPSKmapper;

architecture behavior of tb_QPSKmapper 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;


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);




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
	);

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' 카테고리의 다른 글

UpSampling using VHDL  (0) 2022.04.29
QPSK DeMapper using VHDL  (0) 2022.04.28
Serial to Parallel using VHDL  (0) 2022.04.26
Parallel to Serial using VHDL  (0) 2022.04.26
Clock Generator using VHDL  (0) 2022.03.22
Comments