Zähler bis 200000000

Gast #592134
Lesenswert?

constant MAX_COUNTER : integer := 200000000;
signal counter : integer range 0 to MAX_COUNTER;

...

process(clock)
begin
   if rising_edge(clock) then
      counter <= (counter + 1) mod MAX_COUNTER; -- oder so...
   end if;
end process;
Gast #593598
Lesenswert?

Es ist mir klar wie ich den Zähler realisiere, nun möchte ich abhängig 
von einer Eingangstaste im laufenden Betrieb den Zähler einen neuen 
Maximum zuweisen wie folgt:

when "0001" => s_max_counter <= 100;      -- 10^2
when "0010" => s_max_counter <= 1000;     -- 10^3
when "0011" => .....
               .....
for i in s_max_counter downto 0 loop
    s_max_counter <= (s_max_counter-1);
end loop;
led <= '1';


Da die for-Schleife nur mit statischen grenzen synthesefähig ist, frage 
ich mich ob und wie man dieses Problem umgehen kann.
Gast #593762
Lesenswert?

Hab da folgende variante ausprobiert. Sollte synthsefähig sein, mag das 
Precision RTL Synthese tool aber nicht wegen dem "mod" operator. Hat 
jemand schon Erfahrung mit diesem Problem.


process(clock)
begin
   if rising_edge(clock) then
      counter <= (counter + 1) mod MAX_COUNTER;
   end if;
end process;
Gast #593819
Lesenswert?

@ Rudi

>Hab da folgende variante ausprobiert. Sollte synthsefähig sein, mag das

Xilinx ISE mag das nicht, MOD ist nur statisch synthetisierbar.

>Precision RTL Synthese tool aber nicht wegen dem "mod" operator. Hat
>jemand schon Erfahrung mit diesem Problem.

process(my_input)
begin
  case my_input is
    when "00" => max_cnt <= 100;
    when "01" => max_cnt <= 1000;
    when "10" => max_cnt <= 10000;
    when "11" => max_cnt <= 100000;
  end case;
end process;

process (clk)
begin
  if rising_edge(clk) then
    if cnt=max_cnt then
      cnt <= 0;
    else
      cnt <= cnt +1;
    end if;
  end if;
end process;

Das Ganze ist natürlich noch ohne Pipelining und wird bei grossen 
Zählerbreiten schon etwas langsamer. Aber 100 MHz sollen auf jeden Fall 
drin sein.

MFG
Falk
#596159
Lesenswert?

Das kommt darauf an, wie die Zählersignale weiterverarbeitet werden. Für 
Frequenzteiler-Anwendungen kann man den Zähler auch in 2 Teilzähler 
aufteilen (Vorteiler-Prinzip). Im Beispiel von Falk würde dann z.B. der 
erste Zähler konstant 0-99 zählen, der zweite maximal bis 0-999. Für 
z.B. einen Adresszähler bei dem alle Bits benötigt werden, geht das 
natürlich nicht.

Gruss Jörg

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