FPGA Central - World's 1st FPGA / CPLD Portal

FPGA Central

World's 1st FPGA Portal

 

Go Back   FPGA Groups > NewsGroup > VHDL

VHDL comp.lang.vhdl newsgroup / Usenet

Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 10-12-2005, 11:15 AM
[email protected]
Guest
 
Posts: n/a
Default Serial in Parallel out

Hello folks,

In my entity i am getting serial-bit input and my expected output shld
hve odd bit at one port and even bit at other port. the clk for input
is twice as compared to output data rate(eg.Input clk:X Mhz,Output clk:
X/2 Mhz). I wrote the code but i am not getting the result as expected
Initally in the waveform (for first cycle with reference to input clk).
can anybody tell me where i went wrong ?

Thanks in advance,
ALI

CODE FOR SERIAL-BIT TO 2-BIT PARALLEL
------------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;


ENTITY STOP IS
PORT
(
CLK_A : IN STD_LOGIC;
CLK_B : IN STD_LOGIC;
RST : IN STD_LOGIC;
EN_STOP : IN STD_LOGIC;
S_IN : IN STD_LOGIC;
I_CHAN : OUT STD_LOGIC;
Q_CHAN : OUT STD_LOGIC
);
END STOP;
-------------------------------------------------------------------
ARCHITECTURE ARCH_STOP OF STOP IS

SIGNAL I_CLK_B : STD_LOGIC;
SIGNAL Q_CLK_B : STD_LOGIC;
SIGNAL DFF_CLK_A : STD_LOGIC_VECTOR(1 DOWNTO 0);
-------------------------------------------------------------------
BEGIN

PROCESS_CLKA : PROCESS (CLK_A,RST)

