H
hlmwps
Guest
Unternehmen FreqMeter ist
Port (Reset: in std_logic;
CE: in std_logic;
bclk: in std_logic;
GCLK: in std_logic;
Start: in std_logic;
num: in Integer-Bereich von 10 bis 1000;
über: out std_logic;
Datenbus: out std_logic_vector (47 downto 0)
);
Ende FreqMeter;
architecture Behavioral of FreqMeter ist
Signal bz_count: integer;
Signal gc_count: integer Bereich von 0 bis 1000;
Signal bz_ena, ena: std_logic;
Signal clr: std_logic;
Signal tmp_start, tmp_over: std_logic;
Signal RESETN, resetd: std_logic;
beginnen
Datenbus <= conv_std_logic_vector (bz_count, 4
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kühl" border="0" />
;
Prozess (CE, start) beginnen
wenn CE = '0 'und start = '0' und dann
RESETN <= '0 ';
elsif CE = '0 'und rising_edge (Beginn), dann
RESETN <= '1 ';
end if;
end process;
Prozess (bclk)
beginnen
wenn rising_edge (bclk), dann
resetd <= RESETN;
end if;
end process;
clr <= RESETN und (nicht resetd);
über <= tmp_over;
Prozess (Reset, clr, start)
beginnen
wenn reset = '0 'oder CLR = '1' then
tmp_start <= '0 ';
elsif falling_edge (Beginn), dann
tmp_start <= '1 ';
end if;
end process;
Prozess (Reset, clr, tmp_over, ena, tmp_start)
beginnen
wenn reset = '0 'oder clr = '1' oder (tmp_over = "1" und ena = '0 ') then
bz_ena <= '0 ';
elsif rising_edge (tmp_start), dann
bz_ena <= '1 ';
end if;
end process;bzcounter: process (reset, bclk, clr, bz_ena, ena)
beginnen
wenn reset = '0 'oder CLR = '1' then
bz_count <= 0;
elsif rising_edge (bclk), dann
wenn bz_ena = "1" und ENA = '1 'then
bz_count <= bz_count 1;
end if;
end if;
end process;
gccounter: process (reset, GCLK, clr, bz_ena)
beginnen
wenn reset = '0 'oder CLR = '1' then
gc_count <= 0;
tmp_over <= '0 ';
ena <= '0 ';
elsif falling_edge (GCLK), dann
wenn bz_ena = '1 'then
gc_count <= gc_count 1;
wenn gc_count = num dann
ena <= '0 ';
gc_count <= num-1;
tmp_over <= '1 ';
sonst
ena <= '1 ';
tmp_over <= '0 ';
end if;
end if;
end if;
end process;
end Behavioral;Hinzugefügt nach 5 Minuten:Oben ist ein VHDL Beispiel über Frequenzzähler!
Ich Simulation mit Modelsim 6.0!Es kann sehr gut funktionieren und die Funktion ist gut!
Aber wenn ich sie herunterladen zu einem Xinlix CPLD XC95144XL, wird seine Funktion nicht gut!
Bitte helfen Sie mir zu finden, wo ist der Fehler!
Port (Reset: in std_logic;
CE: in std_logic;
bclk: in std_logic;
GCLK: in std_logic;
Start: in std_logic;
num: in Integer-Bereich von 10 bis 1000;
über: out std_logic;
Datenbus: out std_logic_vector (47 downto 0)
);
Ende FreqMeter;
architecture Behavioral of FreqMeter ist
Signal bz_count: integer;
Signal gc_count: integer Bereich von 0 bis 1000;
Signal bz_ena, ena: std_logic;
Signal clr: std_logic;
Signal tmp_start, tmp_over: std_logic;
Signal RESETN, resetd: std_logic;
beginnen
Datenbus <= conv_std_logic_vector (bz_count, 4
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kühl" border="0" />
;
Prozess (CE, start) beginnen
wenn CE = '0 'und start = '0' und dann
RESETN <= '0 ';
elsif CE = '0 'und rising_edge (Beginn), dann
RESETN <= '1 ';
end if;
end process;
Prozess (bclk)
beginnen
wenn rising_edge (bclk), dann
resetd <= RESETN;
end if;
end process;
clr <= RESETN und (nicht resetd);
über <= tmp_over;
Prozess (Reset, clr, start)
beginnen
wenn reset = '0 'oder CLR = '1' then
tmp_start <= '0 ';
elsif falling_edge (Beginn), dann
tmp_start <= '1 ';
end if;
end process;
Prozess (Reset, clr, tmp_over, ena, tmp_start)
beginnen
wenn reset = '0 'oder clr = '1' oder (tmp_over = "1" und ena = '0 ') then
bz_ena <= '0 ';
elsif rising_edge (tmp_start), dann
bz_ena <= '1 ';
end if;
end process;bzcounter: process (reset, bclk, clr, bz_ena, ena)
beginnen
wenn reset = '0 'oder CLR = '1' then
bz_count <= 0;
elsif rising_edge (bclk), dann
wenn bz_ena = "1" und ENA = '1 'then
bz_count <= bz_count 1;
end if;
end if;
end process;
gccounter: process (reset, GCLK, clr, bz_ena)
beginnen
wenn reset = '0 'oder CLR = '1' then
gc_count <= 0;
tmp_over <= '0 ';
ena <= '0 ';
elsif falling_edge (GCLK), dann
wenn bz_ena = '1 'then
gc_count <= gc_count 1;
wenn gc_count = num dann
ena <= '0 ';
gc_count <= num-1;
tmp_over <= '1 ';
sonst
ena <= '1 ';
tmp_over <= '0 ';
end if;
end if;
end if;
end process;
end Behavioral;Hinzugefügt nach 5 Minuten:Oben ist ein VHDL Beispiel über Frequenzzähler!
Ich Simulation mit Modelsim 6.0!Es kann sehr gut funktionieren und die Funktion ist gut!
Aber wenn ich sie herunterladen zu einem Xinlix CPLD XC95144XL, wird seine Funktion nicht gut!
Bitte helfen Sie mir zu finden, wo ist der Fehler!