Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

About String Matching

Status
Not open for further replies.

hei1233212000

Newbie level 1
Joined
Mar 28, 2010
Messages
1
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Location
China
Activity points
1,290
Hi, I am a newcomer.

Now I am doing a String Matching Machine (test the string "ABC" or "abc"). When I finish a draft and I want to simulate it. But, the state flow is out of my expectation, there is an undefined state. See Fig1.

What is the problem?

Furthermore, when I simulate the waveform (Quartus II 7.2), two warnings occur:

Warning: Wrong node type and/or width for node "|Test01|state" in vector source file. Node in design is of type Enum and of width 1, but node in vector source file is of type 9-level and of width 1.

Warning: Signal name "|Test01|state" changed to enum type

What do they mean?

And,

Last but not least, can someone teach me how to display the internal signal (state ) using Xilinx ISE?
I have found a topic here but I still cannot drag the internal signals into the waveform.


I appreciate your help.

My code:
Code:
Library IEEE;
Use IEEE.std_logic_1164.all;
Use IEEE.std_logic_arith.all;
Use std.textio.all;

Entity Test01 is
	Port(  clk			: in  std_logic;
		 reset		: in  std_logic;
                 string_in           : in character;
		 ABC	  		: out std_logic);
End Test01;

Architecture a of Test01 is

	 type state_type is (idle, ss, s0, s1, s2, s3);
	 signal state, next_state        :state_type;

Begin 
     change_state: Process(reset, clk)
     Begin
          if reset = '1' then                             --reset system     
                 state <= idle;

          elsif (rising_edge(clk))  then
                     state <= next_state;                 --update state on clock
					 if (state = s3)  then 
                          ABC <= '1';            
					 else
                          ABC <= '0';            
					 end if;
                
          end if;
     end process change_state;

     process_bit: Process(state, string_in)
     Begin        
                case state is
                             when idle => 
						next_state <= ss;
                             when ss => 
                                                next_state <= s0;
                             when s0 =>	
					 if (string_in='A') or (string_in='a')then  
						next_state <= s1;
					 else 
						next_state <= ss;
					end if;
                             when s1 =>
					 if (string_in='B') or (string_in='b')then
						next_state <= s2;
					 else 
						next_state <= ss;
					 end if;
                             when s2 =>
                                         if (string_in='C') or (string_in='c') then
                                                next_state <= s3;
					 else 
						next_state <= ss;
					 end if;
                             when s3 =>
					next_state <= s3;
                 end case;
      END process process_bit;
End a;
[/code]
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top