Estoy ejecutando un código picoblaze simple donde estoy usando dos direcciones y enviando un estroboscopio alto en ambas direcciones, el código de ensamblaje no tiene bucle, por lo que técnicamente mi código debería ejecutarse SOLAMENTE una vez, pero la señal alta en las direcciones que Estoy usando viene continuamente. Utilicé un osciloscopio para comprobar la salida. Estoy publicando la lógica de pegamento y el código pico. Estoy usando una placa fpga Spartan3 Xc3s1000-4fg456.
¿Alguien aquí tiene alguna idea de lo que estoy haciendo mal aquí? Aquí está el código pico
;**************************************************************************************
; OUT Port definition
;**************************************************************************************
CONSTANT sx1, 16
CONSTANT sx2, 20
;**************************************************************************************
; Special Register usage
;***********************************************************************************
NAMEREG SE, TEMP1
NAMEREG SD, TEMP2
OUTPUT TEMP1, sx1
OUTPUT TEMP2, sx2
Y el código vhdl para la lógica del pegamento es
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity Glue_Logic is
PORT (
CLK :IN STD_LOGIC;
RESET :IN STD_LOGIC;
DATA_IN_P :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
PORT_ADDR :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
PORT_OUT1 :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
PORT_OUT2 :OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
end Glue_Logic;
architecture Behavioral of Glue_Logic is
signal port_out1_s :STD_LOGIC_VECTOR (7 downto 0);
signal port_out2_s :STD_LOGIC_VECTOR (7 downto 0);
begin
PORT_OUT1 <= port_out1_s;
PORT_OUT2 <= port_out2_s;
process(reset, clk)
begin
if (reset = '1') then
port_out1_s <= (others => '0');
port_out2_s <= (others => '0');
elsif (clk'event and clk = '1') then
case (port_addr) is
when x"16" =>
port_out2_s <= x"01";
when x"20" =>
port_out1_s <= x"01";
when others =>
port_out1_s <= (others => '0');
port_out2_s <= (others => '0');
end case;
end if;
end process;
end Behavioral;