URL
https://opencores.org/ocsvn/mkjpeg/mkjpeg/trunk
Subversion Repositories mkjpeg
Compare Revisions
- This comparison shows the changes necessary to convert path
/mkjpeg/trunk
- from Rev 54 to Rev 56
- ↔ Reverse comparison
Rev 54 → Rev 56
/tb/wave.do
124,43 → 124,38
add wave -noupdate -divider BUF_FIFO |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/clk |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/rst |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/img_size_x |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/img_size_y |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/img_size_x |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/img_size_y |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/sof |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/iram_wren |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/iram_wdata |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(10) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(9) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(8) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(7) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(6) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(5) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(4) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(3) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(2) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(1) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/block_lock(0) |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/fifo_almost_full |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/fdct_fifo_hf_full |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/fdct_block_cnt |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/fdct_fifo_rd |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/fdct_fifo_q |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/fdct_fifo_hf_full |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/pixel_cnt |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/line_cnt |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/line_cnt |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/ramq |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/ramd |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/ramwaddr_d1 |
add wave -noupdate -format Literal -height 74 -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/ramwaddr |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/ramwaddr |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/ramenw |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/ramraddr |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/write_ptr |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/read_ptr |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/ramraddr |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/pix_inblk_cnt |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/read_block_cnt |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/write_block_cnt |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/ramraddr_int |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/raddr_base_line |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/raddr_tmp |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/ramwaddr_d1 |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/line_lock |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/memwr_line_cnt |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/memwr_line_cnt |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/wr_line_idx |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/line_inblk_cnt |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/write_block_cnt |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/read_block_cnt |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/ramraddr_int |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_buf_fifo/memrd_offs_cnt |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/memrd_line |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_buf_fifo/rd_line_idx |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_buf_fifo/image_write_end |
add wave -noupdate -divider FDCT |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_fdct/clk |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_fdct/rst |
168,7 → 163,7
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_fdct/ready_pb |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_fdct/writing_en |
add wave -noupdate -format Literal -radix unsigned -expand /jpeg_tb/u_jpegenc/u_fdct/fdct_sm_settings |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/bf_block_cnt |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/cur_cmp_idx |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_fdct/bf_fifo_rd |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/bf_dval |
add wave -noupdate -format Literal -radix hexadecimal /jpeg_tb/u_jpegenc/u_fdct/bf_fifo_q |
196,11 → 191,13
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_fdct/odv1 |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/dcto1 |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/cmp_idx |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/cur_cmp_idx |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/rd_addr |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/input_rd_cnt |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_fdct/rd_en |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_fdct/rd_en_d1 |
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_fdct/eoi_fdct |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_fdct/x_pixel_cnt |
add wave -noupdate -format Literal -radix unsigned /jpeg_tb/u_jpegenc/u_fdct/y_line_cnt |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/rdaddr |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/wr_cnt |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_fdct/dbuf_data |
567,7 → 564,7
add wave -noupdate -format Logic /jpeg_tb/u_jpegenc/u_outmux/ram_wren |
add wave -noupdate -format Literal /jpeg_tb/u_jpegenc/u_outmux/ram_wraddr |
TreeUpdate [SetDefaultTree] |
WaveRestoreCursors {{Cursor 4} {15100525000 ps} 0} |
WaveRestoreCursors {{Cursor 4} {1221815000 ps} 0} |
configure wave -namecolwidth 150 |
configure wave -valuecolwidth 83 |
configure wave -justifyvalue left |
582,4 → 579,4
configure wave -timeline 0 |
configure wave -timelineunits ps |
update |
WaveRestoreZoom {3854654563 ps} {22956070813 ps} |
WaveRestoreZoom {0 ps} {6725160750 ps} |
/tb/vhdl/HostBFM.vhd
317,10 → 317,10
-- others => X"01" |
|
-- 75% |
--X"08", X"06", X"06", X"07", X"06", X"05", X"08", X"07", X"07", X"07", X"09", X"09", X"08", X"0A", X"0C", X"14", |
--X"0D", X"0C", X"0B", X"0B", X"0C", X"19", X"12", X"13", X"0F", X"14", X"1D", X"1A", X"1F", X"1E", X"1D", X"1A", |
--X"1C", X"1C", X"20", X"24", X"2E", X"27", X"20", X"22", X"2C", X"23", X"1C", X"1C", X"28", X"37", X"29", X"2C", |
--X"30", X"31", X"34", X"34", X"34", X"1F", X"27", X"39", X"3D", X"38", X"32", X"3C", X"2E", X"33", X"34", X"32" |
X"08", X"06", X"06", X"07", X"06", X"05", X"08", X"07", X"07", X"07", X"09", X"09", X"08", X"0A", X"0C", X"14", |
X"0D", X"0C", X"0B", X"0B", X"0C", X"19", X"12", X"13", X"0F", X"14", X"1D", X"1A", X"1F", X"1E", X"1D", X"1A", |
X"1C", X"1C", X"20", X"24", X"2E", X"27", X"20", X"22", X"2C", X"23", X"1C", X"1C", X"28", X"37", X"29", X"2C", |
X"30", X"31", X"34", X"34", X"34", X"1F", X"27", X"39", X"3D", X"38", X"32", X"3C", X"2E", X"33", X"34", X"32" |
|
-- 15 % |
--X"35", X"25", X"28", X"2F", |
341,37 → 341,37
--X"FF", X"FF", X"FF", X"FF" |
|
-- 50% |
X"10", X"0B", X"0C", X"0E", X"0C", X"0A", X"10", X"0E", |
X"0D", X"0E", X"12", X"11", X"10", X"13", X"18", X"28", |
X"1A", X"18", X"16", X"16", X"18", X"31", X"23", X"25", |
X"1D", X"28", X"3A", X"33", X"3D", X"3C", X"39", X"33", |
X"38", X"37", X"40", X"48", X"5C", X"4E", X"40", X"44", |
X"57", X"45", X"37", X"38", X"50", X"6D", X"51", X"57", |
X"5F", X"62", X"67", X"68", X"67", X"3E", X"4D", X"71", |
X"79", X"70", X"64", X"78", X"5C", X"65", X"67", X"63" |
--X"10", X"0B", X"0C", X"0E", X"0C", X"0A", X"10", X"0E", |
--X"0D", X"0E", X"12", X"11", X"10", X"13", X"18", X"28", |
--X"1A", X"18", X"16", X"16", X"18", X"31", X"23", X"25", |
--X"1D", X"28", X"3A", X"33", X"3D", X"3C", X"39", X"33", |
--X"38", X"37", X"40", X"48", X"5C", X"4E", X"40", X"44", |
--X"57", X"45", X"37", X"38", X"50", X"6D", X"51", X"57", |
--X"5F", X"62", X"67", X"68", X"67", X"3E", X"4D", X"71", |
--X"79", X"70", X"64", X"78", X"5C", X"65", X"67", X"63" |
); |
|
constant qrom_chr : ROMQ_TYPE := |
( |
-- 50% for chrominance |
X"11", X"12", X"12", X"18", X"15", X"18", X"2F", X"1A", |
X"1A", X"2F", X"63", X"42", X"38", X"42", X"63", X"63", |
X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63" |
--X"11", X"12", X"12", X"18", X"15", X"18", X"2F", X"1A", |
--X"1A", X"2F", X"63", X"42", X"38", X"42", X"63", X"63", |
--X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
--X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
--X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
--X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
--X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63", |
--X"63", X"63", X"63", X"63", X"63", X"63", X"63", X"63" |
|
-- 75% chrominance |
--X"09", X"09", X"09", X"0C", X"0B", X"0C", X"18", X"0D", |
--X"0D", X"18", X"32", X"21", X"1C", X"21", X"32", X"32", |
--X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
--X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
--X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
--X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
--X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
--X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32" |
X"09", X"09", X"09", X"0C", X"0B", X"0C", X"18", X"0D", |
X"0D", X"18", X"32", X"21", X"1C", X"21", X"32", X"32", |
X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32", |
X"32", X"32", X"32", X"32", X"32", X"32", X"32", X"32" |
|
--X"08", X"06", X"06", X"07", X"06", X"05", X"08", X"07", X"07", X"07", X"09", X"09", X"08", X"0A", X"0C", X"14", |
--X"0D", X"0C", X"0B", X"0B", X"0C", X"19", X"12", X"13", X"0F", X"14", X"1D", X"1A", X"1F", X"1E", X"1D", X"1A", |
/design/BufFifo/BUF_FIFO.vhd
70,28 → 70,45
------------------------------------------------------------------------------- |
architecture RTL of BUF_FIFO is |
|
|
constant C_NUM_LINES : integer := 8 + C_EXTRA_LINES; |
|
signal pixel_cnt : unsigned(15 downto 0); |
signal line_cnt : unsigned(15 downto 0); |
|
signal ramq : STD_LOGIC_VECTOR(C_PIXEL_BITS-1 downto 0); |
signal ramd : STD_LOGIC_VECTOR(C_PIXEL_BITS-1 downto 0); |
signal ramwaddr : unsigned(log2(C_MAX_LINE_WIDTH*8)-1 downto 0); |
signal ramwaddr : unsigned(log2(C_MAX_LINE_WIDTH*C_NUM_LINES)-1 downto 0); |
signal ramenw : STD_LOGIC; |
signal ramraddr : unsigned(log2(C_MAX_LINE_WIDTH*8)-1 downto 0); |
signal ramraddr : unsigned(log2(C_MAX_LINE_WIDTH*C_NUM_LINES)-1 downto 0); |
|
signal pix_inblk_cnt : unsigned(7 downto 0); |
signal line_inblk_cnt : unsigned(7 downto 0); |
signal pix_inblk_cnt : unsigned(2 downto 0); |
signal pix_inblk_cnt_d1 : unsigned(2 downto 0); |
signal line_inblk_cnt : unsigned(2 downto 0); |
|
signal read_block_cnt : unsigned(12 downto 0); |
signal read_block_cnt_d1 : unsigned(12 downto 0); |
signal write_block_cnt : unsigned(12 downto 0); |
|
signal ramraddr_int : unsigned(23 downto 0); |
signal raddr_base_line : unsigned(23 downto 0); |
signal ramraddr_int : unsigned(16+log2(C_NUM_LINES)-1 downto 0); |
signal raddr_base_line : unsigned(16+log2(C_NUM_LINES)-1 downto 0); |
signal raddr_tmp : unsigned(15 downto 0); |
signal ramwaddr_d1 : unsigned(log2(C_MAX_LINE_WIDTH*8)-1 downto 0); |
signal ramwaddr_d1 : unsigned(ramwaddr'range); |
|
signal block_lock : unsigned(C_MAX_LINE_WIDTH/8-1 downto 0); |
signal line_lock : unsigned(log2(C_NUM_LINES)-1 downto 0); |
|
signal memwr_line_cnt : unsigned(log2(C_NUM_LINES)-1 downto 0); |
|
signal memrd_offs_cnt : unsigned(log2(C_NUM_LINES)-1+1 downto 0); |
signal memrd_line : unsigned(log2(C_NUM_LINES)-1 downto 0); |
|
signal wr_line_idx : unsigned(15 downto 0); |
signal rd_line_idx : unsigned(15 downto 0); |
|
signal image_write_end : std_logic; |
|
|
|
------------------------------------------------------------------------------- |
-- Architecture: begin |
------------------------------------------------------------------------------- |
102,7 → 119,7
U_SUB_RAMZ : entity work.SUB_RAMZ |
generic map |
( |
RAMADDR_W => log2(C_MAX_LINE_WIDTH*8), |
RAMADDR_W => log2( C_MAX_LINE_WIDTH*C_NUM_LINES ), |
RAMDATA_W => C_PIXEL_BITS |
) |
port map |
136,25 → 153,34
p_pixel_cnt : process(CLK, RST) |
begin |
if RST = '1' then |
pixel_cnt <= (others => '0'); |
line_cnt <= (others => '0'); |
ramwaddr <= (others => '0'); |
ramwaddr_d1 <= (others => '0'); |
pixel_cnt <= (others => '0'); |
memwr_line_cnt <= (others => '0'); |
wr_line_idx <= (others => '0'); |
ramwaddr <= (others => '0'); |
ramwaddr_d1 <= (others => '0'); |
image_write_end <= '0'; |
elsif CLK'event and CLK = '1' then |
ramwaddr_d1 <= ramwaddr; |
|
if iram_wren = '1' then |
-- pixel index in line |
-- end of line |
if pixel_cnt = unsigned(img_size_x)-1 then |
pixel_cnt <= (others => '0'); |
-- line counter |
line_cnt <= line_cnt + 1; |
-- RAM is only 8 lines buffer |
if line_cnt(2 downto 0) = 8-1 then |
ramwaddr <= (others => '0'); |
else |
ramwaddr <= ramwaddr + 1; |
-- absolute write line index |
wr_line_idx <= wr_line_idx + 1; |
|
if wr_line_idx = unsigned(img_size_y)-1 then |
image_write_end <= '1'; |
end if; |
|
-- memory line index |
if memwr_line_cnt = C_NUM_LINES-1 then |
memwr_line_cnt <= (others => '0'); |
ramwaddr <= (others => '0'); |
else |
memwr_line_cnt <= memwr_line_cnt + 1; |
ramwaddr <= ramwaddr + 1; |
end if; |
else |
pixel_cnt <= pixel_cnt + 1; |
ramwaddr <= ramwaddr + 1; |
162,35 → 188,14
end if; |
|
if sof = '1' then |
pixel_cnt <= (others => '0'); |
ramwaddr <= (others => '0'); |
pixel_cnt <= (others => '0'); |
ramwaddr <= (others => '0'); |
memwr_line_cnt <= (others => '0'); |
wr_line_idx <= (others => '0'); |
image_write_end <= '0'; |
end if; |
end if; |
end process; |
|
write_block_cnt <= pixel_cnt(15 downto 3); |
|
------------------------------------------------------------------- |
-- lock written blocks, unlock after read |
------------------------------------------------------------------- |
p_mux6 : process(CLK, RST) |
begin |
if RST = '1' then |
block_lock <= (others => '0'); |
elsif CLK'event and CLK = '1' then |
if pixel_cnt(2 downto 0) = 8-1 then |
if line_cnt(2 downto 0) = 8-1 then |
block_lock(to_integer(write_block_cnt)) <= '1'; |
end if; |
end if; |
|
if pix_inblk_cnt = 8-1 then |
if line_inblk_cnt = 8-1 then |
block_lock(to_integer(read_block_cnt)) <= '0'; |
end if; |
end if; |
end if; |
end process; |
|
------------------------------------------------------------------- |
-- FIFO half full / almost full flag generation |
202,19 → 207,13
fifo_almost_full <= '0'; |
elsif CLK'event and CLK = '1' then |
|
if block_lock(to_integer(read_block_cnt)) = '1' then |
if rd_line_idx + 8 <= wr_line_idx then |
fdct_fifo_hf_full <= '1'; |
else |
fdct_fifo_hf_full <= '0'; |
end if; |
|
if write_block_cnt = unsigned(img_size_x(15 downto 3))-1 then |
if block_lock(0) = '1' then |
fifo_almost_full <= '1'; |
else |
fifo_almost_full <= '0'; |
end if; |
elsif block_lock(to_integer(write_block_cnt+1)) = '1' then |
if wr_line_idx > rd_line_idx + C_NUM_LINES-1 then |
fifo_almost_full <= '1'; |
else |
fifo_almost_full <= '0'; |
229,17 → 228,41
p_mux5 : process(CLK, RST) |
begin |
if RST = '1' then |
memrd_offs_cnt <= (others => '0'); |
read_block_cnt <= (others => '0'); |
pix_inblk_cnt <= (others => '0'); |
line_inblk_cnt <= (others => '0'); |
rd_line_idx <= (others => '0'); |
pix_inblk_cnt_d1 <= (others => '0'); |
read_block_cnt_d1 <= (others => '0'); |
elsif CLK'event and CLK = '1' then |
pix_inblk_cnt_d1 <= pix_inblk_cnt; |
read_block_cnt_d1 <= read_block_cnt; |
|
-- BUF FIFO read |
if fdct_fifo_rd = '1' then |
-- last pixel in block |
if pix_inblk_cnt = 8-1 then |
pix_inblk_cnt <= (others => '0'); |
|
-- last block in line |
--if read_block_cnt = unsigned(img_size_x(15 downto 3))-1 then |
-- rd_line_idx <= rd_line_idx + 1; |
--end if; |
|
-- last line in 8 |
if line_inblk_cnt = 8-1 then |
line_inblk_cnt <= (others => '0'); |
|
-- last block in last line |
if read_block_cnt = unsigned(img_size_x(15 downto 3))-1 then |
read_block_cnt <= (others => '0'); |
rd_line_idx <= rd_line_idx + 8; |
if memrd_offs_cnt + 8 > C_NUM_LINES-1 then |
memrd_offs_cnt <= memrd_offs_cnt + 8 - C_NUM_LINES; |
else |
memrd_offs_cnt <= memrd_offs_cnt + 8; |
end if; |
else |
read_block_cnt <= read_block_cnt + 1; |
end if; |
246,15 → 269,25
else |
line_inblk_cnt <= line_inblk_cnt + 1; |
end if; |
|
else |
pix_inblk_cnt <= pix_inblk_cnt + 1; |
end if; |
end if; |
|
if memrd_offs_cnt + (line_inblk_cnt) > C_NUM_LINES-1 then |
memrd_line <= memrd_offs_cnt(memrd_line'range) + (line_inblk_cnt) - (C_NUM_LINES); |
else |
memrd_line <= memrd_offs_cnt(memrd_line'range) + (line_inblk_cnt); |
end if; |
|
if sof = '1' then |
memrd_line <= (others => '0'); |
memrd_offs_cnt <= (others => '0'); |
read_block_cnt <= (others => '0'); |
pix_inblk_cnt <= (others => '0'); |
line_inblk_cnt <= (others => '0'); |
rd_line_idx <= (others => '0'); |
end if; |
|
end if; |
277,8 → 310,8
if RST = '1' then |
ramraddr_int <= (others => '0'); |
elsif CLK'event and CLK = '1' then |
raddr_base_line <= line_inblk_cnt * unsigned(img_size_x); |
raddr_tmp <= (read_block_cnt & "000") + pix_inblk_cnt; |
raddr_base_line <= (memrd_line) * unsigned(img_size_x); |
raddr_tmp <= (read_block_cnt_d1 & "000") + pix_inblk_cnt_d1; |
|
ramraddr_int <= raddr_tmp + raddr_base_line; |
end if; |
/design/mdct/FDCT.vhd
103,6 → 103,7
signal bf_dval : std_logic; |
signal bf_dval_m1 : std_logic; |
signal bf_dval_m2 : std_logic; |
signal bf_dval_m3 : std_logic; |
signal wr_cnt : unsigned(5 downto 0); |
signal dbuf_data : std_logic_vector(11 downto 0); |
signal dbuf_q : std_logic_vector(11 downto 0); |
259,9 → 260,11
cur_cmp_idx_d9 <= cur_cmp_idx_d8; |
start_int <= '0'; |
|
bf_dval_m2 <= bf_fifo_rd_s; |
bf_dval_m3 <= bf_fifo_rd_s; |
bf_dval_m2 <= bf_dval_m3; |
bf_dval_m1 <= bf_dval_m2; |
bf_dval <= bf_dval_m1; |
|
fram1_rd_d <= fram1_rd_d(fram1_rd_d'length-2 downto 0) & fram1_rd; |
|
-- SOF or internal self-start |
305,7 → 308,8
fram1_rd <= '0'; |
-- stall reading from input FIFO and writing to output FIFO |
-- when output FIFO is almost full |
if rd_en = '1' and unsigned(fifo1_count) < 256-64 then |
if rd_en = '1' and unsigned(fifo1_count) < 256-64 and |
(bf_fifo_hf_full = '1' or cur_cmp_idx /= 0) then |
-- read request goes to BUF_FIFO only for component 0. |
if cur_cmp_idx = 0 then |
bf_fifo_rd_s <= '1'; |
/design/common/JPEG_PKG.vhd
34,6 → 34,12
-- otherwise some onchip RAM will be wasted and never used |
constant C_MAX_LINE_WIDTH : integer := 1280; |
|
-- memory/performance tradeoff |
-- 8 extra lines highest performance |
-- 0 extra lines lowest area |
constant C_EXTRA_LINES : integer := 8; -- from 0 to 8 |
|
|
-- 24 bit format RGB 888 bits |
-- 16 bit format RGB 565 bits |
constant C_PIXEL_BITS : integer := 24; |