Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > rfid tag reading vhdl code problem

Reply
Thread Tools

rfid tag reading vhdl code problem

 
 
Kenneth
Guest
Posts: n/a
 
      07-11-2003
Hi,
Does anyone written vhdl code on rfid tag reader, I have problem in
reading the tag values out from the contactless card. It need to
transmit characters of "sl00ff" + enter thru the rs232 to the reader
then it will send a valid authentication character 'L' back. However,
i try many way but still could not get the correct character back,
kept getting '?' back, attached is the code, could anyone help me to
see where i gone wrong. Thank you very much, I really need it to work
urgently.

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

-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;

entity tophier is
Port (
mclkx16 : IN std_logic;
rxstrobe : IN std_logic;
txstrobe : IN std_logic;
reset : IN std_logic;
-- datain : OUT std_logic_vector(7 downto 0);
pushbutton : IN std_logic_vector(3 downto 0);
buttonmsg : IN std_logic;
Led_wr: out std_logic;
Led_rd : out std_logic;
Led_clk : out std_logic;
leddisplay : out std_logic_vector(7 downto 0);
-- dataout : INOUT std_logic_vector(7 downto 0);
-- receiver input signal, error, and status flags
rx : IN std_logic;
-- rxrdy : OUT std_logic;
parityerr : OUT std_logic;
framingerr: OUT std_logic;
overrun : OUT std_logic;
-- transmitter output signal and status flag
tx : OUT std_logic;
-- txrdy : OUT std_logic

sendstatus : out std_logic;
sendstatus1 : out std_logic;
sendstatus2 : out std_logic;
-----------------------------------------------------------
-- lcd driver pins location.
-----------------------------------------------------------
lcd_data: out std_logic_vector( 7 downto 0 );
lcd_rs: out std_logic;
lcd_rw: out std_logic;
lcd_enable: out std_logic;
led4cnt: out std_logic;
led4lcd: out std_logic
);
end tophier;

architecture Behavioral of tophier is
TYPE STATE_TYPE IS (init,s0,s1,s2,but,s2a,s2b,s2c,s2d,s2e,s2f,s2g,s3) ;
SIGNAL state : STATE_TYPE;
SIGNAL Link_din_led : std_logic_vector(7 downto 0);
SIGNAL Link_wr : std_logic;
SIGNAL Link_rd : std_logic;
SIGNAL Link_rxrdy : std_logic;
SIGNAL Link_txrdy : std_logic;
SIGNAL Link_txrx : std_logic;
SIGNAL button_clk : std_logic;
SIGNAL databus : std_logic_vector(7 downto 0);
SIGNAL datatxrx :std_logic_vector(7 downto 0);
SIGNAL send_select :std_logic_vector(7 downto 0);
SIGNAL lcdflagen : std_logic;
SIGNAL selparity : std_logic;
SIGNAL button :std_logic_vector(3 downto 0);

component pushbuttons is
PORT( pb1_in : IN std_logic;
pb2_in : IN std_logic;
pb3_in : IN std_logic;
pb4_in : IN std_logic;
clk : IN std_logic;
s1_pb : OUT std_logic;
s2_pb : OUT std_logic;
s3_pb : OUT std_logic;
s4_pb : OUT std_logic
);
end component;

component uart is
PORT (mclkx16 : IN std_logic;
rxstrobe : IN std_logic;
txstrobe : IN std_logic;
reset : IN std_logic;
selparity : IN std_logic;
datain : INOUT std_logic_vector(7 downto 0);
dataout : INOUT std_logic_vector(7 downto 0);
-- receiver input signal, error, and status flags
rx : IN std_logic;
rxrdy : OUT std_logic;
parityerr : OUT std_logic;
framingerr: OUT std_logic;
overrun : OUT std_logic;
-- transmitter output signal and status flag
tx : OUT std_logic;
txrdy : OUT std_logic);
end component;

component lcd_top is
port(
clock: in std_logic;
reset: in std_logic;
txrxmsgflag: in std_logic;
datatxrx : in std_logic_vector(7 downto 0);
lcd_data: out std_logic_vector( 7 downto 0 );
lcd_rs: out std_logic;
lcd_rw: out std_logic;
lcd_enable: out std_logic;
led4cnt: out std_logic;
led4lcd: out std_logic );
end component;

