Signal duty cannot be synthesized, bad synchronous description.

Gast #3175863
Lesenswert?

Hallo zusammen !
Hab gerade neu gestartet VHDL zu programmieren.
kann mir jemand dabei helfen, diese Fehlermeldung zu beheben?

"Signal duty cannot be synthesized, bad synchronous description. The 
description style you are using to describe a synchronous element 
(register, memory, etc.) is not supported in the current software 
release."
Angehängte Dateien:
Gast #3175879
Lesenswert?

Register die von zwei verschiedenen Flanken von zwei verschiedenen 
Signalen abhängig sind, werden das Problem sein. Bitte poste den Code 
als Textfile mit vhd-Endung, dann zitiere ich die Stelle gerne.
Du kannst das ganze z.B. als Up-Down counter mit "up" und "down" als 
enable Signal implementieren. Du hast doch "clock" ohnehin schon in der 
sensitivity-Liste (obwohl Du es nicht verwendest).
Gast #3175888
Lesenswert?

>hoffe das ist so okay..
Das ist sogar viel besser als das PNG.
1
  process (up, down, clock)
2
  begin
3
    if up = '0' and up'event and duty <= "1011111" then
4
    duty <= (duty + 1);
5
    elsif down = '1' and down'event and duty >= "0000101" then
6
    duty <= (duty - 1);      
7
    end if;
8
  end process;

Du willst hier duty einmal erhöhen, falls up eine steigende Flange hat 
oder erniedrigen wenn down eine fallende Flanke hat.

So ein Flip-Flop mit zwei Takteingängen gibt es (noch und meines Wissens 
von Xilinx) nicht.

Du kannst das aber als einen Up-Down-Counter implementieren. Schaue mal 
unter Edit->Templates (ich denke Du benutzt ISE).

Reicht Dir das als Antwort?
Gast #3175991
Lesenswert?

>Finde mich in den Templates nicht gut zurecht.

Ja. Ich muss auch jedesmal wieder suchen. Ist irgendwie im letzten 
Drittel versteckt.

Also sinngemäß so:
1
process (duty, up, down, clk)
2
begin
3
  if (rising_edge(clk) then
4
    if (up = '1') then
5
      duty <= duty + 1;
6
    else (down = '1') then
7
      duty <= duty - 1;
8
    end if;
9
  end if;
10
end process;
Gast #3176053
Lesenswert?

Hmm schrieb:
> process (duty, up, down, clk)
Die Sensitivityliste ist viel zu lang. Der Prozess ist synchron und 
damit nur von clk abhängig:
1
libray ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4

5
...
6
signal duty : unsigned(6 downto 0) := (others => '0');
7
...
8

9
process (clk)
10
begin
11
   if rising_edge(clk) then
12
      if    (up = '1')   and (duty <= 95) then
13
         duty <= duty + 1;
14
      elsif (down = '1') and (duty >=  5) then
15
         duty <= duty - 1;
16
      end if;
17
   end if;
18
end process;

Wenn up und down von Tastern kommen, brauchst Du noch eine 
Entprellung und eine Flankenerkennung.
http://www.lothar-miller.de/s9y/archives/3-Tastenentprellung-mit-Schieberegister.html

Duke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren