URL
https://opencores.org/ocsvn/qaz_libs/qaz_libs/trunk
Subversion Repositories qaz_libs
Compare Revisions
- This comparison shows the changes necessary to convert path
/qaz_libs/trunk
- from Rev 28 to Rev 27
- ↔ Reverse comparison
Rev 28 → Rev 27
/FIFOs/sim/libs/sync_fifo_verilog/tiny_fifo.f
File deleted
/FIFOs/sim/tests/tiny_async_fifo/wave.do
File deleted
/FIFOs/sim/tests/tiny_sync_fifo/wave.do
File deleted
/FIFOs/sim/tests/tiny_sync_fifo/init_test.do
15,7 → 15,7
|
make_lib work 1 |
|
sim_compile_all sync_fifo |
sim_compile_all FPGA |
sim_compile_all sim |
|
# simulation $root |
/FIFOs/sim/tests/CummingsSNUG2002SJ_FIFO1/wave.do
File deleted
/FIFOs/src/tiny_async_fifo.sv
1,29 → 1,5
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2015 Authors and OPENCORES.ORG //// |
//// //// |
//// This source file may be used and distributed without //// |
//// restriction provided that this copyright statement is not //// |
//// removed from the file and that any derivative work contains //// |
//// the original copyright notice and the associated disclaimer. //// |
//// //// |
//// This source file is free software; you can redistribute it //// |
//// and/or modify it under the terms of the GNU Lesser General //// |
//// Public License as published by the Free Software Foundation; //// |
//// either version 2.1 of the License, or (at your option) any //// |
//// later version. //// |
//// //// |
//// This source is distributed in the hope that it will be //// |
//// useful, but WITHOUT ANY WARRANTY; without even the implied //// |
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// |
//// PURPOSE. See the GNU Lesser General Public License for more //// |
//// details. //// |
//// //// |
//// You should have received a copy of the GNU Lesser General //// |
//// Public License along with this source; if not, download it //// |
//// from http://www.opencores.org/lgpl.shtml //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
// -------------------------------------------------------------------- |
// |
|
|
module |
/FIFOs/src/tiny_sync_fifo.sv
1,36 → 1,9
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2015 Authors and OPENCORES.ORG //// |
//// //// |
//// This source file may be used and distributed without //// |
//// restriction provided that this copyright statement is not //// |
//// removed from the file and that any derivative work contains //// |
//// the original copyright notice and the associated disclaimer. //// |
//// //// |
//// This source file is free software; you can redistribute it //// |
//// and/or modify it under the terms of the GNU Lesser General //// |
//// Public License as published by the Free Software Foundation; //// |
//// either version 2.1 of the License, or (at your option) any //// |
//// later version. //// |
//// //// |
//// This source is distributed in the hope that it will be //// |
//// useful, but WITHOUT ANY WARRANTY; without even the implied //// |
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// |
//// PURPOSE. See the GNU Lesser General Public License for more //// |
//// details. //// |
//// //// |
//// You should have received a copy of the GNU Lesser General //// |
//// Public License along with this source; if not, download it //// |
//// from http://www.opencores.org/lgpl.shtml //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
// -------------------------------------------------------------------- |
// |
|
|
module |
tiny_sync_fifo |
#( |
parameter W = 8 |
) |
( |
fifo_write_if.fifo source, |
fifo_read_if.fifo sink |
38,10 → 11,11
|
// -------------------------------------------------------------------- |
// |
localparam W = source.W; |
reg empty_r; |
reg full_r; |
wire writing = source.wr_en & (sink.rd_en | ~full_r); |
wire reading = sink.rd_en & ~empty_r; |
wire writing = source.wr_en && (sink.rd_en || ~full_r); |
wire reading = sink.rd_en && ~empty_r; |
|
|
// -------------------------------------------------------------------- |
53,7 → 27,7
if(source.reset) |
next_rd_ptr_r = 0; |
else if(reading) |
next_rd_ptr_r = ~rd_ptr_r; |
next_rd_ptr_r = ~next_rd_ptr_r; |
else |
next_rd_ptr_r = rd_ptr_r; |
|
69,8 → 43,8
always_comb |
if (source.reset) |
next_wr_ptr_r = 0; |
else if(writing) |
next_wr_ptr_r = ~wr_ptr_r; |
else if (writing) |
next_wr_ptr_r = ~next_wr_ptr_r; |
else |
next_wr_ptr_r = wr_ptr_r; |
|
83,9 → 57,9
always_ff @(posedge source.clk) |
if (source.reset) |
empty_r <= 1; |
else if (reading & (next_wr_ptr_r == next_rd_ptr_r) & ~full_r) |
else if (reading && next_wr_ptr_r == next_rd_ptr_r && ~full_r) |
empty_r <= 1; |
else if (writing & ~reading) |
else if (writing && ~reading) |
empty_r <= 0; |
else |
empty_r <= empty_r; |
96,9 → 70,9
always_ff @(posedge source.clk) |
if (source.reset) |
full_r <= 0; |
else if (writing & (next_wr_ptr_r == next_rd_ptr_r)) |
else if (writing && next_wr_ptr_r == next_rd_ptr_r) |
full_r <= 1; |
else if (reading & ~writing) |
else if (reading && ~writing) |
full_r <= 0; |
|
|
106,12 → 80,12
// |
reg [W - 1:0] data_0_r; |
reg [W - 1:0] data_1_r; |
wire [W - 1:0] wr_data_mux = rd_ptr_r ? data_1_r : data_0_r; |
wire [W - 1:0] wr_data_mux = rd_ptr_r[0] ? data_1_r : data_0_r; |
assign sink.rd_data = wr_data_mux; |
|
always_ff @(posedge source.clk) |
if (writing) |
if(wr_ptr_r) |
if(wr_ptr_r[0]) |
data_1_r <= source.wr_data; |
else |
data_0_r <= source.wr_data; |
/FIFOs/src/sync_fifo.v
1,29 → 1,6
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2015 Authors and OPENCORES.ORG //// |
//// //// |
//// This source file may be used and distributed without //// |
//// restriction provided that this copyright statement is not //// |
//// removed from the file and that any derivative work contains //// |
//// the original copyright notice and the associated disclaimer. //// |
//// //// |
//// This source file is free software; you can redistribute it //// |
//// and/or modify it under the terms of the GNU Lesser General //// |
//// Public License as published by the Free Software Foundation; //// |
//// either version 2.1 of the License, or (at your option) any //// |
//// later version. //// |
//// //// |
//// This source is distributed in the hope that it will be //// |
//// useful, but WITHOUT ANY WARRANTY; without even the implied //// |
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// |
//// PURPOSE. See the GNU Lesser General Public License for more //// |
//// details. //// |
//// //// |
//// You should have received a copy of the GNU Lesser General //// |
//// Public License along with this source; if not, download it //// |
//// from http://www.opencores.org/lgpl.shtml //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
// -------------------------------------------------------------------- |
// |
// -------------------------------------------------------------------- |
|
|
module |
/axis_video_frame_bfm_class/sim/src/tb_1_tile_4_outputs.sv
41,15 → 41,63
|
// -------------------------------------------------------------------- |
// |
import avf_1_tile_4_outputs_class_pkg::*; |
avf_1_tile_4_outputs_class a_h; |
|
localparam TILES = 1; |
localparam WIDTH = 32; // tile width |
localparam HEIGHT = 16; // tile height |
localparam OUTPUTS_PER_TILE = 4; // outputs per tile |
localparam BYTES_PER_PIXEL = 2; |
localparam BITS_PER_PIXEL = 16; |
localparam VERTICAL_BLANKING = 20; |
|
|
// -------------------------------------------------------------------- |
// |
localparam AVF_N = BYTES_PER_PIXEL * OUTPUTS_PER_TILE; // data bus width in bytes |
localparam AVF_U = 1; // TUSER width |
|
axis_if #(.N(AVF_N), .U(AVF_U)) avf_axis[TILES](.*); |
|
|
|
// -------------------------------------------------------------------- |
// |
import axis_video_frame_bfm_pkg::*; |
import avf_agent_class_pkg::*; |
|
|
// -------------------------------------------------------------------- |
// |
avf_agent_config_class avf_agent_config_h; |
avf_agent_class #(BYTES_PER_PIXEL, OUTPUTS_PER_TILE) avf_agent_h; |
|
initial |
a_h = new(.avf_axis_in_if(avf_axis), .avf_axis_out_if(avf_axis)); |
begin |
|
avf_agent_config_h = new |
( |
.width(WIDTH), |
.height(HEIGHT), |
.bytes_per_pixel(BYTES_PER_PIXEL), |
.bits_per_pixel(BITS_PER_PIXEL), |
.tiles(TILES), |
.outputs_per_tile(OUTPUTS_PER_TILE), |
.name("AVF_"), |
.vertical_blanking(VERTICAL_BLANKING) |
); |
|
avf_agent_config_h.tile[0].direction = RIGHT_DOWN; |
|
avf_agent_h = new |
( |
.avf_agent_config(avf_agent_config_h), |
.avf_axis_in_if(avf_axis), |
.avf_axis_out_if(avf_axis) |
); |
|
avf_agent_h.init(); |
|
end |
|
|
// -------------------------------------------------------------------- |
// sim models |
// | | | | | | | | | | | | | | | | | |
/axis_video_frame_bfm_class/sim/src/tb_4_tile_1_outputs.sv
41,15 → 41,66
|
// -------------------------------------------------------------------- |
// |
import avf_4_tile_1_outputs_class_pkg::*; |
avf_4_tile_1_outputs_class a_h; |
|
localparam TILES = 4; |
localparam WIDTH = 32; // tile width |
localparam HEIGHT = 16; // tile height |
localparam OUTPUTS_PER_TILE = 1; // outputs per tile |
localparam BYTES_PER_PIXEL = 2; |
localparam BITS_PER_PIXEL = 16; |
localparam VERTICAL_BLANKING = 20; |
|
|
// -------------------------------------------------------------------- |
// |
localparam AVF_N = BYTES_PER_PIXEL * OUTPUTS_PER_TILE; // data bus width in bytes |
localparam AVF_U = 1; // TUSER width |
|
axis_if #(.N(AVF_N), .U(AVF_U)) avf_axis[TILES](.*); |
|
|
|
// -------------------------------------------------------------------- |
// |
import axis_video_frame_bfm_pkg::*; |
import avf_agent_class_pkg::*; |
|
|
// -------------------------------------------------------------------- |
// |
avf_agent_config_class avf_agent_config_h; |
avf_agent_class #(BYTES_PER_PIXEL, OUTPUTS_PER_TILE) avf_agent_h; |
|
initial |
a_h = new(.avf_axis_in_if(avf_axis), .avf_axis_out_if(avf_axis)); |
begin |
|
avf_agent_config_h = new |
( |
.width(WIDTH), |
.height(HEIGHT), |
.bytes_per_pixel(BYTES_PER_PIXEL), |
.bits_per_pixel(BITS_PER_PIXEL), |
.tiles(TILES), |
.outputs_per_tile(OUTPUTS_PER_TILE), |
.name("AVF_"), |
.vertical_blanking(VERTICAL_BLANKING) |
); |
|
avf_agent_config_h.tile[0].direction = RIGHT_DOWN; |
avf_agent_config_h.tile[1].direction = RIGHT_UP; |
avf_agent_config_h.tile[2].direction = LEFT_DOWN; |
avf_agent_config_h.tile[3].direction = LEFT_UP; |
|
avf_agent_h = new |
( |
.avf_agent_config(avf_agent_config_h), |
.avf_axis_in_if(avf_axis), |
.avf_axis_out_if(avf_axis) |
); |
|
avf_agent_h.init(); |
|
end |
|
|
// -------------------------------------------------------------------- |
// sim models |
// | | | | | | | | | | | | | | | | | |
/axis_video_frame_bfm_class/sim/tests/tb_1_tile_4_outputs/init_test.do
19,7 → 19,6
sim_compile_all sim |
|
# simulation $root |
vlog $env(PROJECT_DIR)/sim/src/avf_1_tile_4_outputs_class_pkg.sv |
vlog $env(PROJECT_DIR)/sim/src/tb_1_tile_4_outputs.sv |
|
# compile test last |
/axis_video_frame_bfm_class/sim/tests/tb_1_tile_4_outputs/wave.do
0,0 → 1,31
onerror {resume} |
quietly WaveActivateNextPane {} 0 |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/aclk} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/aresetn} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tvalid} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tready} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tdata} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tlast} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tuser} |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -divider {New Divider} |
TreeUpdate [SetDefaultTree] |
WaveRestoreCursors {{Cursor 1} {0 ps} 0} |
quietly wave cursor active 0 |
configure wave -namecolwidth 188 |
configure wave -valuecolwidth 100 |
configure wave -justifyvalue left |
configure wave -signalnamewidth 0 |
configure wave -snapdistance 10 |
configure wave -datasetprefix 0 |
configure wave -rowmargin 4 |
configure wave -childrowmargin 2 |
configure wave -gridoffset 0 |
configure wave -gridperiod 1 |
configure wave -griddelta 40 |
configure wave -timeline 0 |
configure wave -timelineunits ps |
update |
WaveRestoreZoom {0 ps} {4512375 ps} |
/axis_video_frame_bfm_class/sim/tests/tb_1_tile_4_outputs/the_test.sv
51,13 → 51,11
$display("^^^---------------------------------"); |
// -------------------------------------------------------------------- |
|
tb_top.a_h.init(); |
|
tb_top.tb.timeout_stop(20us); |
|
inject_error : fork |
begin |
#(11us) tb_top.a_h.rx_bfm_h[0].f_h.write_pixel('{1,1}, 0); |
#(3.5us) tb_top.avf_agent_h.rx_bfm_h[0].f_h.write_pixel('{1,1}, 0); |
end |
join_none |
|
68,30 → 66,30
|
// -------------------------------------------------------------------- |
repeat(100) @(posedge tb_clk); |
tb_top.a_h.make_frame("counting"); |
tb_top.a_h.get_frame(); |
tb_top.a_h.put_frame(); |
tb_top.avf_agent_h.make_frame("counting"); |
tb_top.avf_agent_h.get_frame(); |
tb_top.avf_agent_h.put_frame(); |
|
wait(~tb_top.a_h.put_frame_active); |
wait(~tb_top.a_h.get_frame_active); |
wait(~tb_top.avf_agent_h.put_frame_active); |
wait(~tb_top.avf_agent_h.get_frame_active); |
|
mismatch_count = tb_top.a_h.compare_frame(); |
mismatch_count = tb_top.avf_agent_h.compare_frame(); |
|
tb_top.a_h.rx_bfm_h[0].f_h.write_pixel('{1,1}, 0); |
tb_top.avf_agent_h.rx_bfm_h[0].f_h.write_pixel('{1,1}, 0); |
|
mismatch_count = tb_top.a_h.compare_frame(); |
mismatch_count = tb_top.avf_agent_h.compare_frame(); |
|
|
// -------------------------------------------------------------------- |
repeat(100) @(posedge tb_clk); |
|
tb_top.a_h.make_frame("constant", 16'habba); |
tb_top.a_h.queue_frame(); |
tb_top.avf_agent_h.make_frame("constant", 16'habba); |
tb_top.avf_agent_h.queue_frame(); |
|
tb_top.a_h.queue_frame("random"); |
tb_top.a_h.queue_frame("counting"); |
tb_top.avf_agent_h.queue_frame("random"); |
tb_top.avf_agent_h.queue_frame("counting"); |
|
tb_top.a_h.wait_for_tx_frames(3); |
tb_top.avf_agent_h.wait_for_tx_frames(3); |
|
repeat(100) @(posedge tb_clk); |
|
/axis_video_frame_bfm_class/sim/tests/tb_4_tile_1_outputs/the_test.sv
51,13 → 51,11
$display("^^^---------------------------------"); |
// -------------------------------------------------------------------- |
|
tb_top.a_h.init(); |
|
tb_top.tb.timeout_stop(20us); |
|
inject_error : fork |
begin |
#(11us) tb_top.a_h.rx_bfm_h[0].f_h.write_pixel('{1,1}, 0); |
#(11us) tb_top.avf_agent_h.rx_bfm_h[0].f_h.write_pixel('{1,1}, 0); |
end |
join_none |
|
68,30 → 66,30
|
// -------------------------------------------------------------------- |
repeat(100) @(posedge tb_clk); |
tb_top.a_h.make_frame("counting"); |
tb_top.a_h.get_frame(); |
tb_top.a_h.put_frame(); |
tb_top.avf_agent_h.make_frame("counting"); |
tb_top.avf_agent_h.get_frame(); |
tb_top.avf_agent_h.put_frame(); |
|
wait(~tb_top.a_h.put_frame_active); |
wait(~tb_top.a_h.get_frame_active); |
wait(~tb_top.avf_agent_h.put_frame_active); |
wait(~tb_top.avf_agent_h.get_frame_active); |
|
mismatch_count = tb_top.a_h.compare_frame(); |
mismatch_count = tb_top.avf_agent_h.compare_frame(); |
|
tb_top.a_h.rx_bfm_h[0].f_h.write_pixel('{1,1}, 0); |
tb_top.avf_agent_h.rx_bfm_h[0].f_h.write_pixel('{1,1}, 0); |
|
mismatch_count = tb_top.a_h.compare_frame(); |
mismatch_count = tb_top.avf_agent_h.compare_frame(); |
|
|
// -------------------------------------------------------------------- |
repeat(100) @(posedge tb_clk); |
|
tb_top.a_h.make_frame("constant", 16'habba); |
tb_top.a_h.queue_frame(); |
tb_top.avf_agent_h.make_frame("constant", 16'habba); |
tb_top.avf_agent_h.queue_frame(); |
|
tb_top.a_h.queue_frame("random"); |
tb_top.a_h.queue_frame("counting"); |
tb_top.avf_agent_h.queue_frame("random"); |
tb_top.avf_agent_h.queue_frame("counting"); |
|
tb_top.a_h.wait_for_tx_frames(3); |
tb_top.avf_agent_h.wait_for_tx_frames(3); |
|
repeat(100) @(posedge tb_clk); |
|
/axis_video_frame_bfm_class/sim/tests/tb_4_tile_1_outputs/wave.do
0,0 → 1,52
onerror {resume} |
quietly WaveActivateNextPane {} 0 |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/aclk} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/aresetn} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tvalid} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tready} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tdata} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tlast} |
add wave -noupdate -expand -group {avf_axis[0]} {/tb_top/avf_axis[0]/tuser} |
add wave -noupdate -expand -group {avf_axis[1]} {/tb_top/avf_axis[1]/aclk} |
add wave -noupdate -expand -group {avf_axis[1]} {/tb_top/avf_axis[1]/aresetn} |
add wave -noupdate -expand -group {avf_axis[1]} {/tb_top/avf_axis[1]/tvalid} |
add wave -noupdate -expand -group {avf_axis[1]} {/tb_top/avf_axis[1]/tready} |
add wave -noupdate -expand -group {avf_axis[1]} {/tb_top/avf_axis[1]/tdata} |
add wave -noupdate -expand -group {avf_axis[1]} {/tb_top/avf_axis[1]/tlast} |
add wave -noupdate -expand -group {avf_axis[1]} {/tb_top/avf_axis[1]/tuser} |
add wave -noupdate -expand -group {avf_axis[2]} {/tb_top/avf_axis[2]/aclk} |
add wave -noupdate -expand -group {avf_axis[2]} {/tb_top/avf_axis[2]/aresetn} |
add wave -noupdate -expand -group {avf_axis[2]} {/tb_top/avf_axis[2]/tvalid} |
add wave -noupdate -expand -group {avf_axis[2]} {/tb_top/avf_axis[2]/tready} |
add wave -noupdate -expand -group {avf_axis[2]} {/tb_top/avf_axis[2]/tdata} |
add wave -noupdate -expand -group {avf_axis[2]} {/tb_top/avf_axis[2]/tlast} |
add wave -noupdate -expand -group {avf_axis[2]} {/tb_top/avf_axis[2]/tuser} |
add wave -noupdate -expand -group {avf_axis[3]} {/tb_top/avf_axis[3]/aclk} |
add wave -noupdate -expand -group {avf_axis[3]} {/tb_top/avf_axis[3]/aresetn} |
add wave -noupdate -expand -group {avf_axis[3]} {/tb_top/avf_axis[3]/tvalid} |
add wave -noupdate -expand -group {avf_axis[3]} {/tb_top/avf_axis[3]/tready} |
add wave -noupdate -expand -group {avf_axis[3]} {/tb_top/avf_axis[3]/tdata} |
add wave -noupdate -expand -group {avf_axis[3]} {/tb_top/avf_axis[3]/tlast} |
add wave -noupdate -expand -group {avf_axis[3]} {/tb_top/avf_axis[3]/tuser} |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -divider {New Divider} |
TreeUpdate [SetDefaultTree] |
WaveRestoreCursors {{Cursor 1} {542500 ps} 0} |
quietly wave cursor active 1 |
configure wave -namecolwidth 164 |
configure wave -valuecolwidth 100 |
configure wave -justifyvalue left |
configure wave -signalnamewidth 0 |
configure wave -snapdistance 10 |
configure wave -datasetprefix 0 |
configure wave -rowmargin 4 |
configure wave -childrowmargin 2 |
configure wave -gridoffset 0 |
configure wave -gridperiod 1 |
configure wave -griddelta 40 |
configure wave -timeline 0 |
configure wave -timelineunits ps |
update |
WaveRestoreZoom {0 ps} {12576375 ps} |
/axis_video_frame_bfm_class/sim/tests/tb_4_tile_1_outputs/init_test.do
19,7 → 19,6
sim_compile_all sim |
|
# simulation $root |
vlog $env(PROJECT_DIR)/sim/src/avf_4_tile_1_outputs_class_pkg.sv |
vlog $env(PROJECT_DIR)/sim/src/tb_4_tile_1_outputs.sv |
|
# compile test last |
/axis_video_frame_bfm_class/src/axis_video_frame_bfm_pkg.sv
34,6 → 34,8
int height; |
int bytes_per_pixel; |
int bits_per_pixel; |
int tiles; |
int outputs_per_tile; |
string name; |
int vertical_blanking; |
} avf_config_t; |
56,11 → 58,11
// |
import video_frame_pkg::*; |
|
class axis_video_frame_bfm_class #(BYTES_PER_PIXEL = 2, PIXELS_PER_CLK = 1); |
class axis_video_frame_bfm_class #(BYTES_PER_PIXEL = 2, OUTPUTS_PER_TILE = 1); |
|
localparam AVF_N = BYTES_PER_PIXEL * PIXELS_PER_CLK; // data bus width in bytes |
localparam AVF_U = 1; // TUSER width |
localparam AVF_B = BYTES_PER_PIXEL * 8; // bits per pixel on TDATA |
localparam AVF_N = BYTES_PER_PIXEL * OUTPUTS_PER_TILE; // data bus width in bytes |
localparam AVF_U = 1; // TUSER width |
localparam AVF_B = BYTES_PER_PIXEL * 8; // bits per pixel on TDATA |
|
string avf_name = ""; |
string avf_type = ""; |
74,8 → 76,7
|
|
//-------------------------------------------------------------------- |
function |
new |
function new |
( |
virtual axis_if #(.N(AVF_N), .U(AVF_U)) avf_axis_if |
); |
88,8 → 89,7
|
// -------------------------------------------------------------------- |
// |
function void |
init |
function void init |
( |
input avf_config_t avf_config, |
input avf_tile_config_t tile_config, |
190,7 → 190,7
x_end = (start.x + (avf.width * inc.x)); |
y_end = (start.y + (avf.height * inc.y)); |
|
inc.x *= PIXELS_PER_CLK; // increment stride by number of outputs |
inc.x *= avf.outputs_per_tile; // increment stride by number of outputs |
x_eol = x_end - inc.x; |
|
endtask: avf_calculate |
230,7 → 230,7
|
wait(avf_axis_if.cb_s.tvalid); |
|
for(int i = 0; i < PIXELS_PER_CLK; i++) |
for(int i = 0; i < avf.outputs_per_tile; i++) |
f_h.lines[l].pixel[p + i] = avf_axis_if.cb_s.tdata[i*AVF_B +: AVF_B]; |
|
if(p == x_eol) |
271,7 → 271,7
input int p |
); |
|
for(int i = 0; i < PIXELS_PER_CLK; i++) |
for(int i = 0; i < avf.outputs_per_tile; i++) |
avf_axis_if.cb_m.tdata[i*AVF_B +: AVF_B] <= f_h.lines[l].pixel[p + i]; |
|
endtask: output_pixels |
396,8 → 396,8
|
wait fork; |
|
->tx_frame_done; |
repeat(avf.vertical_blanking) @(avf_axis_if.cb_m); |
->tx_frame_done; |
end |
join_none |
|
/axis_video_frame_bfm_class/src/avf_agent_class_pkg.sv
36,14 → 36,48
|
// -------------------------------------------------------------------- |
// |
class avf_agent_config_class; |
|
avf_config_t avf; |
avf_tile_config_t tile[]; |
|
//-------------------------------------------------------------------- |
// |
function new |
( |
input int width, |
input int height, |
input int bytes_per_pixel, |
input int bits_per_pixel, |
input int tiles, |
input int outputs_per_tile, |
input string name, |
input int vertical_blanking |
); |
|
this.avf.width = width; |
this.avf.height = height; |
this.avf.bytes_per_pixel = bytes_per_pixel; |
this.avf.bits_per_pixel = bits_per_pixel; |
this.avf.tiles = tiles; |
this.avf.outputs_per_tile = outputs_per_tile; |
this.avf.name = name; |
this.avf.vertical_blanking = vertical_blanking; |
|
this.tile = new[avf.tiles]; |
|
endfunction: new |
|
endclass: avf_agent_config_class |
|
|
// -------------------------------------------------------------------- |
// |
class avf_agent_class #(BYTES_PER_PIXEL = 2, OUTPUTS_PER_TILE = 1); |
|
localparam AVF_N = BYTES_PER_PIXEL * OUTPUTS_PER_TILE; // data bus width in bytes |
localparam AVF_U = 1; // TUSER width |
localparam AVF_B = BYTES_PER_PIXEL * 8; // bits per pixel on TDATA |
|
int number_of_rx_tiles; |
int number_of_tx_tiles; |
|
virtual axis_if #(.N(AVF_N), .U(AVF_U)) avf_axis_in_if[]; |
virtual axis_if #(.N(AVF_N), .U(AVF_U)) avf_axis_out_if[]; |
51,6 → 85,7
axis_video_frame_bfm_class #(BYTES_PER_PIXEL, OUTPUTS_PER_TILE) tx_bfm_h[]; |
axis_video_frame_bfm_class #(BYTES_PER_PIXEL, OUTPUTS_PER_TILE) rx_bfm_h[]; |
|
avf_agent_config_class avf_agent_config; |
video_frame_class clone_h; |
|
|
58,31 → 93,54
// |
function new |
( |
input avf_agent_config_class avf_agent_config, |
virtual axis_if #(.N(AVF_N), .U(AVF_U)) avf_axis_in_if[], |
virtual axis_if #(.N(AVF_N), .U(AVF_U)) avf_axis_out_if[] |
); |
|
this.number_of_rx_tiles = $size(avf_axis_in_if); |
this.avf_agent_config = avf_agent_config; |
|
this.avf_axis_in_if = new[avf_agent_config.avf.tiles]; |
this.avf_axis_in_if = avf_axis_in_if; |
|
this.rx_bfm_h = new[number_of_rx_tiles]; |
foreach(this.rx_bfm_h[i]) |
this.rx_bfm_h[i] = new(avf_axis_in_if[i]); |
|
this.number_of_tx_tiles = $size(avf_axis_out_if); |
this.avf_axis_out_if = new[avf_agent_config.avf.tiles]; |
this.avf_axis_out_if = avf_axis_out_if; |
|
this.tx_bfm_h = new[number_of_tx_tiles]; |
this.tx_bfm_h = new[avf_agent_config.avf.tiles]; |
foreach(this.tx_bfm_h[i]) |
this.tx_bfm_h[i] = new(avf_axis_out_if[i]); |
|
this.rx_bfm_h = new[avf_agent_config.avf.tiles]; |
foreach(this.rx_bfm_h[i]) |
this.rx_bfm_h[i] = new(avf_axis_in_if[i]); |
|
endfunction: new |
|
|
// -------------------------------------------------------------------- |
// |
virtual task automatic init; |
task automatic init; |
|
$display("^^^ %16.t | %m |", $time); |
|
foreach(this.tx_bfm_h[i]) |
this.tx_bfm_h[i].init |
( |
.avf_config(avf_agent_config.avf), |
.tile_config(avf_agent_config.tile[i]), |
.avf_name($psprintf("%s%0d", avf_agent_config.avf.name, i)), |
.avf_type("TX") |
); |
|
foreach(this.rx_bfm_h[i]) |
this.rx_bfm_h[i].init |
( |
.avf_config(avf_agent_config.avf), |
.tile_config(avf_agent_config.tile[i]), |
.avf_name($psprintf("%s%0d", avf_agent_config.avf.name, i)), |
.avf_type("RX") |
); |
|
foreach(tx_bfm_h[i]) |
tx_bfm_h[i].run_tx_q(); |
|
90,51 → 148,11
rx_bfm_h[i].run_rx_q(); |
|
endtask: init |
|
|
// -------------------------------------------------------------------- |
// |
virtual task automatic init_rx |
( |
int index, |
input avf_config_t avf_config, |
input avf_tile_config_t tile_config |
); |
|
this.rx_bfm_h[index].init |
( |
.avf_config(avf_config), |
.tile_config(tile_config), |
.avf_name($psprintf("%s%0d", avf_config.name, index)), |
.avf_type("RX") |
); |
|
endtask: init_rx |
|
|
// -------------------------------------------------------------------- |
// |
virtual task automatic init_tx |
( |
int index, |
input avf_config_t avf_config, |
input avf_tile_config_t tile_config |
); |
|
this.tx_bfm_h[index].init |
( |
.avf_config(avf_config), |
.tile_config(tile_config), |
.avf_name($psprintf("%s%0d", avf_config.name, index)), |
.avf_type("TX") |
); |
|
endtask: init_tx |
|
|
// -------------------------------------------------------------------- |
// |
virtual task automatic |
task automatic |
make_frame |
( |
string pattern, |
155,7 → 173,7
|
// -------------------------------------------------------------------- |
// |
virtual task automatic |
task automatic |
queue_frame |
( |
string pattern = "" |
178,7 → 196,7
|
// -------------------------------------------------------------------- |
// |
virtual task |
task |
wait_for_tx_frames |
( |
input int unsigned count |
195,7 → 213,7
logic put_frame_active = 0; |
semaphore put_frame_semaphore = new(1); |
|
virtual task automatic |
task automatic |
put_frame; |
|
if(put_frame_semaphore.try_get() == 0) |
226,7 → 244,7
|
// -------------------------------------------------------------------- |
// |
virtual task |
task |
wait_for_rx_frames |
( |
input int unsigned count |
243,7 → 261,7
semaphore get_frame_semaphore = new(1); |
logic get_frame_active = 0; |
|
virtual task automatic |
task automatic |
get_frame; |
|
if(get_frame_semaphore.try_get() == 0) |
275,11 → 293,11
|
// -------------------------------------------------------------------- |
// |
virtual function automatic |
function automatic |
int compare_frame; |
|
int mismatch_count[]; |
mismatch_count = new[number_of_rx_tiles]; |
mismatch_count = new[avf_agent_config.avf.tiles]; |
|
$display("^^^ %16.t | %m", $time); |
|
/camera_link/sim/src/camera_link_agent_pkg.sv
File deleted
/camera_link/sim/src/camera_link_bfm_pkg.sv
File deleted
/camera_link/sim/src/tb_channel_link_rx_if.sv
1,29 → 1,6
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2015 Authors and OPENCORES.ORG //// |
//// //// |
//// This source file may be used and distributed without //// |
//// restriction provided that this copyright statement is not //// |
//// removed from the file and that any derivative work contains //// |
//// the original copyright notice and the associated disclaimer. //// |
//// //// |
//// This source file is free software; you can redistribute it //// |
//// and/or modify it under the terms of the GNU Lesser General //// |
//// Public License as published by the Free Software Foundation; //// |
//// either version 2.1 of the License, or (at your option) any //// |
//// later version. //// |
//// //// |
//// This source is distributed in the hope that it will be //// |
//// useful, but WITHOUT ANY WARRANTY; without even the implied //// |
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //// |
//// PURPOSE. See the GNU Lesser General Public License for more //// |
//// details. //// |
//// //// |
//// You should have received a copy of the GNU Lesser General //// |
//// Public License along with this source; if not, download it //// |
//// from http://www.opencores.org/lgpl.shtml //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
// -------------------------------------------------------------------- |
// |
// -------------------------------------------------------------------- |
|
|
interface |
/cli/cli/sys_cmd.c
37,9 → 37,9
void cli_init( void ) |
{ |
int i; |
|
|
for(i = 0; cli_commands[i].func != NULL; i++); |
|
|
cli_no_of_commands = i; |
} |
|
58,7 → 58,7
cli_cmd_tab_t *cli_find_command( cli_cmd_tab_t *cmd_to_check ) |
{ |
struct cli_cmd_tab_t *cli_cmd; |
|
|
cli_cmd = (struct cli_cmd_tab_t *) bsearch( cmd_to_check, cli_commands, cli_no_of_commands, sizeof(struct cli_cmd_tab_t), cmd_cmp ); |
|
return(cli_cmd); |
82,14 → 82,6
|
|
/*-----------------------------------------------------------*/ |
static char func_comment( const unsigned char argc, const char *argv[] ) |
{ |
PRINTF_MACRO( "# > "); |
return EXIT_SUCCESS; |
} |
|
|
/*-----------------------------------------------------------*/ |
static char func_peek( const unsigned char argc, const char *argv[] ) |
{ |
volatile unsigned int *address = (volatile unsigned int *)( strtoul( argv[1], (char **)NULL, 16 ) ); |
/cli/cli/sys_cli.c
36,29 → 36,22
|
|
/*-----------------------------------------------------------*/ |
void clear_screen(void) |
{ |
PRINTF_MACRO("\033[H\033[J"); |
} |
|
|
/*-----------------------------------------------------------*/ |
#ifdef ANSI_ESCAPE_CODE |
#define ASCII_ESC '\x1b' |
|
static void send_csi(char c) |
static void send_csi( char c ) |
{ |
putchar(ASCII_ESC); |
putchar('['); |
putchar(c); |
putchar( ASCII_ESC ); |
putchar( '[' ); |
putchar( c ); |
} |
#else |
static void send_csi(char c) {}; |
static void send_csi( char c ) {}; |
#endif |
|
|
/*-----------------------------------------------------------*/ |
static char *cli_edit_buffer(char *in_buffer, char *out_buffer, unsigned int line_length) |
static char *cli_edit_buffer( char *in_buffer, char *out_buffer, unsigned int line_length ) |
{ |
static char *out_ptr; |
static char *begin_ptr; |
71,7 → 64,7
|
unsigned int i; |
|
if(out_buffer != NULL) |
if( out_buffer != NULL ) |
{ |
out_ptr = out_buffer; |
begin_ptr = out_buffer; |
83,43 → 76,43
#endif |
} |
|
for(i = 0 ; i < line_length ; i++) |
for( i = 0 ; i < line_length ; i++ ) |
{ |
|
if(out_ptr >= end_ptr) |
if( out_ptr >= end_ptr ) |
{ |
*end_ptr = '\0'; |
return(NULL); |
return( NULL ); |
} |
|
if(out_ptr < begin_ptr) |
sys_error_fatal(FATAL_ERROR_CLI); |
if( out_ptr < begin_ptr ) |
sys_error_fatal( FATAL_ERROR_CLI ); |
|
switch(in_buffer[i]) |
switch( in_buffer[i] ) |
{ |
case '\0': |
return(NULL); |
return( NULL ); |
break; |
|
case '\n': |
*out_ptr = '\0'; |
return(NULL); |
return( NULL ); |
break; |
|
case '\r': |
*out_ptr = '\0'; |
return(NULL); |
return( NULL ); |
break; |
|
case '\b': |
if(out_ptr != begin_ptr) |
if( out_ptr != begin_ptr ) |
{ |
send_csi('P'); |
send_csi( 'P' ); |
out_ptr--; |
} else |
{ |
putchar(' '); |
send_csi('\a'); |
putchar( ' ' ); |
send_csi( '\a' ); |
} |
break; |
|
128,7 → 121,7
break; |
|
case '[': |
if(prev_char == ASCII_ESC) |
if( prev_char == ASCII_ESC ) |
{ |
csi = 1; |
} else |
139,10 → 132,10
break; |
|
case 'A': |
if(csi) |
if( csi ) |
{ |
send_csi('B'); |
send_csi('\a'); |
send_csi( 'B' ); |
send_csi( '\a' ); |
|
csi = 0; |
} else |
153,7 → 146,7
break; |
|
case 'B': |
if(csi == 0) |
if( csi == 0 ) |
{ |
*out_ptr = in_buffer[i]; |
out_ptr++; |
161,10 → 154,10
break; |
|
case 'C': |
if(csi) |
if( csi ) |
{ |
send_csi('D'); |
send_csi('\a'); |
send_csi( 'D' ); |
send_csi( '\a' ); |
|
csi = 0; |
} else |
175,10 → 168,10
break; |
|
case 'D': |
if(csi) |
if( csi ) |
{ |
send_csi('C'); |
send_csi('\a'); |
send_csi( 'C' ); |
send_csi( '\a' ); |
|
csi = 0; |
} else |
200,12 → 193,12
#endif |
} |
|
return(out_ptr); |
return( out_ptr ); |
} |
|
|
/*-----------------------------------------------------------*/ |
void sys_cli_task(void) |
void sys_cli_task( void ) |
{ |
char last_return_value = EXIT_SUCCESS; |
char in_buffer[INPUT_LINE_LENGTH + 1]; |
219,59 → 212,62
|
cli_init(); |
|
PRINTF_MACRO("\r\n"); |
PRINTF_MACRO( "\r\n" ); |
|
for(;;) |
for( ;; ) |
{ |
PRINTF_MACRO("%d > ", last_return_value); |
PRINTF_MACRO( "%d > ", last_return_value ); |
|
cli_argc = 0; |
last_return_value = EXIT_SUCCESS; |
|
bytes_read = (unsigned int)read(STDIN_FILENO, (void *)in_buffer, sizeof(in_buffer)); |
cli_ptr = cli_edit_buffer(in_buffer, out_buffer, bytes_read); |
bytes_read = (unsigned int)read( STDIN_FILENO, (void *)in_buffer, sizeof(in_buffer) ); |
cli_ptr = cli_edit_buffer( in_buffer, out_buffer, bytes_read ); |
|
while(cli_ptr != NULL) |
while( cli_ptr != NULL ) |
{ |
bytes_read = (unsigned int)read(STDIN_FILENO, (void *)in_buffer, sizeof(in_buffer)); |
cli_ptr = cli_edit_buffer(in_buffer, NULL, bytes_read); |
bytes_read = (unsigned int)read( STDIN_FILENO, (void *)in_buffer, sizeof(in_buffer) ); |
cli_ptr = cli_edit_buffer( in_buffer, NULL, bytes_read ); |
} |
|
if(out_buffer[0] == '\0') |
if( out_buffer[0] == '\0' ) |
{ |
PRINTF_MACRO( " NULL String! Command ignored\r\n" ); |
last_return_value = EXIT_FAILURE; |
} |
|
while(last_return_value != EXIT_FAILURE) |
while( last_return_value != EXIT_FAILURE ) |
{ |
cli_ptr = strtok(out_buffer, " \t"); |
cli_ptr = strtok( out_buffer, " \t" ); |
|
strncpy(cmd_to_check.cmd, out_buffer, MAX_CMD_LENGTH); |
cli_cmd = cli_find_command(&cmd_to_check); |
strncpy( cmd_to_check.cmd, out_buffer, MAX_CMD_LENGTH ); |
cli_cmd = cli_find_command( &cmd_to_check ); |
|
if (cli_cmd == NULL) |
if ( cli_cmd == NULL ) |
{ |
PRINTF_MACRO("\r\n Command not found!\r\n"); |
PRINTF_MACRO( "\r\n Command not found!\r\n" ); |
last_return_value = EXIT_FAILURE; |
break; |
} |
|
if(cli_ptr == NULL) |
if( cli_ptr == NULL ) |
{ |
cli_argv[cli_argc] = out_buffer; |
cli_argc++; |
} else |
{ |
while(cli_ptr != NULL) |
while( cli_ptr != NULL ) |
{ |
cli_argv[cli_argc] = cli_ptr; |
cli_argc++; |
|
cli_ptr = strtok(NULL, " \t"); |
cli_ptr = strtok( NULL, " \t" ); |
} |
} |
|
PRINTF_MACRO("\r\n"); |
PRINTF_MACRO( "\r\n" ); |
|
last_return_value = cli_cmd->func(cli_argc, (const char **)cli_argv); |
last_return_value = cli_cmd->func( cli_argc, (const char **)cli_argv ); |
break; |
} |
|
/cli/cli/sys_cmd_table.h
39,13 → 39,13
struct cli_cmd_tab_t cli_commands[] = |
{ |
{ "help", func_help, " help ~ print help message\r" }, |
{ "md", func_md, " md address [# of objects] ~ memory display\r" }, |
{ "md.b", func_md, " md.b address [# of objects] ~ memory display\r" }, |
{ "md.w", func_md, " md.w address [# of objects] ~ memory display\r" }, |
{ "md", func_md, " md [.b, .w, .l] address [# of objects] ~ memory display\r" }, |
{ "md.b", func_md, " md.w [.b, .w, .l] address [# of objects] ~ memory display\r" }, |
{ "md.w", func_md, " md.w [.b, .w, .l] address [# of objects] ~ memory display\r" }, |
{ "memtest", func_memtest, " memtest base_address size\r" }, |
{ "mw", func_mw, " mw address value [count] ~ memory write (fill)\r" }, |
{ "mw.b", func_mw, " mw.b address value [count] ~ memory write (fill)\r" }, |
{ "mw.w", func_mw, " mw.w address value [count] ~ memory write (fill)\r" }, |
{ "mw", func_mw, " mw [.b, .w, .l] address value [count] ~ memory write (fill)\r" }, |
{ "mw.b", func_mw, " mw.w [.b, .w, .l] address value [count] ~ memory write (fill)\r" }, |
{ "mw.w", func_mw, " mw.w [.b, .w, .l] address value [count] ~ memory write (fill)\r" }, |
{ "peek", func_peek, " peek address\r" }, |
{ "poke", func_poke, " poke address value\r" }, |
{ "~", NULL, NULL } |
/misc/src/pulse_stretcher.v
34,6 → 34,8
( |
input in, |
output out, |
|
input reset, |
input clock |
); |
|
/synchronize/src/sync_reset.v
25,29 → 25,35
//// //// |
////////////////////////////////////////////////////////////////////// |
|
|
module |
sync_reset |
#( |
parameter ASSERT_LENGTH = 8 |
) |
parameter STAGES = 8 |
) |
( |
input clk_in, |
input async_reset_in, |
output sync_reset_out |
input async_reset, // active high reset |
output synced_reset, |
|
input clock |
); |
|
|
|
|
// -------------------------------------------------------------------- |
reg [(ASSERT_LENGTH-1):0] sync_reset_out_r; |
assign sync_reset_out = sync_reset_out_r[ASSERT_LENGTH-1]; |
|
always @(posedge clk_in) |
if(async_reset_in) |
sync_reset_out_r <= {ASSERT_LENGTH{1'b1}}; |
// |
reg [STAGES-1:0] reset_r; |
|
always @(posedge clock) |
if(async_reset) |
reset_r <= {STAGES{1'b1}}; |
else |
sync_reset_out_r <= {sync_reset_out_r[(ASSERT_LENGTH-2):0], 1'b0}; |
reset_r <= {1'b0, reset_r[STAGES-1:1]}; |
|
|
|
// -------------------------------------------------------------------- |
// |
assign synced_reset = reset_r[0]; |
|
|
endmodule |
|
|
/tb_class/sim/libs/sim_verilog/tb_lib.f
File deleted
/tb_class/sim/libs/packages_verilog/tb_lib.f
File deleted
/tb_class/src/tb_bfm_pkg.sv
File deleted
/video_frame_class/src/video_frame_pkg.sv
135,26 → 135,14
( |
input int max_mismatches, |
ref video_frame_class to |
); |
); |
|
extern virtual function video_frame_class catenate_horizontally |
( |
ref video_frame_class tail |
); |
|
extern virtual function int compare_line |
( |
input int line, |
input int max_mismatches, |
ref video_frame_class to |
); |
|
extern virtual function void print_line |
( |
input int line, |
input int pixel, |
input int count |
); |
); |
|
extern virtual function void print_config(); |
|
180,7 → 168,7
function int video_frame_class::read_pixel |
( |
input frame_coordinate_t coordinate |
); |
); |
|
read_pixel = this.lines[coordinate.y].pixel[coordinate.x]; |
|
192,7 → 180,7
function void video_frame_class::make_constant |
( |
input int pixel |
); |
); |
|
$display("^^^ %16.t | %m", $time); |
|
322,11 → 310,11
this.lines_per_frame = from.lines_per_frame; |
this.bits_per_pixel = from.bits_per_pixel; |
this.name = from.name; |
this.lines = new[this.lines_per_frame]; |
this.lines = new[lines_per_frame]; |
|
foreach(this.lines[l]) |
begin |
this.lines[l].pixel = new[this.pixels_per_line]; |
this.lines[l].pixel = new[pixels_per_line]; |
|
foreach(this.lines[l].pixel[p]) |
this.lines[l].pixel[p] = from.lines[l].pixel[p]; |
348,81 → 336,6
|
// -------------------------------------------------------------------- |
// |
function video_frame_class video_frame_class::catenate_horizontally |
( |
ref video_frame_class tail |
); |
|
$display("^^^ %16.t | %m", $time); |
|
if(this.lines_per_frame != tail.lines_per_frame) |
return(null); |
|
if(this.bits_per_pixel != tail.bits_per_pixel) |
return(null); |
|
catenate_horizontally = new(); |
|
catenate_horizontally.pixels_per_line = this.pixels_per_line + tail.pixels_per_line; |
catenate_horizontally.lines_per_frame = this.lines_per_frame; |
catenate_horizontally.bits_per_pixel = this.bits_per_pixel; |
catenate_horizontally.name = this.name; |
catenate_horizontally.lines = new[catenate_horizontally.lines_per_frame]; |
|
foreach(catenate_horizontally.lines[l]) |
begin |
catenate_horizontally.lines[l].pixel = new[catenate_horizontally.pixels_per_line]; |
|
foreach(this.lines[l].pixel[p]) |
catenate_horizontally.lines[l].pixel[p] = this.lines[l].pixel[p]; |
|
foreach(tail.lines[l].pixel[p]) |
catenate_horizontally.lines[l].pixel[p + this.pixels_per_line] = tail.lines[l].pixel[p]; |
|
end |
|
endfunction: catenate_horizontally |
|
|
// -------------------------------------------------------------------- |
// |
function int video_frame_class::compare_line |
( |
input int line, |
input int max_mismatches, |
ref video_frame_class to |
); |
|
int mismatch_count = 0; |
|
if(to.bits_per_pixel != this.bits_per_pixel) |
begin |
$display("^^^ %16.t | ERROR! to.bits_per_pixel != this.bits_per_pixel | %s", $time, name); |
return(-3); |
end |
|
foreach(this.lines[line].pixel[p]) |
if(to.lines[line].pixel[p] != this.lines[line].pixel[p]) |
begin |
|
if(max_mismatches > 0) |
mismatch_count++; |
|
$display("^^^ %16.t | ERROR! mismatch @ frame[%4h][%4h] | to == %4h | this == %4h | %s", |
$time, line, p, to.lines[line].pixel[p], this.lines[line].pixel[p], name); |
|
if(mismatch_count > max_mismatches) |
return(mismatch_count); |
|
end |
|
return(mismatch_count); |
|
endfunction: compare_line |
|
|
// -------------------------------------------------------------------- |
// |
function int video_frame_class::compare |
( |
input int max_mismatches, |
/video_frame_class/sim/scripts/sim_procs.do
0,0 → 1,146
# ------------------------------------ |
# |
# ------------------------------------ |
|
|
# ------------------------------------ |
# |
proc sim_compile_all { target } { |
|
global env |
|
set env(ROOT_DIR) ../../../.. |
set env(PROJECT_DIR) ../../.. |
set env(SIM_TARGET) $target |
|
if {[file exists work/_info]} { |
echo "INFO: Simulation library work already exists" |
echo "INFO: deleting ./work and recompiling all" |
file delete -force ./work |
vlib work |
} else { |
vlib work |
} |
|
if { [file exists ../../libs/altera_sim.f] } { |
vlog -O0 -f ../../libs/altera_sim.f |
} elseif {[file exists ../../libs/xilinx_sim.f]} { |
vlog -O0 -f ../../libs/xilinx_sim.f |
} |
|
foreach filename [glob -nocomplain -directory ../../libs/FPGA_verilog/ *.f] { |
echo "INFO: compiling $filename" |
vlog -O0 -f $filename |
} |
|
foreach filename [glob -nocomplain -directory ../../libs/FPGA_VHDL/ *.f] { |
echo "INFO: compiling $filename" |
vcom -explicit -O0 -f $filename |
} |
|
foreach filename [glob -nocomplain -directory ../../libs/sim_verilog/ *.f] { |
echo "INFO: compiling $filename" |
vlog -O0 -f $filename |
} |
|
foreach filename [glob -nocomplain -directory ../../libs/sim_VHDL/ *.f] { |
echo "INFO: compiling $filename" |
vcom -explicit -O0 -f $filename |
} |
|
switch $target { |
|
"rtl" { |
echo "INFO: compiling FPGA rtl" |
foreach filename [glob -nocomplain -directory ../../libs/FPGA/ *.f] { |
echo "INFO: compiling $filename" |
# vlog -O0 -f $filename |
vcom -93 -explicit -O0 -f $filename |
} |
} |
|
default { |
echo "ERROR: <$target> Target not suported!!!" |
} |
} |
|
} |
|
|
# ------------------------------------ |
# |
proc sim_run_sim { } { |
|
if {[file exists ./sim.do]} { |
do ./sim.do |
} elseif {[file exists ../../libs/sim.do]} { |
do ../../libs/sim.do |
} elseif {[file exists ../../libs/altera_sim.f]} { |
vsim -novopt -f ../../libs/altera_sim.f -l transcript.txt work.tb_top |
} elseif {[file exists ../../libs/xilinx_sim.f]} { |
vsim -novopt -f ../../libs/xilinx_sim.f -l transcript.txt work.tb_top work.glbl |
} |
|
if { [file exists ./wave.do] } { |
do ./wave.do |
} |
} |
|
|
# ------------------------------------ |
# |
proc sim_run_test { } { |
|
global env |
|
if { [file exists work/_info] } { |
echo "INFO: Simulation library work already exists" |
} else { |
vlib work |
} |
|
# unique setup |
if { [file exists ./setup_test.do] } { |
do ./setup_test.do |
} |
|
if { [info exists env(MAKEFILE_TEST_RUN)] } { |
|
vlog +define+MAKEFILE_TEST_RUN ../../src/tb_top.v |
|
} else { |
|
sim_run_sim |
} |
|
run -all |
|
} |
|
|
# ------------------------------------ |
# |
proc sim_restart { } { |
|
global env |
|
# work in progress files to compile |
if { [file exists ./wip.do] } { |
echo "INFO: found ./wip.do" |
do ./wip.do |
} else { |
|
sim_compile_all $::env(SIM_TARGET) |
} |
|
if { [string equal nodesign [runStatus]] } { |
sim_run_sim |
} else { |
restart -force |
} |
|
run -all |
|
} |
|
|
/video_frame_class/sim/scripts/sim_debug_init.do
0,0 → 1,19
# ------------------------------------ |
# |
# ------------------------------------ |
|
do ../../scripts/sim_procs.do |
|
global env |
|
set env(SIM_TARGET) rtl |
|
|
radix -hexadecimal |
|
# do ./setup_test.do |
# sim_compile_all rtl |
sim_run_test |
|
|
|
/video_frame_class/sim/scripts/sim_run_test.do
0,0 → 1,13
# ------------------------------------ |
# |
# ------------------------------------ |
|
do ../../scripts/sim_procs.do |
|
|
sim_run_test |
|
quit |
|
|
|
/axi4_stream_lib/sim/src/tb_axis_register_slice.sv
File deleted
/axi4_stream_lib/sim/libs/sim_verilog/tb_lib.f
File deleted
/axi4_stream_lib/sim/libs/sim_verilog/avf.f
File deleted
/axi4_stream_lib/syn/src/axis_if.sv
File deleted
/axi4_stream_lib/src/camera_link_to_axis_fsm.sv
File deleted
/axi4_stream_lib/src/axis_mux.sv
File deleted
/axi4_stream_lib/src/camera_link_to_axis.sv
File deleted
/axi4_stream_lib/src/axis_register_slice.sv
File deleted
/axi4_stream_lib/src/axis_to_vid_fsm.sv
File deleted
/axi4_stream_lib/src/axis_flow_control.sv
File deleted
/axi4_stream_lib/src/data_to_axis_fsm.sv
66,7 → 66,7
// state machine |
always_comb |
case(state) |
IDLE_STATE: if(axis_en & fifo_watermark & ~fifo_empty) |
IDLE_STATE: if(axis_en & fifo_watermark) |
if(axis_tready) |
next_state <= TREADY; |
else |
/sim_template/tests/debug/wip.do
0,0 → 1,12
# |
|
# vcom -explicit -O0 -f ../../libs/FPGA_VHDL/lib.f |
# vlog -O0 -f ../../libs/sim_verilog/bfm.f |
|
# simulation $root |
vlog -O0 ../../src/tb_top.sv |
|
# compile test last |
vlog ./the_test.sv |
|
|
/sim_template/tests/debug/init_test.do
0,0 → 1,32
# ------------------------------------ |
# |
# ------------------------------------ |
|
# load sim |
do ../../scripts/sim_procs.do |
|
global env |
|
set env(ROOT_DIR) ../../../.. |
set env(PROJECT_DIR) ../../.. |
set env(SIM_TARGET) fpga |
|
radix -hexadecimal |
|
make_lib work 1 |
|
sim_compile_all sim |
# sim_compile_all FPGA |
|
# simulation $root |
vlog -O0 ../../src/tb_top.sv |
|
# compile test last |
vlog -O0 ./the_test.sv |
|
|
# run the sim |
sim_run_test |
|
|
|
/sim_template/tests/debug/the_test.sv
0,0 → 1,40
// -------------------------------------------------------------------- |
// |
// -------------------------------------------------------------------- |
|
|
module the_test( |
input tb_clk, |
input tb_rst |
); |
|
// -------------------------------------------------------------------- |
// |
task run_the_test; |
|
// -------------------------------------------------------------------- |
// insert test below |
// -------------------------------------------------------------------- |
|
$display("^^^---------------------------------"); |
$display("^^^ %16.t | Testbench begun.\n", $time); |
$display("^^^---------------------------------"); |
|
|
wait(~tb_rst); |
|
repeat(1000) @(posedge tb_clk); |
|
|
// $stop(); |
|
|
// -------------------------------------------------------------------- |
// insert test above |
// -------------------------------------------------------------------- |
|
endtask |
|
|
endmodule |
|
/sim_template/tests/debug/sim.do
0,0 → 1,17
# |
# |
|
|
quit -sim |
|
vsim -novopt work.tb_top |
# vsim -voptargs="+acc=rn+/tb_top/dut" -L secureip -L simprims_ver -L unisims_ver work.glbl work.tb_top |
# vsim -pli "C:/Xilinx/Vivado/2015.4/lib/win64.o/libxil_vsim.dll" -novopt -L secureip -L simprims_ver -L unisims_ver work.glbl work.tb_top |
|
|
# # log all signals |
# log -r * |
|
# run -all ; |
|
|
/sim_template/scripts/sim_procs.do
0,0 → 1,108
# ------------------------------------ |
# |
# ------------------------------------ |
|
|
# ------------------------------------ |
# |
proc sim_compile_all { target } { |
|
global env |
|
echo "INFO: compiling $target rtl" |
|
foreach filename [glob -nocomplain -directory ../../libs/${target}_verilog/ *.f] { |
echo "INFO: compiling $filename" |
vlog -O0 -f $filename |
} |
|
foreach filename [glob -nocomplain -directory ../../libs/${target}_VHDL/ *.f] { |
echo "INFO: compiling $filename" |
vcom -explicit -O0 -f $filename |
} |
} |
|
|
# ------------------------------------ |
# |
proc sim_run_sim { } { |
|
if {[file exists ./sim.do]} { |
do ./sim.do |
} elseif {[file exists ../../libs/sim.do]} { |
do ../../libs/sim.do |
} elseif {[file exists ../../libs/altera_sim.f]} { |
vsim -novopt -f ../../libs/altera_sim.f -l transcript.txt work.tb_top |
} elseif {[file exists ../../libs/xilinx_sim.f]} { |
vsim -novopt -f ../../libs/xilinx_sim.f -l transcript.txt work.tb_top work.glbl |
} |
|
if { [file exists ./wave.do] } { |
do ./wave.do |
} |
} |
|
|
# ------------------------------------ |
# |
proc sim_run_test { } { |
|
global env |
|
# unique setup |
if { [file exists ./setup_test.do] } { |
do ./setup_test.do |
} |
|
if { [info exists env(MAKEFILE_TEST_RUN)] } { |
vlog +define+MAKEFILE_TEST_RUN ../../src/tb_top.v |
} else { |
sim_run_sim |
} |
|
run -all |
} |
|
|
# ------------------------------------ |
# |
proc sim_restart { } { |
|
global env |
|
# work in progress files to compile |
if { [file exists ./wip.do] } { |
echo "INFO: found ./wip.do" |
do ./wip.do |
} |
|
if { [string equal nodesign [runStatus]] } { |
sim_run_sim |
} else { |
restart -force |
} |
|
run -all |
} |
|
|
# ------------------------------------ |
# |
proc make_lib { lib {rebuild 0} } { |
|
if {[file exists $lib/_info]} { |
echo "INFO: Simulation library $lib already exists" |
|
if { $rebuild != 0 } { |
echo "INFO: Rebuilding library. Deleting ./$lib and recompiling all" |
quit -sim |
file delete -force ./$lib |
vlib $lib |
vmap $lib $lib |
} |
|
} else { |
vlib $lib |
vmap $lib $lib |
} |
} |
/sim_template/scripts/sim_run_test.do
0,0 → 1,13
# ------------------------------------ |
# |
# ------------------------------------ |
|
do ../../scripts/sim_procs.do |
|
|
sim_run_test |
|
quit |
|
|
|
/sim_template/libs/sim_verilog/tb_lib.f
0,0 → 1,16
# |
|
-mfcu |
|
${ROOT_DIR}/opencores/qaz_libs/tb_class/src/tb_clk_class.sv |
|
${ROOT_DIR}/opencores/qaz_libs/tb_class/src/tb_clk.sv |
${ROOT_DIR}/opencores/qaz_libs/tb_class/src/tb_base.sv |
|
|
|
|
|
|
|
|
/gear_box/sim/test/debug/wave.do
0,0 → 1,77
onerror {resume} |
quietly WaveActivateNextPane {} 0 |
add wave -noupdate -radix hexadecimal /tb_top/clk_250 |
add wave -noupdate -radix hexadecimal /tb_top/tb_rst |
add wave -noupdate -radix hexadecimal /tb_top/fifo_full |
add wave -noupdate -radix hexadecimal /tb_top/fifo_empty |
add wave -noupdate -radix hexadecimal /tb_top/tb_clk |
add wave -noupdate -radix hexadecimal /tb_top/fifo_wr_data |
add wave -noupdate -radix hexadecimal /tb_top/fifo_wr_en |
add wave -noupdate -radix hexadecimal -subitemconfig {{/tb_top/fifo_rd_data[12]} {-radix hexadecimal} {/tb_top/fifo_rd_data[11]} {-radix hexadecimal} {/tb_top/fifo_rd_data[10]} {-radix hexadecimal} {/tb_top/fifo_rd_data[9]} {-radix hexadecimal} {/tb_top/fifo_rd_data[8]} {-radix hexadecimal} {/tb_top/fifo_rd_data[7]} {-radix hexadecimal} {/tb_top/fifo_rd_data[6]} {-radix hexadecimal} {/tb_top/fifo_rd_data[5]} {-radix hexadecimal} {/tb_top/fifo_rd_data[4]} {-radix hexadecimal} {/tb_top/fifo_rd_data[3]} {-radix hexadecimal} {/tb_top/fifo_rd_data[2]} {-radix hexadecimal} {/tb_top/fifo_rd_data[1]} {-radix hexadecimal} {/tb_top/fifo_rd_data[0]} {-radix hexadecimal}} /tb_top/fifo_rd_data |
add wave -noupdate -radix hexadecimal /tb_top/fifo_rd_en |
add wave -noupdate -radix hexadecimal /tb_top/ugb_adc_bus |
add wave -noupdate -radix hexadecimal /tb_top/ugb_out |
add wave -noupdate -radix hexadecimal -subitemconfig {{/tb_top/ugb_out_r[103]} {-radix hexadecimal} {/tb_top/ugb_out_r[102]} {-radix hexadecimal} {/tb_top/ugb_out_r[101]} {-radix hexadecimal} {/tb_top/ugb_out_r[100]} {-radix hexadecimal} {/tb_top/ugb_out_r[99]} {-radix hexadecimal} {/tb_top/ugb_out_r[98]} {-radix hexadecimal} {/tb_top/ugb_out_r[97]} {-radix hexadecimal} {/tb_top/ugb_out_r[96]} {-radix hexadecimal} {/tb_top/ugb_out_r[95]} {-radix hexadecimal} {/tb_top/ugb_out_r[94]} {-radix hexadecimal} {/tb_top/ugb_out_r[93]} {-radix hexadecimal} {/tb_top/ugb_out_r[92]} {-radix hexadecimal} {/tb_top/ugb_out_r[91]} {-radix hexadecimal} {/tb_top/ugb_out_r[90]} {-radix hexadecimal} {/tb_top/ugb_out_r[89]} {-radix hexadecimal} {/tb_top/ugb_out_r[88]} {-radix hexadecimal} {/tb_top/ugb_out_r[87]} {-radix hexadecimal} {/tb_top/ugb_out_r[86]} {-radix hexadecimal} {/tb_top/ugb_out_r[85]} {-radix hexadecimal} {/tb_top/ugb_out_r[84]} {-radix hexadecimal} {/tb_top/ugb_out_r[83]} {-radix hexadecimal} {/tb_top/ugb_out_r[82]} {-radix hexadecimal} {/tb_top/ugb_out_r[81]} {-radix hexadecimal} {/tb_top/ugb_out_r[80]} {-radix hexadecimal} {/tb_top/ugb_out_r[79]} {-radix hexadecimal} {/tb_top/ugb_out_r[78]} {-radix hexadecimal} {/tb_top/ugb_out_r[77]} {-radix hexadecimal} {/tb_top/ugb_out_r[76]} {-radix hexadecimal} {/tb_top/ugb_out_r[75]} {-radix hexadecimal} {/tb_top/ugb_out_r[74]} {-radix hexadecimal} {/tb_top/ugb_out_r[73]} {-radix hexadecimal} {/tb_top/ugb_out_r[72]} {-radix hexadecimal} {/tb_top/ugb_out_r[71]} {-radix hexadecimal} {/tb_top/ugb_out_r[70]} {-radix hexadecimal} {/tb_top/ugb_out_r[69]} {-radix hexadecimal} {/tb_top/ugb_out_r[68]} {-radix hexadecimal} {/tb_top/ugb_out_r[67]} {-radix hexadecimal} {/tb_top/ugb_out_r[66]} {-radix hexadecimal} {/tb_top/ugb_out_r[65]} {-radix hexadecimal} {/tb_top/ugb_out_r[64]} {-radix hexadecimal} {/tb_top/ugb_out_r[63]} {-radix hexadecimal} {/tb_top/ugb_out_r[62]} {-radix hexadecimal} {/tb_top/ugb_out_r[61]} {-radix hexadecimal} {/tb_top/ugb_out_r[60]} {-radix hexadecimal} {/tb_top/ugb_out_r[59]} {-radix hexadecimal} {/tb_top/ugb_out_r[58]} {-radix hexadecimal} {/tb_top/ugb_out_r[57]} {-radix hexadecimal} {/tb_top/ugb_out_r[56]} {-radix hexadecimal} {/tb_top/ugb_out_r[55]} {-radix hexadecimal} {/tb_top/ugb_out_r[54]} {-radix hexadecimal} {/tb_top/ugb_out_r[53]} {-radix hexadecimal} {/tb_top/ugb_out_r[52]} {-radix hexadecimal} {/tb_top/ugb_out_r[51]} {-radix hexadecimal} {/tb_top/ugb_out_r[50]} {-radix hexadecimal} {/tb_top/ugb_out_r[49]} {-radix hexadecimal} {/tb_top/ugb_out_r[48]} {-radix hexadecimal} {/tb_top/ugb_out_r[47]} {-radix hexadecimal} {/tb_top/ugb_out_r[46]} {-radix hexadecimal} {/tb_top/ugb_out_r[45]} {-radix hexadecimal} {/tb_top/ugb_out_r[44]} {-radix hexadecimal} {/tb_top/ugb_out_r[43]} {-radix hexadecimal} {/tb_top/ugb_out_r[42]} {-radix hexadecimal} {/tb_top/ugb_out_r[41]} {-radix hexadecimal} {/tb_top/ugb_out_r[40]} {-radix hexadecimal} {/tb_top/ugb_out_r[39]} {-radix hexadecimal} {/tb_top/ugb_out_r[38]} {-radix hexadecimal} {/tb_top/ugb_out_r[37]} {-radix hexadecimal} {/tb_top/ugb_out_r[36]} {-radix hexadecimal} {/tb_top/ugb_out_r[35]} {-radix hexadecimal} {/tb_top/ugb_out_r[34]} {-radix hexadecimal} {/tb_top/ugb_out_r[33]} {-radix hexadecimal} {/tb_top/ugb_out_r[32]} {-radix hexadecimal} {/tb_top/ugb_out_r[31]} {-radix hexadecimal} {/tb_top/ugb_out_r[30]} {-radix hexadecimal} {/tb_top/ugb_out_r[29]} {-radix hexadecimal} {/tb_top/ugb_out_r[28]} {-radix hexadecimal} {/tb_top/ugb_out_r[27]} {-radix hexadecimal} {/tb_top/ugb_out_r[26]} {-radix hexadecimal} {/tb_top/ugb_out_r[25]} {-radix hexadecimal} {/tb_top/ugb_out_r[24]} {-radix hexadecimal} {/tb_top/ugb_out_r[23]} {-radix hexadecimal} {/tb_top/ugb_out_r[22]} {-radix hexadecimal} {/tb_top/ugb_out_r[21]} {-radix hexadecimal} {/tb_top/ugb_out_r[20]} {-radix hexadecimal} {/tb_top/ugb_out_r[19]} {-radix hexadecimal} {/tb_top/ugb_out_r[18]} {-radix hexadecimal} {/tb_top/ugb_out_r[17]} {-radix hexadecimal} {/tb_top/ugb_out_r[16]} {-radix hexadecimal} {/tb_top/ugb_out_r[15]} {-radix hexadecimal} {/tb_top/ugb_out_r[14]} {-radix hexadecimal} {/tb_top/ugb_out_r[13]} {-radix hexadecimal} {/tb_top/ugb_out_r[12]} {-radix hexadecimal} {/tb_top/ugb_out_r[11]} {-radix hexadecimal} {/tb_top/ugb_out_r[10]} {-radix hexadecimal} {/tb_top/ugb_out_r[9]} {-radix hexadecimal} {/tb_top/ugb_out_r[8]} {-radix hexadecimal} {/tb_top/ugb_out_r[7]} {-radix hexadecimal} {/tb_top/ugb_out_r[6]} {-radix hexadecimal} {/tb_top/ugb_out_r[5]} {-radix hexadecimal} {/tb_top/ugb_out_r[4]} {-radix hexadecimal} {/tb_top/ugb_out_r[3]} {-radix hexadecimal} {/tb_top/ugb_out_r[2]} {-radix hexadecimal} {/tb_top/ugb_out_r[1]} {-radix hexadecimal} {/tb_top/ugb_out_r[0]} {-radix hexadecimal}} /tb_top/ugb_out_r |
add wave -noupdate -radix hexadecimal -subitemconfig {{/tb_top/dbg_ugb_shift[7]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[6]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[5]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[4]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[3]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[2]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[1]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[0]} {-height 15 -radix hexadecimal}} -expand -subitemconfig {{/tb_top/dbg_ugb_shift[7]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[6]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[5]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[4]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[3]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[2]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[1]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_shift[0]} {-height 15 -radix hexadecimal}} /tb_top/dbg_ugb_shift |
add wave -noupdate -radix hexadecimal -subitemconfig {{/tb_top/dbg_ugb_out[12]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[11]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[10]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[9]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[8]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[7]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[6]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[5]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[4]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[3]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[2]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[1]} {-radix hexadecimal} {/tb_top/dbg_ugb_out[0]} {-radix hexadecimal}} /tb_top/dbg_ugb_out |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/fifo_clock |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/fifo_wr_data |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/fifo_wr_en |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/fifo_full |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/fifo_rd_en |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/fifo_rd_data |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/fifo_empty |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/fifo_reset |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/wr_en |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/wr_ptr |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/rd_en |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/rd_ptr |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/ptr_are_equal |
add wave -noupdate -radix hexadecimal /tb_top/i_sync_fifo/ptr_msb_are_equal |
add wave -noupdate -radix hexadecimal -subitemconfig {{/tb_top/i_sync_fifo/reg_file[3]} {-height 15 -radix hexadecimal} {/tb_top/i_sync_fifo/reg_file[2]} {-height 15 -radix hexadecimal} {/tb_top/i_sync_fifo/reg_file[1]} {-height 15 -radix hexadecimal} {/tb_top/i_sync_fifo/reg_file[0]} {-height 15 -radix hexadecimal}} -expand -subitemconfig {{/tb_top/i_sync_fifo/reg_file[3]} {-height 15 -radix hexadecimal} {/tb_top/i_sync_fifo/reg_file[2]} {-height 15 -radix hexadecimal} {/tb_top/i_sync_fifo/reg_file[1]} {-height 15 -radix hexadecimal} {/tb_top/i_sync_fifo/reg_file[0]} {-height 15 -radix hexadecimal}} /tb_top/i_sync_fifo/reg_file |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/adc_bus |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/out |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/clk_250 |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/sys_reset |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/adc_bus_bank_select |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/gear_select |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/ugb_enable |
add wave -noupdate -radix hexadecimal -subitemconfig {{/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[12]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[11]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[10]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[9]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[8]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[7]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[6]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[5]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[4]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[3]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[2]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[1]} {-radix hexadecimal} {/tb_top/i_unbuffered_gear_box/adc_bus_b0_r[0]} {-radix hexadecimal}} /tb_top/i_unbuffered_gear_box/adc_bus_b0_r |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/adc_bus_b1_r |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/adc_bus_b0_w |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/adc_bus_b1_w |
add wave -noupdate -radix hexadecimal /tb_top/i_unbuffered_gear_box/adc_bus_mux |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -radix hexadecimal -subitemconfig {{/tb_top/dbg_ugb_pixels_out_r[7]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[6]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[5]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[4]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[3]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[2]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[1]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[0]} {-height 15 -radix hexadecimal}} -expand -subitemconfig {{/tb_top/dbg_ugb_pixels_out_r[7]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[6]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[5]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[4]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[3]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[2]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[1]} {-height 15 -radix hexadecimal} {/tb_top/dbg_ugb_pixels_out_r[0]} {-height 15 -radix hexadecimal}} /tb_top/dbg_ugb_pixels_out_r |
add wave -noupdate -divider {New Divider} |
add wave -noupdate -radix hexadecimal /tb_top/tb_rst |
add wave -noupdate -radix hexadecimal /tb_top/fifo_wr_data |
add wave -noupdate -radix hexadecimal /tb_top/fifo_wr_en |
add wave -noupdate -radix hexadecimal /tb_top/fifo_full |
add wave -noupdate -radix hexadecimal -subitemconfig {{/tb_top/fifo_rd_data[12]} {-radix hexadecimal} {/tb_top/fifo_rd_data[11]} {-radix hexadecimal} {/tb_top/fifo_rd_data[10]} {-radix hexadecimal} {/tb_top/fifo_rd_data[9]} {-radix hexadecimal} {/tb_top/fifo_rd_data[8]} {-radix hexadecimal} {/tb_top/fifo_rd_data[7]} {-radix hexadecimal} {/tb_top/fifo_rd_data[6]} {-radix hexadecimal} {/tb_top/fifo_rd_data[5]} {-radix hexadecimal} {/tb_top/fifo_rd_data[4]} {-radix hexadecimal} {/tb_top/fifo_rd_data[3]} {-radix hexadecimal} {/tb_top/fifo_rd_data[2]} {-radix hexadecimal} {/tb_top/fifo_rd_data[1]} {-radix hexadecimal} {/tb_top/fifo_rd_data[0]} {-radix hexadecimal}} /tb_top/fifo_rd_data |
add wave -noupdate -radix hexadecimal /tb_top/fifo_rd_en |
add wave -noupdate -radix hexadecimal /tb_top/fifo_empty |
add wave -noupdate -radix hexadecimal /tb_top/bank_sel |
add wave -noupdate -radix unsigned /tb_top/gear |
add wave -noupdate -radix hexadecimal /tb_top/gear_box_out |
add wave -noupdate -radix hexadecimal /tb_top/clk_250 |
add wave -noupdate -divider {New Divider} |
TreeUpdate [SetDefaultTree] |
WaveRestoreCursors {{Cursor 1} {43950 ps} 0} |
configure wave -namecolwidth 197 |
configure wave -valuecolwidth 100 |
configure wave -justifyvalue left |
configure wave -signalnamewidth 0 |
configure wave -snapdistance 10 |
configure wave -datasetprefix 0 |
configure wave -rowmargin 4 |
configure wave -childrowmargin 2 |
configure wave -gridoffset 0 |
configure wave -gridperiod 1 |
configure wave -griddelta 40 |
configure wave -timeline 0 |
configure wave -timelineunits ps |
update |
WaveRestoreZoom {0 ps} {890400 ps} |
.
Property changes :
Modified: svn:global-ignores
## -1,2 +1 ##
__tmp
-IMC
Modified: svn:ignore
## -1,2 +1 ##
uvm_guide_for_beginners
-.hgignore