63 lines
2.5 KiB
VHDL
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;
|