begin
------------------------------------------------------------
-- for debugging purpose only (not required)
led_rd <= Link_rd;
led_wr <= Link_wr;
--datain <= Link_din_led;
datatxrx <= databus;
leddisplay <= send_select;
selparity <= '0';
------------------------------------------------------------
u1 : uart PORT MAP
(
mclkx16 => mclkx16,
reset => reset,
datain => send_select,
dataout => databus,
parityerr => parityerr,
selparity => selparity,
framingerr => framingerr,
overrun => overrun,

-- receiver
rx => rx,
rxrdy => Link_rxrdy,
rxstrobe => Link_rd,

-- transmitter pins
tx => tx,
txrdy=> Link_txrdy,
txstrobe => Link_wr

);

u2 : lcd_top PORT MAP
(
clock => mclkx16,
reset => reset,
datatxrx => datatxrx,
lcd_data => lcd_data,
lcd_rs => lcd_rs,
lcd_rw => lcd_rw,
lcd_enable => lcd_enable,
txrxmsgflag => lcdflagen,
led4cnt => led4cnt,
led4lcd => led4lcd
);

u3 : pushbuttons PORT MAP
(
pb1_in => pushbutton(0),
pb2_in => pushbutton(1),
pb3_in => pushbutton(2),
pb4_in => pushbutton(3),
clk => mclkx16,
s1_pb => button(0),
s2_pb => button(1),
s3_pb => button(2),
s4_pb => button(3)
);

--------------------------------------------------
-- A very long timer delay ( currently not in use).
--------------------------------------------------
clock_divider: process (mclkx16) is
variable c:natural range 0 to 33554432;
begin
if mclkx16'event and mclkx16 = '1' then
if reset ='1' then
c:= 0;
button_clk <= '0';
else
c := (c + 1);
if c = 33554432 then
button_clk <= not button_clk;
c := 0;
end if;

end if;
end if;
end process clock_divider;

--------------------------------------------------
-- Main program running.
--------------------------------------------------
simulation : PROCESS (reset, mclkx16)
constant big: natural := 334455;
constant small: natural := 1;
constant nom: natural := 2;
variable cnt : natural range 0 to nom;
variable cnt1 : natural range 0 to 2;
variable readdelay : natural range 0 to big;
variable flag : boolean := false;

begin

if reset = '1' then
state <= init;
Link_wr <= '1';
cnt := 0;
cnt1 := 0;
readdelay := 0;
sendstatus <= '0';
sendstatus1 <= '0';
sendstatus2 <= '0';
flag := false;

elsif mclkx16'event and mclkx16 = '1' then
case state is
when init =>
if (flag = false) then
send_select <= "01111000"; -- 'x' reset once
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
state <= init;
end if;

if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
state <= s0;
else
cnt := cnt + 1;
state <= init;
end if;
end if;

when s0 =>
if cnt1 = 2 then
if pushbutton(0) = '1' then
state <= s1;
elsif pushbutton(1) = '1' then
state <= s2a;
elsif pushbutton(2) = '1' then
state <= s3;
elsif pushbutton(3) = '1' then
state <= init;
else
state <= s0;
end if;
cnt1 := 0;
else
cnt1 := cnt1 + 1;
state <= s0;
end if;


when s1 =>
if (flag = false) then
send_select <= "01110011"; -- 's' read serialno.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
state <= s1;
end if;

if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
state <= s0;
else
state <= s1;
cnt := cnt + 1;
end if;
end if;
--------------------------------------------------------------

when s2 =>
if readdelay = 0 or flag = true then
sendstatus <= '1';
if (flag = false) then
send_select <= "01110011"; -- 's' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
state <= s2;
end if;
readdelay := 1;
if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
-- state <= s2a;
else
cnt := cnt + 1;
state <= s2;
end if;
end if;

elsif readdelay < big then
readdelay := readdelay + 1;
state <= s2;
else
state <= s2a;
readdelay := 0;
end if;


when but =>
if (buttonmsg = '1') then
state <= s2a;
else
state <= but;
end if;

when s2a =>
if readdelay = 0 or flag = true then
if (flag = false) then
send_select <= "01101100"; -- 'l' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
state <= s2a;
end if;

readdelay := 1;
if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
-- state <= s2b;
else
cnt := cnt + 1;
state <= s2a;
end if;
end if;
elsif readdelay < big then
readdelay := readdelay + 1;
state <= s2a;
else
state <= s2b;
readdelay := 0;
end if;

when s2b =>
if readdelay = 0 or flag = true then
if (flag = false) then
send_select <= "00110000"; -- '0' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
state <= s2b;
end if;