BEGIN -- PROCESS_22MHZ
IF RST = '0' THEN
DFF_CLK_A <= "11";
ELSIF (CLK_A'EVENT AND CLK_A = '1') THEN
IF (EN_STOP = '0' ) THEN
DFF_CLK_A <= "11";
ELSE
DFF_CLK_A(1) <= S_IN;
DFF_CLK_A(0) <= DFF_CLK_A(1);
END IF;
END IF;
END PROCESS PROCESS_CLKA;
-----------------------------------------------------------

PROCESS_CLKB : PROCESS(CLK_B,RST)
BEGIN -- PROCESS_11MHZ
IF RST = '0' THEN
I_CLK_B <= '1';
Q_CLK_B <= '1';
ELSIF (CLK_B'EVENT AND CLK_B = '1') THEN
IF (EN_STOP = '0') THEN
I_CLK_B <= '1';
Q_CLK_B <= '1';
ELSE
I_CLK_B <= DFF_CLK_A(0);
Q_CLK_B <= DFF_CLK_A(1);
END IF;
END IF;
END PROCESS PROCESS_CLKB;
-------------------------------------------------------------------
I_CHAN <= I_CLK_B;
Q_CHAN <= Q_CLK_B;


END ARCH_STOP;
-------------------------------------------------------------------


TEST BENCH FOR THE ABOVE ENTITY:


-------------------------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
-------------------------------------------------------------------
ENTITY TB_STOP IS
END TB_STOP;
-------------------------------------------------------------------
ARCHITECTURE ARCH_TB_STOP OF TB_STOP IS
-------------------------------------------------------------------

COMPONENT STOP
PORT
(
CLK_A : IN STD_LOGIC;
CLK_B : IN STD_LOGIC;
RST : IN STD_LOGIC;
EN_STOP : IN STD_LOGIC;
S_IN : IN STD_LOGIC;
I_CHAN : OUT STD_LOGIC;
Q_CHAN : OUT STD_LOGIC
);
END COMPONENT;
-------------------------------------------------------------------

SIGNAL CLK_A : STD_LOGIC := '0';
SIGNAL CLK_B : STD_LOGIC := '0';
SIGNAL RST : STD_LOGIC := '1';
SIGNAL EN_STOP : STD_LOGIC := '0';
SIGNAL S_IN : STD_LOGIC;
SIGNAL I_CHAN : STD_LOGIC;
SIGNAL Q_CHAN : STD_LOGIC;
CONSTANT INPUT : STD_LOGIC_VECTOR(31 DOWNTO 0)
:= "00110011001100110011001100110011";
-------------------------------------------------------------------
BEGIN

UUT : STOP
PORT MAP
(
CLK_A => CLK_A,
CLK_B => CLK_B,
RST => RST,
EN_STOP => EN_STOP,
S_IN => S_IN,
I_CHAN => I_CHAN,
Q_CHAN => Q_CHAN
);

--STIMULUS

CLK_A <= NOT CLK_A AFTER 4 NS;
CLK_B <= NOT CLK_B AFTER 8 NS;
RST <= '0','1' AFTER 2 NS;
EN_STOP <= '0','1' AFTER 3 NS;

DRIVE_BIT:PROCESS
BEGIN
FOR I IN INPUT'RANGE LOOP
S_IN <= INPUT(I);
WAIT UNTIL RISING_EDGE(CLK_A);
END LOOP;
END PROCESS DRIVE_BIT;


END ARCH_TB_STOP;
-------------------------------------------------------------------

Reply With Quote
  #2 (permalink)  
Old 10-20-2005, 09:44 AM
Abbs
Guest
 
Posts: n/a
Default Re: Serial in Parallel out


[email protected] wrote:
> Hello folks,
>
> In my entity i am getting serial-bit input and my expected output shld
> hve odd bit at one port and even bit at other port. the clk for input
> is twice as compared to output data rate(eg.Input clk:X Mhz,Output clk:
> X/2 Mhz). I wrote the code but i am not getting the result as expected
> Initally in the waveform (for first cycle with reference to input clk).
> can anybody tell me where i went wrong ?
>
> Thanks in advance,
> ALI
>
> CODE FOR SERIAL-BIT TO 2-BIT PARALLEL
> ------------------------------------------------------------------
> LIBRARY IEEE;
> USE IEEE.STD_LOGIC_1164.ALL;
> USE IEEE.NUMERIC_STD.ALL;
>
>
> ENTITY STOP IS
> PORT
> (
> CLK_A : IN STD_LOGIC;
> CLK_B : IN STD_LOGIC;
> RST : IN STD_LOGIC;
> EN_STOP : IN STD_LOGIC;
> S_IN : IN STD_LOGIC;
> I_CHAN : OUT STD_LOGIC;
> Q_CHAN : OUT STD_LOGIC
> );
> END STOP;
> -------------------------------------------------------------------
> ARCHITECTURE ARCH_STOP OF STOP IS
>
> SIGNAL I_CLK_B : STD_LOGIC;
> SIGNAL Q_CLK_B : STD_LOGIC;
> SIGNAL DFF_CLK_A : STD_LOGIC_VECTOR(1 DOWNTO 0);
> -------------------------------------------------------------------
> BEGIN
>
> PROCESS_CLKA : PROCESS (CLK_A,RST)
>
> BEGIN -- PROCESS_22MHZ
> IF RST = '0' THEN
> DFF_CLK_A <= "11";
> ELSIF (CLK_A'EVENT AND CLK_A = '1') THEN
> IF (EN_STOP = '0' ) THEN
> DFF_CLK_A <= "11";
> ELSE
> DFF_CLK_A(1) <= S_IN;
> DFF_CLK_A(0) <= DFF_CLK_A(1);
> END IF;
> END IF;
> END PROCESS PROCESS_CLKA;
> -----------------------------------------------------------
>
> PROCESS_CLKB : PROCESS(CLK_B,RST)
> BEGIN -- PROCESS_11MHZ
> IF RST = '0' THEN
> I_CLK_B <= '1';
> Q_CLK_B <= '1';
> ELSIF (CLK_B'EVENT AND CLK_B = '1') THEN
> IF (EN_STOP = '0') THEN
> I_CLK_B <= '1';
> Q_CLK_B <= '1';
> ELSE
> I_CLK_B <= DFF_CLK_A(0);
> Q_CLK_B <= DFF_CLK_A(1);
> END IF;
> END IF;
> END PROCESS PROCESS_CLKB;
> -------------------------------------------------------------------
> I_CHAN <= I_CLK_B;
> Q_CHAN <= Q_CLK_B;
>
>
> END ARCH_STOP;
> -------------------------------------------------------------------
>
>
> TEST BENCH FOR THE ABOVE ENTITY:
>
>
> -------------------------------------------------------------------
> LIBRARY IEEE;
> USE IEEE.STD_LOGIC_1164.ALL;
> USE IEEE.NUMERIC_STD.ALL;
> -------------------------------------------------------------------
> ENTITY TB_STOP IS
> END TB_STOP;
> -------------------------------------------------------------------
> ARCHITECTURE ARCH_TB_STOP OF TB_STOP IS
> -------------------------------------------------------------------
>
> COMPONENT STOP
> PORT
> (
> CLK_A : IN STD_LOGIC;
> CLK_B : IN STD_LOGIC;
> RST : IN STD_LOGIC;
> EN_STOP : IN STD_LOGIC;
> S_IN : IN STD_LOGIC;
> I_CHAN : OUT STD_LOGIC;
> Q_CHAN : OUT STD_LOGIC
> );
> END COMPONENT;
> -------------------------------------------------------------------
>
> SIGNAL CLK_A : STD_LOGIC := '0';
> SIGNAL CLK_B : STD_LOGIC := '0';
> SIGNAL RST : STD_LOGIC := '1';
> SIGNAL EN_STOP : STD_LOGIC := '0';
> SIGNAL S_IN : STD_LOGIC;
> SIGNAL I_CHAN : STD_LOGIC;
> SIGNAL Q_CHAN : STD_LOGIC;
> CONSTANT INPUT : STD_LOGIC_VECTOR(31 DOWNTO 0)
> := "00110011001100110011001100110011";
> -------------------------------------------------------------------
> BEGIN
>
> UUT : STOP
> PORT MAP
> (
> CLK_A => CLK_A,
> CLK_B => CLK_B,
> RST => RST,
> EN_STOP => EN_STOP,
> S_IN => S_IN,
> I_CHAN => I_CHAN,
> Q_CHAN => Q_CHAN
> );
>
> --STIMULUS
>
> CLK_A <= NOT CLK_A AFTER 4 NS;
> CLK_B <= NOT CLK_B AFTER 8 NS;
> RST <= '0','1' AFTER 2 NS;
> EN_STOP <= '0','1' AFTER 3 NS;
>
> DRIVE_BIT:PROCESS
> BEGIN
> FOR I IN INPUT'RANGE LOOP
> S_IN <= INPUT(I);
> WAIT UNTIL RISING_EDGE(CLK_A);
> END LOOP;
> END PROCESS DRIVE_BIT;
>
>
> END ARCH_TB_STOP;
> -------------------------------------------------------------------



----------------------------------------------------------------------------------------------------------------------------------------------------
hii...
m sending u a simple serial-in parallel out code in vhdl. write ur tb n
test it.

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity shift is
port(clk, reset, load : in std_logic;
data_in : in std_logic;
data_out : out std_logic_vector(15 downto 0));
end shift;

architecture rtl of shift is
signal s: std_logic_vector(15 downto 0);
begin
process(clk)
begin
if (reset = '1') then
s <= (others => '0');
elsif (clk = '1' and clk'event) then
if (load = '1') then
s <= data_in & s(15 downto 1);
else
s <= (others => '0'); --right shift
end if;
end if;
end process;
data_out <= s;
end rtl;

bye

Reply With Quote
  #3 (permalink)  
Old 10-20-2005, 07:36 PM
Mike Treseler
Guest
 
Posts: n/a
Default Re: Serial in Parallel out

Abbs wrote:

> m sending u a simple serial-in parallel out code in vhdl. write ur tb n
> test it.


Here's rev2.

-- Mike Treseler

http://home.comcast.net/~mike_treseler/shift_rev2.vhd
http://home.comcast.net/~mike_treseler/shift_rev2.pdf
Reply With Quote
Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Parallel to Serial ASI ... Kappa FPGA 2 11-19-2007 08:35 PM
CORDIC bit-serial vs. bit-parallel [email protected] FPGA 5 06-10-2005 03:01 AM
DualPortRAM serial IN - parallel OUT Manfred Balik FPGA 1 11-13-2004 08:26 AM
Laptop without serial/parallel port Hans FPGA 6 11-26-2003 07:31 AM


All times are GMT +1. The time now is 01:34 AM.


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright 2008 @ FPGA Central. All rights reserved