help error 10822 vhdl

Guest #4426225
Rate this post
• ▲ useful
▼ not useful
i will be thankful if somebody will can help me..
my aim is to make a block that get 3 inputs:
a clc that change every 0.1 sec
a input that get '1' every time i press key0
and reset button that reset my count

the aim is to count the number of time i press and when there is 3 secs 
that i dont press i get the count of the time i pressed
i tried to it with this code"
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.std_logic_unsigned.all;
4
use ieee.std_logic_arith.all;
5

6
entity CLAPNUM is 
7
   port( 
8
    resetN, clk : in std_logic;
9
    key0         : in std_logic   ;
10
    sinus      : out  std_logic_vector(4 downto 0));
11
end CLAPNUM ; 
12
architecture arc_CLAPNUM of CLAPNUM is 
13

14
signal countera : std_logic_vector(4 downto 0) :="00000"  ;
15
signal counterb : std_logic_vector(4 downto 0) :="00000" ;
16
signal cinout   : std_logic := '0' ;
17
signal moda   : std_logic := '0' ;
18

19
begin 
20
   
21
process ( resetN key0, clk)
22
  begin
23
    if resetN = '0' then
24
    countera<="00000" ;
25
    counterb<="11110";
26
  elsif (key0 ='1') and moda='0' then
27
    countera<= countera+"00001" ;
28
    counterb<="11110";
29
  elsif (rising_edge(clk))  then
30
    if counterb/="00000" and (key0 ='0') then
31
      counterb <= counterb-"00001";
32
    else      
33
      moda <= '1';
34
    end if;
35
  elsif moda='1' then
36
  sinus<= countera;
37
  end if;
38
   end process;
39

40
end arc_CLAPNUM;

but clearly it dosent work...
can someone help me plz?
Moderator (Company: Titel) #4426340
Rate this post
• ▲ useful
▼ not useful
First have a look at the attached sreenshot...

> but clearly it dosent work...
And HOW did you see that?
Did you do a SIMULATION?
What ERROR messages or WARNINGS did you get?
And why do you ignore them all?

In fact the problem here is the well known and famous "combinatorial 
loop":
as long as key0 is 1 and moda is 0 the countera is counting upwards 
without any clock at maximum and random speed:
1
  elsif (key0 ='1') and moda='0' then
2
    countera<= countera+"00001" ;
Try Google translator on that:
http://www.lothar-miller.de/s9y/archives/42-Kombinatorische-Schleifen.html

Let me ask you: where did you see this structure in literature?
1
begin process ( resetN key0, clk)
2
begin
3
if resetN = '0' then
4
  ...
5
elsif (key0 ='1') and moda='0' then
6
  ...
7
elsif (rising_edge(clk)) then
8
  ...
9
end if;
There's only one way to desrcibe a synchronous process:
1
begin process ( resetN, clk)
2
begin
3
if resetN = '0' then
4
  ...
5
elsif (rising_edge(clk)) then
6
  ...
7
end if;

Beside the whole things above: the sensitivity list is incomplete, moda 
ist missing. Therefore a simulation will show wrong results...

BTW: congratulations to use the 1-process-FSM. You are a big step 
further than in the thread https://embdev.net/topic/386779
Attached files:

Reply

Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.

Formatting
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.