readdelay := 1;
if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
-- state <= s2c;
else
cnt := cnt + 1;
state <= s2b;
end if;
end if;
elsif readdelay < big then
readdelay := readdelay + 1;
state <= s2b;
else
state <= s2c;
readdelay := 0;
end if;

when s2c =>
if readdelay = 0 or flag = true then
if (flag = false) then
send_select <= "00110001"; -- '1' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
state <= s2c;
end if;

readdelay := 1;
if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
-- state <= s2d;
else
cnt := cnt + 1;
state <= s2c;
end if;
end if;
elsif readdelay < big then
readdelay := readdelay + 1;
state <= s2c;
else
state <= s2d;
readdelay := 0;
end if;

when s2d =>
if readdelay = 0 or flag = true then
if (flag = false) then
send_select <= "01100110"; -- 'F' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
state <= s2d;
end if;

readdelay := 1;
if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
-- state <= s2e;
else
cnt := cnt + 1;
state <= s2d;
end if;
end if;
elsif readdelay < big then
readdelay := readdelay + 1;
state <= s2d;
else
state <= s2e;
readdelay := 0;
end if;

when s2e =>
if readdelay = 0 or flag = true then
if (flag = false) then
send_select <= "01100110"; -- 'F' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
state <= s2e;
end if;

readdelay := 1;
if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
-- state <= s2f;
else
cnt := cnt + 1;
state <= s2e;
end if;
end if;
elsif readdelay < big then
readdelay := readdelay + 1;
state <= s2e;
else
state <= s2f;
readdelay := 0;
end if;

when s2f =>
if readdelay = 0 or flag = true then
if (flag = false) then
send_select <= "00001101"; -- 'CR' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
state <= s2f;
end if;

readdelay := 1;
if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
-- state <= s2g;
else
cnt := cnt + 1;
state <= s2f;
end if;
end if;
elsif readdelay < small then
readdelay := readdelay + 1;
state <= s2f;
else
readdelay := 0;
sendstatus <= '0';
state <= s0;
end if;


when s2g =>
if (flag = false) or flag = true then
send_select <= "01110010"; -- 'r' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
end if;

if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
else
cnt := cnt + 1;
end if;
end if;

if (flag = false) then
send_select <= "00110000"; -- '0' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
end if;

if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
else
cnt := cnt + 1;
end if;
end if;

if (flag = false) then
send_select <= "00110100"; -- '4' login.
-- leddisplay <= send_select;
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
end if;

if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
else
cnt := cnt + 1;
end if;
end if;

state <= s0;


----------------------------------------------------------------------------------
when s3 =>
if (flag = false) then
send_select <= "01100011"; -- 'c' continuous scanning.
flag := true;
link_wr <= '0';
else
Link_wr <= '1';
end if;

if (flag = true) then
if (cnt = nom) then
link_wr <= '1';
cnt := 0;
flag := false;
else
cnt := cnt + 1;
end if;
end if;
state <= s0;
end case;
end if;

end process simulation;

try : process ( reset,mclkx16 )
begin
if reset = '1' then
Link_rd <= '0';

elsif mclkx16'event and mclkx16 = '1' then
if (Link_rxrdy = '1') then
Link_rd <= '1';
lcdflagen <= '0';
else
Link_rd <= '0';
lcdflagen <= '1';

end if;
end if;
end process;
end Behavioral;



regards
kenneth
 
Reply With Quote
 
 
 
Reply

Thread Tools

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 Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
RFID Biometrics Guide,RFID and Environmental Issues, Wal-Mart and RFID: A Case Study buster Computer Security 0 07-30-2006 10:42 PM
RFID Using Wireless Tutorial, RFID and Environmental Issues, Wal-Mart and RFID: A Case Study (April 2006.) jonbonmike@gmail.com Wireless Networking 0 06-11-2006 01:56 AM
RFID Tutorial, RFID and Environmental Issues, Wal-Mart and RFID: A Case Study (April 2006.) jonbonmike@gmail.com Wireless Networking 0 06-07-2006 01:19 AM
RFID Tutorial, RFID and Environmental Issues, Wal-Mart and RFID picwordwriter@gmail.com Wireless Networking 0 06-04-2006 01:16 AM
RFID Tutorial, RFID and Environmental Issues, Wal-Mart and RFID: A Case Study (April 2006.) buster Wireless Networking 0 06-01-2006 05:54 AM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57