FPGA, SoC, And CPLD Boards And Kits
FPGA Evaluation and Development Kits
Announcements
Intel Support hours are Monday-Fridays, 8am-5pm PST, except Holidays. Thanks to our community members who provide support during our down time or before we get to your questions. We appreciate you!

Need Forum Guidance? Click here
Search our FPGA Knowledge Articles here.
5234 Discussions

Type error near ; current type std_logic_vector; expected type std_ulogic error in vhdl. How to solve this error

Spk00
Beginner
3,231 Views
 
0 Kudos
9 Replies
sstrell
Honored Contributor III
2,858 Views

Can you post your code?

 

#iwork4intel

AnandRaj_S_Intel
Employee
2,859 Views

Hi Sisira,

 

The error may be due to a mismatch in vector size or operator misinterpretation.

Share your code.

 

Regards

Anand

Spk00
Beginner
2,859 Views

This is my code

Library ieee; 

Use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

use ieee.std_logic_unsigned.all; 

use ieee.std_logic_arith.all; 

 

 

entity ttcaam is

port(clk:in std_logic);

end ttcaam;

 

architecture Behavioral of ttcaam is

type mem0 is array(0 to 5) of std_logic_vector(0 to 5);

signal mem:mem0;

type mem1 is array (0 to 5) of std_logic_vector(0 to 5);

signal mem_1:mem1;

type mem2 is array (0 to 5) of std_logic_vector(0 to 5);

signal mem_2:mem2;

type mem3 is array (0 to 5) of std_logic_vector(0 to 5);

signal mem_3:mem3;

type mem4 is array (0 to 5) of std_logic_vector(0 to 5);

signal mem_4:mem4;

 

signal q1:std_logic_vector(0 to 5);

signal q2:std_logic_vector(0 to 5);

 

 

signal q3:std_logic_vector(0 to 5);

signal q4:std_logic_vector(0 to 5);

signal q5:std_logic_vector(0 to 5); 

signal q6:std_logic_vector(0 to 5);

 

constant r:std_logic_vector(0 to 1):="00";

constant s:std_logic_vector(0 to 1):="01";

constant t:std_logic_vector(0 to 1):="10";

constant u:std_logic_vector(0 to 1):="11";

constant v:std_logic_vector(0 to 1):="-0";

constant w:std_logic_vector(0 to 1):="-1";

constant y:std_logic_vector(0 to 1):="0-";

constant z:std_logic_vector(0 to 1):="1-";

signal q:std_logic_vector(0 to 5);

signal i:integer ;

signal j:integer:=0;

 

signal a:integer;

signal b:integer;

signal c:integer;

signal d:integer;

 

 

signal e:integer;

 

begin

q1<="001001";

q2<="11-100";

q3<="-10010";

q4<="100-11";

q5<="0-01-1"; 

q6<="-10001";

 

process(clk,q(1),q(3))

begin 

 

if(i=0) then

mem(i)<=q1;

i<=i+1;

elsif(i=1) then 

mem(i)<=q2;

i<=i+1;

elsif(i=2) then

mem(i)<=q3;

i<=i+1;

elsif(i=3) then

mem(i)<=q4;

i<=i+1;

elsif(i=4) then 

mem(i)<=q5;

i<=i+1;

elsif(i=5) then

mem(i)<=q6;

i<=i+1;

else 

if(j<=5) then

q<=mem(j);

case q(1) and q(3) is

when r=>

e<=e+1;

  mem_1(a)<=q;

  a<=a+1;

when s=>

e<=e+1;

  mem_2(b)<=q;

  b<=b+1;

when t=>

e<=e+1;

  mem_3(c)<=q;

  c<=c+1;

  when u=>

e<=e+1;

  mem_4(d)<=q;

  d<=d+1;  

when v=>

  mem_1(a)<=q;

  a<=a+1; 

  mem_3(c)<=(q(0),'1',q(2),q(3),q(4),q(5));

  c<=c+1;

  when w=>

  mem_2(b)<=(q(0),'0',q(2),q(3),q(4),q(5));

  b<=b+1;

  mem_4(d)<=(q(0),'1',q(2),q(3),q(4),q(5));

  d<=d+1;

 when y=>

  mem_1(a)<=(q(0),q(1),q(2),'0',q(4),q(5));

  a<=a+1;

  mem_2(b)<=(q(0),q(1),q(2),'1',q(4),q(5));

  b<=b+1;

 when z=>

  mem_3(c)<=(q(0),q(1),q(2),'0',q(4),q(5));

  c<=c+1;

  mem_4(d)<=(q(0),q(1),q(2),'1',q(4),q(5));

  d<=d+1;

  end case;

j<=j+1;

end if;

end if;

end process;

end;

 

 

sstrell
Honored Contributor III
2,859 Views

Without line numbers or a fixed width font, it's a little tricky to figure out what's going on here, but I do see an errant space:

 

signal i:integer ;

 

I don't know if that's the issue. Does the tool say which line number(s) have issues?

 

#iwork4intel

 

 

Spk00
Beginner
2,859 Views

Error is inside case statement.

ie;Type error near r,s,t,u,v,w,y,z ; current type std_logic_vector; expected type std_ulogic error

AnandRaj_S_Intel
Employee
2,859 Views

Hi Sisira,

 

  1. At line 85, you have used the logical operator "and" which is defined for BIT and BOOLEAN types.
  2. At 86 you are expecting 2bits for state "r"

VHDL concatenate operator is an ampersand (&). It can be used to combine two or more items together.

 Example pad 0 in MSB.

case( 0 & (q(1) and q(3)) is

or case(q(1) & q(3)) is

 

Regards

Anand

 

Spk00
Beginner
2,859 Views

I have checked both the cases . But again I got an error that is " Near case_expression ; 6 visible identifiers match here"

AnandRaj_S_Intel
Employee
2,859 Views

Okay,

Add below lines at the appropriate location and check

 

signal x:std_logic_vector(0 to 1);

x<=q(1)&q(3);

case (x) is

when others =>

 

Regards

Anand

 

Spk00
Beginner
2,859 Views
Reply