yannick
Legacy Member
Goedemiddag,
Ik weet dat dit een long shot is want ik denk niet dat er veel mensen op dit forum zijn die weten wat vhdl is (ik kan me vergissen uiteraard
).
Anyway, here goes:
Ik moet voor een soort eindwerkje een stopwatch maken in VHDL. Alles is zeer vlot gegaan en het is eigenlijk af, maar het probleem is dat de prof vroeg om het met zo weinig mogelijk flips flops mogelijk te maken.
Ik heb alles goed geoptimaliseerd gekregen behalve mijn clock divider (welke dus de meeste flip flops gebruikt, omdat hij hoge tellers heeft).
Ik ben al 2 weken aan het zoeken naar een betere manier voor deze clock divider.
Logisch moet hij zo in elkaar zitten:
Input is dus de main clock (25Mhz) en daaruit moet ik een 5Khz en 1hz clock krijgen
Met deze methode krijg ik na het synthetiseren:
Total logic cells required: 47
Total flipflops required: 27
Ik zou graag het aantal flipflops onder de 20-22 hebben, maar ik ben dus clueless hoe omdat ik in mijn inziens altijd zal moeten tellen tot 12 500 000 (de helft van een 25Mhz clock omdat ik enkel op de rising edge van de clock tel ).
Zoals ik al zei is de kans klein dat iemand mij hiermee kan helpen, maar ik wou toch eens proberen. Graag had ik het zelf gekund, maar ne mens moet ook weten wanneer hij om hulp moet vragen
.
Mvg
Yannick Wellens
Ik weet dat dit een long shot is want ik denk niet dat er veel mensen op dit forum zijn die weten wat vhdl is (ik kan me vergissen uiteraard
).Anyway, here goes:
Ik moet voor een soort eindwerkje een stopwatch maken in VHDL. Alles is zeer vlot gegaan en het is eigenlijk af, maar het probleem is dat de prof vroeg om het met zo weinig mogelijk flips flops mogelijk te maken.
Ik heb alles goed geoptimaliseerd gekregen behalve mijn clock divider (welke dus de meeste flip flops gebruikt, omdat hij hoge tellers heeft).
Ik ben al 2 weken aan het zoeken naar een betere manier voor deze clock divider.
Logisch moet hij zo in elkaar zitten:
Input is dus de main clock (25Mhz) en daaruit moet ik een 5Khz en 1hz clock krijgen
Code:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity clk_div is
port(
clk_default: in std_logic;
reset: in std_logic;
clkout_5Khz: out std_logic;
clkout_1Hz: out std_logic
);
end clk_div;
architecture main of clk_div is
signal internalclock: std_logic;
begin
process1:process(clk_default,reset)
variable cnt:integer range 0 to 2500;
begin
if reset='0' then internalclock <= '0';cnt:=0;
elsif (clk_default'event and clk_default='1')then
if cnt = 2500 then
internalclock<='1';
cnt:=0;
else
internalclock<='0';
cnt:=cnt+1;
end if;
end if;
clkout_5Khz<=internalclock;
end process;
process2:process(internalclock,reset)
variable cnt:integer range 0 to 5000;
begin
if reset='0' then clkout_1Hz<='0';cnt:=0;
elsif (internalclock'event and internalclock='1')then
if cnt = 5000 then
clkout_1Hz<='1';
else
clkout_1Hz<='0';
cnt:=cnt+1;
end if;
end if;
end process;
end main;
Met deze methode krijg ik na het synthetiseren:
Total logic cells required: 47
Total flipflops required: 27
Ik zou graag het aantal flipflops onder de 20-22 hebben, maar ik ben dus clueless hoe omdat ik in mijn inziens altijd zal moeten tellen tot 12 500 000 (de helft van een 25Mhz clock omdat ik enkel op de rising edge van de clock tel ).
Zoals ik al zei is de kans klein dat iemand mij hiermee kan helpen, maar ik wou toch eens proberen. Graag had ik het zelf gekund, maar ne mens moet ook weten wanneer hij om hulp moet vragen
.Mvg
Yannick Wellens
