Files
es-praktikum/Milestone6/Codefragmente-3x3-Filter/Filter-Kern-Fragment.vhd
T
2024-12-09 14:48:49 +01:00

63 lines
2.5 KiB
VHDL

S_AXIS_TREADY <= M_AXIS_TREADY or (not m_valid_sig1) or (not m_valid_sig2);
-----------------------
-- Filter Kernel
-----------------------
process
variable data_11 : signed (wPixelSigned-1 downto 0);
variable data_12 : signed (wPixelSigned-1 downto 0);
variable data_13 : signed (wPixelSigned-1 downto 0);
variable data_21 : signed (wPixelSigned-1 downto 0);
variable data_22 : signed (wPixelSigned-1 downto 0);
variable data_23 : signed (wPixelSigned-1 downto 0);
variable data_31 : signed (wPixelSigned-1 downto 0);
variable data_32 : signed (wPixelSigned-1 downto 0);
variable data_33 : signed (wPixelSigned-1 downto 0);
variable filterResult : signed (wFilterRes-1 downto 0);
begin
wait until rising_edge (ACLK);
if ARESETN = '0' then
m_valid_sig1 <= '0';
m_valid_sig2 <= '0';
else
if M_AXIS_TREADY = '1' or m_valid_sig1='0' then
data_11 := data_12;
data_12 := data_13;
data_13 := signed("0"&S_AXIS_TDATA(wPixel*3-1 downto wPixel*2));
data_21 := data_22;
data_22 := data_23;
data_23 := signed("0"&S_AXIS_TDATA(wPixel*2-1 downto wPixel*1));
data_31 := data_32;
data_32 := data_33;
data_33 := signed("0"&S_AXIS_TDATA(wPixel*1-1 downto wPixel*0));
row1Result <= resize(data_11*coeff_11,wRowProd) + resize(data_12*coeff_12,wRowProd) + resize(data_13*coeff_13,wRowProd);
row2Result <= ;
row3Result <= ;
m_last_sig1 <= S_AXIS_TLAST;
m_user_sig1 <= S_AXIS_TUSER(1);
m_valid_sig1 <= S_AXIS_TVALID;
end if;
if M_AXIS_TREADY = '1' or m_valid_sig2='0' then
filterResult := resize(row1Result,wFilterRes)+resize()+resize();
filterResult := shift_right(filterResult, to_integer());
if (filterResult < 0) then
filterResult := to_signed(0,wFilterRes);
elsif (filterResult > 255) then
filterResult := to_signed(255,wFilterRes);
end if;
M_AXIS_TDATA <= std_logic_vector(filterResult(7 downto 0));
M_AXIS_TVALID <= m_valid_sig1;
M_AXIS_TLAST <= m_last_sig1;
M_AXIS_TUSER <= m_user_sig1;
m_valid_sig2 <= m_valid_sig1;
end if;
end if;
end process;