PROCESS(CLK) --同步
BEGIN
IF CLK' EVENT AND CLK='1' THEN
IF BUFY1="00000000000000" THEN
IF REST='1' THEN
BUFY1<="00000000000000";
ELSE
BUFY1<="00000011001000"; --200
XAXA2<=‘0’;
END IF;
ELSE
BUFY1<=BUFY1-1;
XAXA2<=NOT XAXA2;
END IF;
END IF;
END PROCESS;
entity pulse is
Port (reset: in std_logic;
clk: in std_logic;
bufy1ut std_logic_vector(0 to 13);
outt: out std_logic );
end pulse;
architecture Behavioral of pulse is
signal regoutt: std_logic;
signal bufferr:std_logic_vector(13 downto 0);
begin
PROCESS(clk,reset)
BEGIN
if reset='1' then
bufferr<="00000011001000";
regoutt<='0';
elsif clk' event and clk='1'then
if(bufferr>"00000000000000")then
bufferr<=bufferr-'1';
regoutt<=not regoutt;
end if;
end if;
END PROCESS;
outt<=regoutt;
bufy1<=bufferr;
end Behavioral;
你看这样行么?????大致写了一下,,而且我也一直没用vhdl了,,,
PROCESS(clk,reset)
BEGIN
if reset='1' then
bufferr<="00000011001000";
regoutt<='0';
elsif clk' event and clk='1'then
if(bufferr>"00000000000000")then
bufferr<=bufferr-'1';
regoutt<=not regoutt;
end if;
end if;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我必须等到bufferr=0的时候才对bufferr赋值。才能保证每次都只有100个脉冲输出。
并且reset是随机的。
PROCESS(clk,reset)
BEGIN
IF bufferr="000000000000" THEN
if reset='1' then
bufferr<="00000011001000";
regoutt<='0';
END IF;
elsif clk' event and clk='1'then
if(bufferr>"00000000000000")then
bufferr<=bufferr-'1';
regoutt<=not regoutt;
end if;
end if;
将包括同步复位在内的所有逻辑都放到if clk' event and clk='1'then下去,就不会有任何问题了
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PROCESS(CLK) --同步
BEGIN
IF CLK' EVENT AND CLK='1' THEN
IF BUFY1="00000000000000" THEN
IF REST='1' THEN
BUFY1<="00000000000000";
ELSE
BUFY1<="00000011001000"; --200
END IF;
ELSE
BUFY1<=BUFY1-1;
XAXA2<=NOT XAXA2;
END IF;
END IF;
END PROCESS;