parent
a9a1797236
commit
498089d468
1 changed files with 16 additions and 4 deletions
|
@ -29,6 +29,8 @@ architecture a of splink is
|
||||||
constant BITS_PER_LED: natural := 24;
|
constant BITS_PER_LED: natural := 24;
|
||||||
|
|
||||||
signal led_addr : std_logic_vector(7 downto 0);
|
signal led_addr : std_logic_vector(7 downto 0);
|
||||||
|
signal led_data_a : std_logic_vector(BITS_PER_LED * NUM_STRANDS - 1 downto 0);
|
||||||
|
signal led_data_b : std_logic_vector(BITS_PER_LED * NUM_STRANDS - 1 downto 0);
|
||||||
signal led_data : std_logic_vector(BITS_PER_LED * NUM_STRANDS - 1 downto 0);
|
signal led_data : std_logic_vector(BITS_PER_LED * NUM_STRANDS - 1 downto 0);
|
||||||
signal led_colors : colors_vector(NUM_STRANDS-1 downto 0);
|
signal led_colors : colors_vector(NUM_STRANDS-1 downto 0);
|
||||||
|
|
||||||
|
@ -94,17 +96,23 @@ begin
|
||||||
end loop;
|
end loop;
|
||||||
end process;
|
end process;
|
||||||
|
|
||||||
|
-- memory inference help
|
||||||
|
with output_bank select led_data <=
|
||||||
|
led_data_a when BANK_A,
|
||||||
|
led_data_b when BANK_B;
|
||||||
|
|
||||||
fsm: process(clk)
|
fsm: process(clk)
|
||||||
type strand_buffer_t is array(0 to MAX_STRAND_LEN-1) of std_logic_vector(BITS_PER_LED * NUM_STRANDS - 1 downto 0);
|
type strand_buffer_t is array(0 to MAX_STRAND_LEN-1) of std_logic_vector(BITS_PER_LED * NUM_STRANDS - 1 downto 0);
|
||||||
type strand_banks_t is array(bank_t) of strand_buffer_t;
|
|
||||||
|
|
||||||
variable strand_banks : strand_banks_t;
|
variable strand_buffer_a : strand_buffer_t;
|
||||||
|
variable strand_buffer_b : strand_buffer_t;
|
||||||
|
|
||||||
variable received_strands : std_logic_vector(NUM_STRANDS-1 downto 0);
|
variable received_strands : std_logic_vector(NUM_STRANDS-1 downto 0);
|
||||||
variable input_bank : bank_t;
|
variable input_bank : bank_t;
|
||||||
begin
|
begin
|
||||||
if rising_edge(clk) then
|
if rising_edge(clk) then
|
||||||
led_data <= strand_banks(output_bank)(to_integer(unsigned(led_addr)));
|
led_data_a <= strand_buffer_a(to_integer(unsigned(led_addr)));
|
||||||
|
led_data_b <= strand_buffer_b(to_integer(unsigned(led_addr)));
|
||||||
|
|
||||||
if (and received_strands) and sender_done then
|
if (and received_strands) and sender_done then
|
||||||
output_bank <= input_bank;
|
output_bank <= input_bank;
|
||||||
|
@ -160,7 +168,11 @@ begin
|
||||||
receive_state <= DATA;
|
receive_state <= DATA;
|
||||||
|
|
||||||
when DATA =>
|
when DATA =>
|
||||||
strand_banks(input_bank)(pixels_received)((active_strand+1) * BITS_PER_LED - 1 downto active_strand * BITS_PER_LED) := udp_data(23 downto 0);
|
if input_bank = BANK_A then
|
||||||
|
strand_buffer_a(pixels_received)((active_strand+1) * BITS_PER_LED - 1 downto active_strand * BITS_PER_LED) := udp_data(23 downto 0);
|
||||||
|
else
|
||||||
|
strand_buffer_b(pixels_received)((active_strand+1) * BITS_PER_LED - 1 downto active_strand * BITS_PER_LED) := udp_data(23 downto 0);
|
||||||
|
end if;
|
||||||
|
|
||||||
if pixels_received /= num_pixels - 1 then
|
if pixels_received /= num_pixels - 1 then
|
||||||
pixels_received <= pixels_received + 1;
|
pixels_received <= pixels_received + 1;
|
||||||
|
|
Loading…
Reference in a new issue