Ihr unmarkierten Prozess nur count_m für vier bestimmte Werte von count_m erhöht wird, und count_m = 1 ist nicht einer von ihnen.
Versuchen:
UNLABELLED_PROCESS:
process (clk_mux, reset)
begin
if (reset = '0') then
if rising_edge(clk_mux) then
count_m <= count_m + 1;
if count_m = 0 then -- 0
MUX_0 <= '1';
-- count_m <= count_m + 1;
elsif count_m = 29 then
MUX_0 <= '0';
count_m <= count_m + 1;
elsif count_m = 57 then
MUX_0 <= '1';
-- count_m <= count_m + 1;
elsif count_m = 86 then
MUX_0 <= '0';
-- count_m <= count_m + 1;
elsif count_m = 115 then
count_m <= (others => '0');
end if; -- end count_m
end if; -- end clock
end if; -- end reset
end process;
Und was tut, ist Schritt count_m jedes clk_mux und wenn der Wert 115 ordnet sie alle ‚0en.
Und das gibt so etwas wie:
wenn ich Ihre Taktperiode Arithmetik richtig verstanden habe. Beachten Sie, dass die Zuweisung von count_m + 1 zu count_m von der if-Anweisung für count_m = 115 überschrieben wird. Sie können auch sehen, dass MUX_0 ein Flipflop ist und seine Ausgabe nach der nächsten steigenden Flanke von clk_mux für einen count_m-Wert ändert, der eine Änderung angibt.
Hilfe zum Debuggen sollte dem antwortenden Leser die Möglichkeit geben, einen spezifischen Fehler durch Liefern eines Minimal, Complete, and Verifiable example neu zu erstellen.
In diesem Fall war es Sache eines zweiten Prozesses für clk_mux, vier Signal Erklärungen mit den notwendigen Anfangswerte alle in einer Einheit und Architektur Paar (jede Reset-Aktion fehlt):
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity no_mcve is
end entity;
-- dcm_clk PORT MAP(
-- CLKIN1_IN => clk,
-- RST_IN => reset,
-- CLKOUT0_OUT => clk0_fast,
-- CLKOUT1_OUT => clk0_dac,
-- CLKOUT2_OUT => clk90_fast, --13.33MHz ; div =60
-- CLKOUT3_OUT => clk_mux --26.67MHz ; div =30
--);
architecture foo of no_mcve is
signal count_m: unsigned (9 downto 0) := (others => '0');
signal clk_mux: std_logic := '0'; -- clock
signal mux_0: std_logic := '0';
signal reset: std_logic := '0';
begin
UNLABELLED_PROCESS:
process (clk_mux, reset)
begin
if (reset = '0') then
if rising_edge(clk_mux) then
count_m <= count_m + 1;
if count_m = 0 then -- 0
MUX_0 <= '1';
-- count_m <= count_m + 1;
elsif count_m = 29 then
MUX_0 <= '0';
count_m <= count_m + 1;
elsif count_m = 57 then
MUX_0 <= '1';
-- count_m <= count_m + 1;
elsif count_m = 86 then
MUX_0 <= '0';
-- count_m <= count_m + 1;
elsif count_m = 115 then
count_m <= (others => '0');
end if; -- end count_m
end if; -- end clock
end if; -- end reset
end process;
CLOCK:
process
begin
wait for 19.25 ns;
clk_mux <= not clk_mux;
if now > 7.3 us then
wait;
end if;
end process;
end architecture;
Hallo. Vielen Dank für Ihre Antwort. Ich kann den Code arbeiten lassen. Ich habe es versäumt, dies früher zu sehen, da die Lösung so einfach war. Außerdem werde ich sicherstellen, dass ich in Zukunft einen Arbeitscode posten werde. – CanisMajoris