hi, i have an if statement in my code

if(a and (not b) and c = '1') then output <= '1'; else output <= '0'; end if; |

a, b, and c are internal signal of type std_logic; output is signal out std_logic; when compile this code it is showing an error Error (10476): VHDL error at PowerSeq1.vhd(486): type of identifier "a" does not agree with its usage as "boolean" type

Hareesh M. wrote: > if (a and (not b) and c = '1') then ------- |_ type: boolean the and operator needs operands of the same type, i.e all operands are boolean, or all of type std_logic. The comparsion "c = '1'" results into type boolean; the sub-term "a and (not b)" into type std_logic (because a and b are of type std_logic)-> the rightmost "and" faces type missmatch.

Hareesh M. wrote: > if(a and (not b) and c = '1') then Try this: if (a and (not b) and c) then... And this: if (a='1' and b='0' and c='1') then... Then think about it.

:
Edited by Moderator

Lothar M. wrote: > Hareesh M. wrote: >> if(a and (not b) and c = '1') then > Try this: > if (a and (not b) and c) then... > And this: > if (a='1' and b='0' and c='1') then... if (?? a) and (?? (not b)) and c = 1 then > Then think about it.

thanks for your reply, it is solved

if((a and (not b) and c) ='1' ) then output <= '1'; else output <= '0'; end if; |

Hareesh M. wrote: > it is solved > if((a and (not b) and c) ='1' ) then I would prefer this: if (a='1' and b='0' and c='1') then Because there it is absolutely obvoius to see whats wanted without doing any logical calculations and digging around with the (not b) together with the ='1'...