OpenCores
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
    /
    from Rev 28 to Rev 27
    Reverse comparison

Rev 28 → Rev 27

/qaz_libs/trunk/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
/qaz_libs/trunk/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
/qaz_libs/trunk/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;
/qaz_libs/trunk/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
/qaz_libs/trunk/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
// | | | | | | | | | | | | | | | | |
/qaz_libs/trunk/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
// | | | | | | | | | | | | | | | | |
/qaz_libs/trunk/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
/qaz_libs/trunk/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}
/qaz_libs/trunk/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);
 
/qaz_libs/trunk/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);
 
/qaz_libs/trunk/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}
/qaz_libs/trunk/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
/qaz_libs/trunk/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
 
/qaz_libs/trunk/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);
 
/qaz_libs/trunk/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
/qaz_libs/trunk/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 ) );
/qaz_libs/trunk/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;
}
 
/qaz_libs/trunk/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 }
/qaz_libs/trunk/misc/src/pulse_stretcher.v
34,6 → 34,8
(
input in,
output out,
input reset,
input clock
);
/qaz_libs/trunk/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
 
 
/qaz_libs/trunk/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,
/qaz_libs/trunk/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
 
}
 
 
/qaz_libs/trunk/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
 
 
 
/qaz_libs/trunk/video_frame_class/sim/scripts/sim_run_test.do
0,0 → 1,13
# ------------------------------------
#
# ------------------------------------
 
do ../../scripts/sim_procs.do
 
 
sim_run_test
 
quit
 
 
 
/qaz_libs/trunk/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
/qaz_libs/trunk/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
 
/qaz_libs/trunk/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
 
 
 
/qaz_libs/trunk/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
 
/qaz_libs/trunk/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 ;
 
 
/qaz_libs/trunk/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
}
}
/qaz_libs/trunk/sim_template/scripts/sim_run_test.do
0,0 → 1,13
# ------------------------------------
#
# ------------------------------------
 
do ../../scripts/sim_procs.do
 
 
sim_run_test
 
quit
 
 
 
/qaz_libs/trunk/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
 
 
 
 
 
 
 
 
/qaz_libs/trunk/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}
qaz_libs/trunk Property changes : Modified: svn:global-ignores ## -1,2 +1 ## __tmp -IMC Modified: svn:ignore ## -1,2 +1 ## uvm_guide_for_beginners -.hgignore

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.