debugging controller

This commit is contained in:
otroubi
2026-07-08 17:53:25 +03:00
parent e7c45101d1
commit 99a344d534
4 changed files with 397 additions and 381 deletions

View File

@ -10,9 +10,13 @@ module control #(
// adc_clk_in domain // adc_clk_in domain
input logic finish, input logic finish,
input logic [127:0] cfg_bus, input logic [127:0] cfg_bus_input,
input logic cfg_bus_valid,
input logic start, input logic start,
// status signals
output logic busy,
// dac_clk_in domain outputs // dac_clk_in domain outputs
output logic [31:0] dac_pulse_width, output logic [31:0] dac_pulse_width,
output logic [31:0] dac_pulse_period, output logic [31:0] dac_pulse_period,
@ -83,6 +87,10 @@ module control #(
assign dac_rst_int = dac_rst_ff2; assign dac_rst_int = dac_rst_ff2;
assign adc_rst_int = adc_rst_ff2; assign adc_rst_int = adc_rst_ff2;
// Pending ACKs for config delivery
logic cfg_wait_dac_ack;
logic cfg_wait_adc_ack;
wire cfg_busy = cfg_wait_dac_ack || cfg_wait_adc_ack;
// Event toggles cntrl -> DAC/ADC // Event toggles cntrl -> DAC/ADC
logic start_toggle; logic start_toggle;
@ -99,8 +107,8 @@ module control #(
(* ASYNC_REG = "TRUE" *) logic cfg_ack_toggle_dac_meta, cfg_ack_toggle_dac_sync, cfg_ack_toggle_dac_sync_d; (* ASYNC_REG = "TRUE" *) logic cfg_ack_toggle_dac_meta, cfg_ack_toggle_dac_sync, cfg_ack_toggle_dac_sync_d;
(* ASYNC_REG = "TRUE" *) logic cfg_ack_toggle_adc_meta, cfg_ack_toggle_adc_sync, cfg_ack_toggle_adc_sync_d; (* ASYNC_REG = "TRUE" *) logic cfg_ack_toggle_adc_meta, cfg_ack_toggle_adc_sync, cfg_ack_toggle_adc_sync_d;
wire cfg_ack_pulse_dac_eth = cfg_ack_toggle_dac_sync ^ cfg_ack_toggle_dac_sync_d; wire cfg_ack_pulse_dac = cfg_ack_toggle_dac_sync ^ cfg_ack_toggle_dac_sync_d;
wire cfg_ack_pulse_adc_eth = cfg_ack_toggle_adc_sync ^ cfg_ack_toggle_adc_sync_d; wire cfg_ack_pulse_adc = cfg_ack_toggle_adc_sync ^ cfg_ack_toggle_adc_sync_d;
always_ff @(posedge ctrl_clk or posedge ctrl_rst) begin always_ff @(posedge ctrl_clk or posedge ctrl_rst) begin
if (ctrl_rst) begin if (ctrl_rst) begin
@ -148,7 +156,54 @@ module control #(
end end
end end
// ETH -> DAC: start/reset event sync logic [127:0] cfg_bus;
always_ff @(posedge ctrl_clk or posedge ctrl_rst) begin
if (ctrl_rst) begin
cfg_bus <= '0;
busy <= 0;
start_toggle <= 0;
rst_toggle <= 0;
cfg_req_toggle_dac <= 0;
cfg_req_toggle_adc <= 0;
cfg_wait_dac_ack <= 0;
cfg_wait_adc_ack <= 0;
end else begin
if (finish_pulse) begin
busy <= 0;
end
if (cfg_ack_pulse_dac) begin
cfg_wait_dac_ack <= 1'b0;
end
if (cfg_ack_pulse_adc) begin
cfg_wait_adc_ack <= 1'b0;
end
if (cfg_bus_valid && !busy && !cfg_busy) begin
cfg_bus <= cfg_bus_input;
cfg_req_toggle_dac <= ~cfg_req_toggle_dac;
cfg_req_toggle_adc <= ~cfg_req_toggle_adc;
cfg_wait_dac_ack <= 1;
cfg_wait_adc_ack <= 1;
end
if (start && !busy && !cfg_busy) begin
start_toggle <= ~start_toggle;
busy <= 1;
end
if (rst_soft) begin
rst_toggle <= ~rst_toggle;
end
end
end
// cntrl -> DAC: start/reset event sync
(* ASYNC_REG = "TRUE" *) logic start_meta_dac, start_sync_dac; (* ASYNC_REG = "TRUE" *) logic start_meta_dac, start_sync_dac;
logic start_sync_dac_d; logic start_sync_dac_d;
(* ASYNC_REG = "TRUE" *) logic rst_meta_dac, rst_sync_dac; (* ASYNC_REG = "TRUE" *) logic rst_meta_dac, rst_sync_dac;
@ -236,7 +291,7 @@ module control #(
dac_pulse_num <= '0; dac_pulse_num <= '0;
dac_pulse_height <= '0; dac_pulse_height <= '0;
end else begin end else begin
cfg_req_meta_dac <= cfg_req_toggle_dac_eth; cfg_req_meta_dac <= cfg_req_toggle_dac;
cfg_req_sync_dac <= cfg_req_meta_dac; cfg_req_sync_dac <= cfg_req_meta_dac;
cfg_req_sync_dac_d <= cfg_req_sync_dac; cfg_req_sync_dac_d <= cfg_req_sync_dac;
@ -251,7 +306,7 @@ module control #(
end end
end end
// ETH -> ADC config CDC // cntrl -> ADC config CDC
logic cfg_req_meta_adc, cfg_req_sync_adc, cfg_req_sync_adc_d; logic cfg_req_meta_adc, cfg_req_sync_adc, cfg_req_sync_adc_d;
wire cfg_req_pulse_adc = cfg_req_sync_adc ^ cfg_req_sync_adc_d; wire cfg_req_pulse_adc = cfg_req_sync_adc ^ cfg_req_sync_adc_d;
@ -265,7 +320,7 @@ module control #(
adc_pulse_period <= '0; adc_pulse_period <= '0;
adc_pulse_num <= '0; adc_pulse_num <= '0;
end else begin end else begin
cfg_req_meta_adc <= cfg_req_toggle_adc_eth; cfg_req_meta_adc <= cfg_req_toggle_adc;
cfg_req_sync_adc <= cfg_req_meta_adc; cfg_req_sync_adc <= cfg_req_meta_adc;
cfg_req_sync_adc_d <= cfg_req_sync_adc; cfg_req_sync_adc_d <= cfg_req_sync_adc;

View File

@ -96,9 +96,12 @@ module controller_wrapper_axil #(
.rst_n(rst_n), .rst_n(rst_n),
.rst_soft(rst_soft), .rst_soft(rst_soft),
.finish(finish), .finish(finish),
.cfg_bus(cfg_bus), .cfg_bus_input(cfg_bus),
.cfg_bus_valid(cfg_bus_valid),
.start(start), .start(start),
.busy(busy),
.dac_pulse_width(dac_pulse_width), .dac_pulse_width(dac_pulse_width),
.dac_pulse_period(dac_pulse_period), .dac_pulse_period(dac_pulse_period),
.dac_pulse_height(dac_pulse_height), .dac_pulse_height(dac_pulse_height),

View File

@ -4,23 +4,46 @@ module tb_control;
localparam int unsigned DAC_DATA_WIDTH = 12; localparam int unsigned DAC_DATA_WIDTH = 12;
//------------------------------------------------------------
// Clocks / reset // clocks
logic eth_clk_in; //------------------------------------------------------------
logic ctrl_clk;
logic dac_clk_in; logic dac_clk_in;
logic adc_clk_in; logic adc_clk_in;
initial begin
ctrl_clk = 0;
forever #4 ctrl_clk = ~ctrl_clk; //125 MHz
end
initial begin
dac_clk_in = 0;
forever #3.846 dac_clk_in = ~dac_clk_in; //~130 MHz
end
initial begin
adc_clk_in = 0;
forever #7.692 adc_clk_in = ~adc_clk_in; //~65 MHz
end
//------------------------------------------------------------
// DUT inputs
//------------------------------------------------------------
logic rst_n; logic rst_n;
logic rst_soft;
// axi stream (input)
logic [7:0] s_axis_tdata;
logic s_axis_tvalid;
logic s_axis_tready;
logic s_axis_tlast;
// ADC side input
logic finish; logic finish;
logic [127:0] cfg_bus_input;
logic cfg_bus_valid;
logic start;
//------------------------------------------------------------
// DUT outputs // DUT outputs
//------------------------------------------------------------
logic busy;
logic [31:0] dac_pulse_width; logic [31:0] dac_pulse_width;
logic [31:0] dac_pulse_period; logic [31:0] dac_pulse_period;
logic [DAC_DATA_WIDTH-1:0] dac_pulse_height; logic [DAC_DATA_WIDTH-1:0] dac_pulse_height;
@ -31,355 +54,245 @@ module tb_control;
logic dac_start; logic dac_start;
logic adc_start; logic adc_start;
logic dac_rst; logic dac_rst;
logic adc_rst; logic adc_rst;
//------------------------------------------------------------
// DUT // DUT
//------------------------------------------------------------
control #( control #(
.DAC_DATA_WIDTH(DAC_DATA_WIDTH) .DAC_DATA_WIDTH(DAC_DATA_WIDTH)
) dut ( ) dut (
.eth_clk_in (eth_clk_in), .ctrl_clk(ctrl_clk),
.dac_clk_in (dac_clk_in), .dac_clk_in(dac_clk_in),
.adc_clk_in (adc_clk_in), .adc_clk_in(adc_clk_in),
.rst_n (rst_n),
.s_axis_tdata (s_axis_tdata), .rst_n(rst_n),
.s_axis_tvalid (s_axis_tvalid), .rst_soft(rst_soft),
.s_axis_tready (s_axis_tready),
.s_axis_tlast (s_axis_tlast),
.finish (finish), .finish(finish),
.dac_pulse_width (dac_pulse_width), .cfg_bus_input(cfg_bus_input),
.dac_pulse_period (dac_pulse_period), .cfg_bus_valid(cfg_bus_valid),
.dac_pulse_height (dac_pulse_height),
.dac_pulse_num (dac_pulse_num),
.adc_pulse_period (adc_pulse_period), .start(start),
.adc_pulse_num (adc_pulse_num),
.dac_start (dac_start), .busy(busy),
.adc_start (adc_start),
.dac_rst (dac_rst), .dac_pulse_width(dac_pulse_width),
.adc_rst (adc_rst) .dac_pulse_period(dac_pulse_period),
.dac_pulse_height(dac_pulse_height),
.dac_pulse_num(dac_pulse_num),
.adc_pulse_period(adc_pulse_period),
.adc_pulse_num(adc_pulse_num),
.dac_start(dac_start),
.adc_start(adc_start),
.dac_rst(dac_rst),
.adc_rst(adc_rst)
); );
//------------------------------------------------------------
// pulse counters
//------------------------------------------------------------
// Clock generation
initial begin
eth_clk_in = 1'b0;
forever #(1 * 4.000) eth_clk_in = ~eth_clk_in; // 125 MHz
end
initial begin
dac_clk_in = 1'b0;
forever #(1 * 3.846153846) dac_clk_in = ~dac_clk_in; // ~130 MHz
end
initial begin
adc_clk_in = 1'b0;
forever #(1 * 7.692307692) adc_clk_in = ~adc_clk_in; // ~65 MHz
end
// pulse counters and monitors for testing
int dac_rst_count;
int adc_rst_count;
int dac_start_count; int dac_start_count;
int adc_start_count; int adc_start_count;
int dac_rst_count;
int adc_rst_count;
always_ff @(posedge dac_clk_in) begin always_ff @(posedge dac_clk_in) begin
if (!rst_n) begin if (!rst_n) begin
dac_rst_count <= 0;
dac_start_count <= 0; dac_start_count <= 0;
end else begin dac_rst_count <= 0;
if (dac_rst) dac_rst_count <= dac_rst_count + 1; end
if (dac_start) dac_start_count <= dac_start_count + 1; else begin
if (dac_start) dac_start_count++;
if (dac_rst) dac_rst_count++;
end end
end end
always_ff @(posedge adc_clk_in) begin always_ff @(posedge adc_clk_in) begin
if (!rst_n) begin if (!rst_n) begin
adc_rst_count <= 0;
adc_start_count <= 0; adc_start_count <= 0;
end else begin adc_rst_count <= 0;
if (adc_rst) adc_rst_count <= adc_rst_count + 1; end
if (adc_start) adc_start_count <= adc_start_count + 1; else begin
if (adc_start) adc_start_count++;
if (adc_rst) adc_rst_count++;
end end
end end
//------------------------------------------------------------
// tasks
//------------------------------------------------------------
// some helpers for axi task automatic send_cfg(
task automatic axis_send_byte(input logic [7:0] data, input logic last);
begin
@(negedge eth_clk_in);
s_axis_tdata <= data;
s_axis_tvalid <= 1'b1;
s_axis_tlast <= last;
@(posedge eth_clk_in);
while (!s_axis_tready) begin
@(posedge eth_clk_in);
end
s_axis_tvalid <= 1'b0;
s_axis_tlast <= 1'b0;
s_axis_tdata <= '0;
end
endtask
task automatic send_cmd(input logic [7:0] cmd);
begin
axis_send_byte(cmd, 1'b1);
end
endtask
task automatic send_set_data(
input logic [31:0] pulse_width, input logic [31:0] pulse_width,
input logic [31:0] pulse_period, input logic [31:0] pulse_period,
input logic [15:0] pulse_num, input logic [15:0] pulse_num,
input logic [15:0] pulse_height_raw, input logic [15:0] pulse_height,
input logic [31:0] pulse_period_adc input logic [31:0] adc_period
); );
logic [127:0] payload;
int i;
begin begin
// little-endian payload layout:
// [31:0] pulse_width
// [63:32] pulse_period
// [79:64] pulse_num
// [95:80] pulse_height_raw
// [127:96] pulse_period_ADC
payload = {pulse_period_adc, pulse_height_raw, pulse_num, pulse_period, pulse_width}; cfg_bus_input = {
adc_period,
pulse_height,
pulse_num,
pulse_period,
pulse_width
};
axis_send_byte(8'h88, 1'b0); // CMD_SET_DATA @(posedge ctrl_clk);
cfg_bus_valid <= 1;
@(posedge ctrl_clk);
cfg_bus_valid <= 0;
for (i = 0; i < 16; i++) begin
axis_send_byte(payload[i*8 +: 8], (i == 15));
end end
endtask
task automatic send_start;
begin
@(posedge ctrl_clk);
start <= 1;
@(posedge ctrl_clk);
start <= 0;
end
endtask
task automatic send_soft_reset;
begin
@(posedge ctrl_clk);
rst_soft <= 1;
@(posedge ctrl_clk);
rst_soft <= 0;
end end
endtask endtask
task automatic pulse_finish; task automatic pulse_finish;
begin begin
@(posedge adc_clk_in); @(posedge adc_clk_in);
finish <= 1'b1; finish <= 1;
@(posedge adc_clk_in); @(posedge adc_clk_in);
finish <= 1'b0; finish <= 0;
end end
endtask endtask
//------------------------------------------------------------
// waiters // TEST
task automatic wait_dac_rst_count(input int expected, input int max_cycles = 100); //------------------------------------------------------------
int i;
begin
for (i = 0; i < max_cycles; i++) begin
@(posedge dac_clk_in);
if (dac_rst_count >= expected) return;
end
$fatal(1, "Timeout waiting for dac_rst_count >= %0d, current=%0d", expected, dac_rst_count);
end
endtask
task automatic wait_adc_rst_count(input int expected, input int max_cycles = 100);
int i;
begin
for (i = 0; i < max_cycles; i++) begin
@(posedge adc_clk_in);
if (adc_rst_count >= expected) return;
end
$fatal(1, "Timeout waiting for adc_rst_count >= %0d, current=%0d", expected, adc_rst_count);
end
endtask
task automatic wait_dac_start_count(input int expected, input int max_cycles = 100);
int i;
begin
for (i = 0; i < max_cycles; i++) begin
@(posedge dac_clk_in);
if (dac_start_count >= expected) return;
end
$fatal(1, "Timeout waiting for dac_start_count >= %0d, current=%0d", expected, dac_start_count);
end
endtask
task automatic wait_adc_start_count(input int expected, input int max_cycles = 100);
int i;
begin
for (i = 0; i < max_cycles; i++) begin
@(posedge adc_clk_in);
if (adc_start_count >= expected) return;
end
$fatal(1, "Timeout waiting for adc_start_count >= %0d, current=%0d", expected, adc_start_count);
end
endtask
task automatic wait_cfg_applied(
input logic [31:0] exp_pulse_width,
input logic [31:0] exp_pulse_period,
input logic [15:0] exp_pulse_num,
input logic [15:0] exp_pulse_height_raw,
input logic [31:0] exp_pulse_period_adc,
input int max_cycles = 200
);
logic [DAC_DATA_WIDTH-1:0] exp_dac_height;
int i;
begin
exp_dac_height = exp_pulse_height_raw[DAC_DATA_WIDTH-1:0];
for (i = 0; i < max_cycles; i++) begin
@(posedge eth_clk_in);
if ((dac_pulse_width === exp_pulse_width ) &&
(dac_pulse_period === exp_pulse_period) &&
(dac_pulse_num === exp_pulse_num ) &&
(dac_pulse_height === exp_dac_height ) &&
(adc_pulse_period === exp_pulse_period_adc) &&
(adc_pulse_num === exp_pulse_num )) begin
return;
end
end
$fatal(1,
"Timeout waiting config outputs. Got: dac_width=%h dac_period=%h dac_num=%h dac_height=%h adc_period=%h adc_num=%h",
dac_pulse_width, dac_pulse_period, dac_pulse_num, dac_pulse_height,
adc_pulse_period, adc_pulse_num
);
end
endtask
// Test sequence
logic [31:0] test_pulse_width;
logic [31:0] test_pulse_period;
logic [15:0] test_pulse_num;
logic [15:0] test_pulse_height_raw;
logic [31:0] test_pulse_period_adc;
initial begin initial begin
// defaults
rst_n = 1'b0;
s_axis_tdata = '0;
s_axis_tvalid = 1'b0;
s_axis_tlast = 1'b0;
finish = 1'b0;
test_pulse_width = 32'h11223344; rst_n = 0;
test_pulse_period = 32'h55667788; rst_soft = 0;
test_pulse_num = 16'hA1B2;
test_pulse_height_raw = 16'h0CDE; // for DAC_DATA_WIDTH=12 => 12'hCDE
test_pulse_period_adc = 32'h50607080;
repeat (10) @(posedge eth_clk_in); finish = 0;
rst_n = 1'b1;
repeat (10) @(posedge eth_clk_in); start = 0;
$display("[%0t] TEST 1: soft_reset", $time); cfg_bus_valid = 0;
send_cmd(8'h0F); cfg_bus_input = 0;
wait_dac_rst_count(1); repeat(10) @(posedge ctrl_clk);
wait_adc_rst_count(1);
if (dac_rst_count != 1) begin rst_n = 1;
$fatal(1, "Expected exactly one dac_rst pulse after first soft_reset, got %0d", dac_rst_count);
end
if (adc_rst_count != 1) begin
$fatal(1, "Expected exactly one adc_rst pulse after first soft_reset, got %0d", adc_rst_count);
end
$display("[%0t] TEST 1 passed", $time); repeat(10) @(posedge ctrl_clk);
$display("[%0t] TEST 2: set_data", $time); //--------------------------------------------------------
send_set_data( // TEST 1 RESET
test_pulse_width, //--------------------------------------------------------
test_pulse_period,
test_pulse_num, $display("TEST RESET");
test_pulse_height_raw,
test_pulse_period_adc send_soft_reset();
repeat(20) @(posedge ctrl_clk);
assert(dac_rst_count==1);
assert(adc_rst_count==1);
//--------------------------------------------------------
// TEST 2 CONFIG
//--------------------------------------------------------
$display("TEST CONFIG");
send_cfg(
32'h11223344,
32'h55667788,
16'hA1B2,
16'h0CDE,
32'h50607080
); );
wait_cfg_applied( repeat(30) @(posedge ctrl_clk);
test_pulse_width,
test_pulse_period,
test_pulse_num,
test_pulse_height_raw,
test_pulse_period_adc
);
if (dac_pulse_width !== 32'h11223344) begin assert(dac_pulse_width == 32'h11223344);
$fatal(1, "dac_pulse_width mismatch: got %h expected %h", dac_pulse_width, 32'h11223344); assert(dac_pulse_period == 32'h55667788);
end assert(dac_pulse_num == 16'hA1B2);
if (dac_pulse_period !== 32'h55667788) begin assert(dac_pulse_height == 12'hCDE);
$fatal(1, "dac_pulse_period mismatch: got %h expected %h", dac_pulse_period, 32'h55667788);
end
if (dac_pulse_num !== 16'hA1B2) begin
$fatal(1, "dac_pulse_num mismatch: got %h expected %h", dac_pulse_num, 16'hA1B2);
end
if (dac_pulse_height !== 12'hCDE) begin
$fatal(1, "dac_pulse_height mismatch: got %h expected %h", dac_pulse_height, 12'hCDE);
end
if (adc_pulse_period !== 32'h50607080) begin
$fatal(1, "adc_pulse_period mismatch: got %h expected %h", adc_pulse_period, 32'h50607080);
end
if (adc_pulse_num !== 16'hA1B2) begin
$fatal(1, "adc_pulse_num mismatch: got %h expected %h", adc_pulse_num, 16'hA1B2);
end
$display("[%0t] TEST 2 passed", $time); assert(adc_pulse_period == 32'h50607080);
assert(adc_pulse_num == 16'hA1B2);
repeat (20) @(posedge eth_clk_in); //--------------------------------------------------------
// TEST 3 START
//--------------------------------------------------------
$display("[%0t] TEST 3: start", $time); $display("TEST START");
send_cmd(8'hF0);
wait_dac_start_count(1); send_start();
wait_adc_start_count(1);
if (dac_start_count != 1) begin repeat(20) @(posedge ctrl_clk);
$fatal(1, "Expected exactly one dac_start pulse after first start, got %0d", dac_start_count);
end
if (adc_start_count != 1) begin
$fatal(1, "Expected exactly one adc_start pulse after first start, got %0d", adc_start_count);
end
$display("[%0t] TEST 3 start pulses passed", $time); assert(busy);
assert(dac_start_count==1);
assert(adc_start_count==1);
//--------------------------------------------------------
// TEST 4 FINISH
//--------------------------------------------------------
$display("TEST FINISH");
// release busy by finish pulse from ADC domain
$display("[%0t] Sending finish pulse", $time);
pulse_finish(); pulse_finish();
// a bit of wait for finish CDC back to ETH repeat(20) @(posedge ctrl_clk);
repeat (20) @(posedge eth_clk_in);
// sanity check that commands are accepted again after finish assert(!busy);
$display("[%0t] TEST 4: soft_reset after finish", $time);
send_cmd(8'h0F);
wait_dac_rst_count(2); //--------------------------------------------------------
wait_adc_rst_count(2); // TEST 5 START AGAIN
//--------------------------------------------------------
if (dac_rst_count != 2) begin send_start();
$fatal(1, "Expected exactly two dac_rst pulses total, got %0d", dac_rst_count);
end
if (adc_rst_count != 2) begin
$fatal(1, "Expected exactly two adc_rst pulses total, got %0d", adc_rst_count);
end
$display("[%0t] TEST 4 passed", $time); repeat(20) @(posedge ctrl_clk);
$display("=============================================="); assert(dac_start_count==2);
$display("ALL BASIC TESTS PASSED"); assert(adc_start_count==2);
$display("dac_rst_count = %0d", dac_rst_count);
$display("adc_rst_count = %0d", adc_rst_count); //--------------------------------------------------------
$display("dac_start_count = %0d", dac_start_count);
$display("adc_start_count = %0d", adc_start_count); $display("");
$display("=============================================="); $display("==============================");
$display("ALL TESTS PASSED");
$display("==============================");
#100; #100;
$finish; $finish;
end end
endmodule endmodule

View File

@ -11,187 +11,232 @@
</db_ref> </db_ref>
</db_ref_list> </db_ref_list>
<zoom_setting> <zoom_setting>
<ZoomStartTime time="0.676 ns"></ZoomStartTime> <ZoomStartTime time="0.000 ns"></ZoomStartTime>
<ZoomEndTime time="645.677 ns"></ZoomEndTime> <ZoomEndTime time="575.529 ns"></ZoomEndTime>
<Cursor1Time time="349.676 ns"></Cursor1Time> <Cursor1Time time="391.616 ns"></Cursor1Time>
</zoom_setting> </zoom_setting>
<column_width_setting> <column_width_setting>
<NameColumnWidth column_width="558"></NameColumnWidth> <NameColumnWidth column_width="495"></NameColumnWidth>
<ValueColumnWidth column_width="61"></ValueColumnWidth> <ValueColumnWidth column_width="116"></ValueColumnWidth>
</column_width_setting> </column_width_setting>
<WVObjectSize size="23" /> <WVObjectSize size="35" />
<wvobject type="logic" fp_name="/tb_control/eth_clk_in"> <wvobject fp_name="/tb_control/dac_clk_in" type="logic">
<obj_property name="ElementShortName">eth_clk_in</obj_property>
<obj_property name="ObjectShortName">eth_clk_in</obj_property>
<obj_property name="CustomSignalColor">#008080</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/tb_control/dac_clk_in">
<obj_property name="ElementShortName">dac_clk_in</obj_property> <obj_property name="ElementShortName">dac_clk_in</obj_property>
<obj_property name="ObjectShortName">dac_clk_in</obj_property> <obj_property name="ObjectShortName">dac_clk_in</obj_property>
<obj_property name="CustomSignalColor">#FFA500</obj_property> <obj_property name="CustomSignalColor">#FFA500</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/adc_clk_in"> <wvobject fp_name="/tb_control/adc_clk_in" type="logic">
<obj_property name="ElementShortName">adc_clk_in</obj_property> <obj_property name="ElementShortName">adc_clk_in</obj_property>
<obj_property name="ObjectShortName">adc_clk_in</obj_property> <obj_property name="ObjectShortName">adc_clk_in</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/rst_n"> <wvobject fp_name="/tb_control/rst_n" type="logic">
<obj_property name="ElementShortName">rst_n</obj_property> <obj_property name="ElementShortName">rst_n</obj_property>
<obj_property name="ObjectShortName">rst_n</obj_property> <obj_property name="ObjectShortName">rst_n</obj_property>
<obj_property name="CustomSignalColor">#800080</obj_property> <obj_property name="CustomSignalColor">#800080</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/s_axis_tdata"> <wvobject fp_name="/tb_control/rst_soft" type="logic">
<obj_property name="ElementShortName">s_axis_tdata[7:0]</obj_property> <obj_property name="ElementShortName">rst_soft</obj_property>
<obj_property name="ObjectShortName">s_axis_tdata[7:0]</obj_property> <obj_property name="ObjectShortName">rst_soft</obj_property>
<obj_property name="CustomSignalColor">#008080</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
<obj_property name="Radix">BINARYRADIX</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/tb_control/s_axis_tvalid">
<obj_property name="ElementShortName">s_axis_tvalid</obj_property>
<obj_property name="ObjectShortName">s_axis_tvalid</obj_property>
<obj_property name="CustomSignalColor">#008080</obj_property> <obj_property name="CustomSignalColor">#008080</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/s_axis_tready"> <wvobject fp_name="/tb_control/start" type="logic">
<obj_property name="ElementShortName">s_axis_tready</obj_property> <obj_property name="ElementShortName">start</obj_property>
<obj_property name="ObjectShortName">s_axis_tready</obj_property> <obj_property name="ObjectShortName">start</obj_property>
<obj_property name="CustomSignalColor">#008080</obj_property> <obj_property name="CustomSignalColor">#E0FFFF</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/s_axis_tlast"> <wvobject fp_name="/tb_control/dut/adc_start_pulse" type="logic">
<obj_property name="ElementShortName">s_axis_tlast</obj_property> <obj_property name="ElementShortName">adc_start_pulse</obj_property>
<obj_property name="ObjectShortName">s_axis_tlast</obj_property> <obj_property name="ObjectShortName">adc_start_pulse</obj_property>
<obj_property name="CustomSignalColor">#008080</obj_property> </wvobject>
<wvobject fp_name="/tb_control/dut/dac_start_pulse" type="logic">
<obj_property name="ElementShortName">dac_start_pulse</obj_property>
<obj_property name="ObjectShortName">dac_start_pulse</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/busy" type="logic">
<obj_property name="ElementShortName">busy</obj_property>
<obj_property name="ObjectShortName">busy</obj_property>
<obj_property name="CustomSignalColor">#E0FFFF</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/finish"> <wvobject fp_name="/tb_control/finish" type="logic">
<obj_property name="ElementShortName">finish</obj_property> <obj_property name="ElementShortName">finish</obj_property>
<obj_property name="ObjectShortName">finish</obj_property> <obj_property name="ObjectShortName">finish</obj_property>
<obj_property name="CustomSignalColor">#FAAFBE</obj_property> <obj_property name="CustomSignalColor">#FAAFBE</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/dac_pulse_width"> <wvobject fp_name="/tb_control/dut/finish_pulse" type="logic">
<obj_property name="ElementShortName">finish_pulse</obj_property>
<obj_property name="ObjectShortName">finish_pulse</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/cfg_bus_valid" type="logic">
<obj_property name="ElementShortName">cfg_bus_valid</obj_property>
<obj_property name="ObjectShortName">cfg_bus_valid</obj_property>
<obj_property name="CustomSignalColor">#FF0080</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/dut/cfg_busy" type="logic">
<obj_property name="ElementShortName">cfg_busy</obj_property>
<obj_property name="ObjectShortName">cfg_busy</obj_property>
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/cfg_bus_input" type="array">
<obj_property name="ElementShortName">cfg_bus_input[127:0]</obj_property>
<obj_property name="ObjectShortName">cfg_bus_input[127:0]</obj_property>
<obj_property name="CustomSignalColor">#FF0080</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/dac_pulse_width" type="array">
<obj_property name="ElementShortName">dac_pulse_width[31:0]</obj_property> <obj_property name="ElementShortName">dac_pulse_width[31:0]</obj_property>
<obj_property name="ObjectShortName">dac_pulse_width[31:0]</obj_property> <obj_property name="ObjectShortName">dac_pulse_width[31:0]</obj_property>
<obj_property name="CustomSignalColor">#FFA500</obj_property> <obj_property name="CustomSignalColor">#FFA500</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/dac_pulse_period"> <wvobject fp_name="/tb_control/dac_pulse_period" type="array">
<obj_property name="ElementShortName">dac_pulse_period[31:0]</obj_property> <obj_property name="ElementShortName">dac_pulse_period[31:0]</obj_property>
<obj_property name="ObjectShortName">dac_pulse_period[31:0]</obj_property> <obj_property name="ObjectShortName">dac_pulse_period[31:0]</obj_property>
<obj_property name="CustomSignalColor">#FFA500</obj_property> <obj_property name="CustomSignalColor">#FFA500</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/dac_pulse_height"> <wvobject fp_name="/tb_control/dac_pulse_height" type="array">
<obj_property name="ElementShortName">dac_pulse_height[11:0]</obj_property> <obj_property name="ElementShortName">dac_pulse_height[11:0]</obj_property>
<obj_property name="ObjectShortName">dac_pulse_height[11:0]</obj_property> <obj_property name="ObjectShortName">dac_pulse_height[11:0]</obj_property>
<obj_property name="CustomSignalColor">#FFA500</obj_property> <obj_property name="CustomSignalColor">#FFA500</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
<obj_property name="Radix">HEXRADIX</obj_property> <obj_property name="Radix">HEXRADIX</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/dac_pulse_num"> <wvobject fp_name="/tb_control/dac_pulse_num" type="array">
<obj_property name="ElementShortName">dac_pulse_num[15:0]</obj_property> <obj_property name="ElementShortName">dac_pulse_num[15:0]</obj_property>
<obj_property name="ObjectShortName">dac_pulse_num[15:0]</obj_property> <obj_property name="ObjectShortName">dac_pulse_num[15:0]</obj_property>
<obj_property name="CustomSignalColor">#FFA500</obj_property> <obj_property name="CustomSignalColor">#FFA500</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/adc_pulse_period"> <wvobject fp_name="/tb_control/adc_pulse_period" type="array">
<obj_property name="ElementShortName">adc_pulse_period[31:0]</obj_property> <obj_property name="ElementShortName">adc_pulse_period[31:0]</obj_property>
<obj_property name="ObjectShortName">adc_pulse_period[31:0]</obj_property> <obj_property name="ObjectShortName">adc_pulse_period[31:0]</obj_property>
<obj_property name="CustomSignalColor">#FFA500</obj_property> <obj_property name="CustomSignalColor">#FFA500</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/adc_pulse_num"> <wvobject fp_name="/tb_control/adc_pulse_num" type="array">
<obj_property name="ElementShortName">adc_pulse_num[15:0]</obj_property> <obj_property name="ElementShortName">adc_pulse_num[15:0]</obj_property>
<obj_property name="ObjectShortName">adc_pulse_num[15:0]</obj_property> <obj_property name="ObjectShortName">adc_pulse_num[15:0]</obj_property>
<obj_property name="CustomSignalColor">#FFA500</obj_property> <obj_property name="CustomSignalColor">#FFA500</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/dac_start"> <wvobject fp_name="/tb_control/dac_start" type="logic">
<obj_property name="ElementShortName">dac_start</obj_property> <obj_property name="ElementShortName">dac_start</obj_property>
<obj_property name="ObjectShortName">dac_start</obj_property> <obj_property name="ObjectShortName">dac_start</obj_property>
<obj_property name="CustomSignalColor">#FFA500</obj_property> <obj_property name="CustomSignalColor">#FFA500</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/adc_start"> <wvobject fp_name="/tb_control/adc_start" type="logic">
<obj_property name="ElementShortName">adc_start</obj_property> <obj_property name="ElementShortName">adc_start</obj_property>
<obj_property name="ObjectShortName">adc_start</obj_property> <obj_property name="ObjectShortName">adc_start</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/dac_rst"> <wvobject fp_name="/tb_control/dac_rst" type="logic">
<obj_property name="ElementShortName">dac_rst</obj_property> <obj_property name="ElementShortName">dac_rst</obj_property>
<obj_property name="ObjectShortName">dac_rst</obj_property> <obj_property name="ObjectShortName">dac_rst</obj_property>
<obj_property name="CustomSignalColor">#FFA500</obj_property> <obj_property name="CustomSignalColor">#FFA500</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/adc_rst"> <wvobject fp_name="/tb_control/adc_rst" type="logic">
<obj_property name="ElementShortName">adc_rst</obj_property> <obj_property name="ElementShortName">adc_rst</obj_property>
<obj_property name="ObjectShortName">adc_rst</obj_property> <obj_property name="ObjectShortName">adc_rst</obj_property>
</wvobject> </wvobject>
<wvobject type="group" fp_name="group499"> <wvobject fp_name="group499" type="group">
<obj_property name="label">tb signals</obj_property> <obj_property name="label">tb signals</obj_property>
<obj_property name="DisplayName">label</obj_property> <obj_property name="DisplayName">label</obj_property>
<wvobject type="array" fp_name="/tb_control/dac_rst_count"> <wvobject fp_name="/tb_control/dac_rst_count" type="array">
<obj_property name="ElementShortName">dac_rst_count[31:0]</obj_property> <obj_property name="ElementShortName">dac_rst_count[31:0]</obj_property>
<obj_property name="ObjectShortName">dac_rst_count[31:0]</obj_property> <obj_property name="ObjectShortName">dac_rst_count[31:0]</obj_property>
<obj_property name="CustomSignalColor">#F0E68C</obj_property> <obj_property name="CustomSignalColor">#F0E68C</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/adc_rst_count"> <wvobject fp_name="/tb_control/adc_rst_count" type="array">
<obj_property name="ElementShortName">adc_rst_count[31:0]</obj_property> <obj_property name="ElementShortName">adc_rst_count[31:0]</obj_property>
<obj_property name="ObjectShortName">adc_rst_count[31:0]</obj_property> <obj_property name="ObjectShortName">adc_rst_count[31:0]</obj_property>
<obj_property name="CustomSignalColor">#F0E68C</obj_property> <obj_property name="CustomSignalColor">#F0E68C</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/dac_start_count"> <wvobject fp_name="/tb_control/dac_start_count" type="array">
<obj_property name="ElementShortName">dac_start_count[31:0]</obj_property> <obj_property name="ElementShortName">dac_start_count[31:0]</obj_property>
<obj_property name="ObjectShortName">dac_start_count[31:0]</obj_property> <obj_property name="ObjectShortName">dac_start_count[31:0]</obj_property>
<obj_property name="CustomSignalColor">#F0E68C</obj_property> <obj_property name="CustomSignalColor">#F0E68C</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/adc_start_count"> <wvobject fp_name="/tb_control/adc_start_count" type="array">
<obj_property name="ElementShortName">adc_start_count[31:0]</obj_property> <obj_property name="ElementShortName">adc_start_count[31:0]</obj_property>
<obj_property name="ObjectShortName">adc_start_count[31:0]</obj_property> <obj_property name="ObjectShortName">adc_start_count[31:0]</obj_property>
<obj_property name="CustomSignalColor">#F0E68C</obj_property> <obj_property name="CustomSignalColor">#F0E68C</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/test_pulse_width"> </wvobject>
<obj_property name="ElementShortName">test_pulse_width[31:0]</obj_property> <wvobject fp_name="/tb_control/dut/cfg_req_toggle_adc" type="logic">
<obj_property name="ObjectShortName">test_pulse_width[31:0]</obj_property> <obj_property name="ElementShortName">cfg_req_toggle_adc</obj_property>
<obj_property name="CustomSignalColor">#F0E68C</obj_property> <obj_property name="ObjectShortName">cfg_req_toggle_adc</obj_property>
<obj_property name="CustomSignalColor">#FFFF00</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/test_pulse_period"> <wvobject fp_name="/tb_control/dut/cfg_req_toggle_dac" type="logic">
<obj_property name="ElementShortName">test_pulse_period[31:0]</obj_property> <obj_property name="ElementShortName">cfg_req_toggle_dac</obj_property>
<obj_property name="ObjectShortName">test_pulse_period[31:0]</obj_property> <obj_property name="ObjectShortName">cfg_req_toggle_dac</obj_property>
<obj_property name="CustomSignalColor">#F0E68C</obj_property> <obj_property name="CustomSignalColor">#FFFF00</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property> <obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="array" fp_name="/tb_control/test_pulse_num"> <wvobject fp_name="/tb_control/dut/cfg_ack_toggle_adc" type="logic">
<obj_property name="ElementShortName">test_pulse_num[15:0]</obj_property>
<obj_property name="ObjectShortName">test_pulse_num[15:0]</obj_property>
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject type="array" fp_name="/tb_control/test_pulse_height_raw">
<obj_property name="ElementShortName">test_pulse_height_raw[15:0]</obj_property>
<obj_property name="ObjectShortName">test_pulse_height_raw[15:0]</obj_property>
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
</wvobject>
<wvobject type="array" fp_name="/tb_control/DAC_DATA_WIDTH">
<obj_property name="ElementShortName">DAC_DATA_WIDTH[31:0]</obj_property>
<obj_property name="ObjectShortName">DAC_DATA_WIDTH[31:0]</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/tb_control/dut/cfg_ack_toggle_adc">
<obj_property name="ElementShortName">cfg_ack_toggle_adc</obj_property> <obj_property name="ElementShortName">cfg_ack_toggle_adc</obj_property>
<obj_property name="ObjectShortName">cfg_ack_toggle_adc</obj_property> <obj_property name="ObjectShortName">cfg_ack_toggle_adc</obj_property>
<obj_property name="CustomSignalColor">#FF00FF</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject> </wvobject>
<wvobject type="logic" fp_name="/tb_control/dut/cfg_ack_toggle_dac"> <wvobject fp_name="/tb_control/dut/cfg_ack_toggle_dac" type="logic">
<obj_property name="ElementShortName">cfg_ack_toggle_dac</obj_property> <obj_property name="ElementShortName">cfg_ack_toggle_dac</obj_property>
<obj_property name="ObjectShortName">cfg_ack_toggle_dac</obj_property> <obj_property name="ObjectShortName">cfg_ack_toggle_dac</obj_property>
<obj_property name="CustomSignalColor">#FF00FF</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/dut/cfg_wait_adc_ack" type="logic">
<obj_property name="ElementShortName">cfg_wait_adc_ack</obj_property>
<obj_property name="ObjectShortName">cfg_wait_adc_ack</obj_property>
<obj_property name="CustomSignalColor">#0000FF</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/dut/cfg_wait_dac_ack" type="logic">
<obj_property name="ElementShortName">cfg_wait_dac_ack</obj_property>
<obj_property name="ObjectShortName">cfg_wait_dac_ack</obj_property>
<obj_property name="CustomSignalColor">#0000FF</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/dut/cfg_req_pulse_adc" type="logic">
<obj_property name="ElementShortName">cfg_req_pulse_adc</obj_property>
<obj_property name="ObjectShortName">cfg_req_pulse_adc</obj_property>
<obj_property name="CustomSignalColor">#808000</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/dut/cfg_req_pulse_dac" type="logic">
<obj_property name="ElementShortName">cfg_req_pulse_dac</obj_property>
<obj_property name="ObjectShortName">cfg_req_pulse_dac</obj_property>
<obj_property name="CustomSignalColor">#808000</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/dut/cfg_ack_pulse_adc" type="logic">
<obj_property name="ElementShortName">cfg_ack_pulse_adc</obj_property>
<obj_property name="ObjectShortName">cfg_ack_pulse_adc</obj_property>
<obj_property name="CustomSignalColor">#DCDCDC</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/dut/cfg_ack_pulse_dac" type="logic">
<obj_property name="ElementShortName">cfg_ack_pulse_dac</obj_property>
<obj_property name="ObjectShortName">cfg_ack_pulse_dac</obj_property>
<obj_property name="CustomSignalColor">#DCDCDC</obj_property>
<obj_property name="UseCustomSignalColor">true</obj_property>
</wvobject>
<wvobject fp_name="/tb_control/dut/busy" type="logic">
<obj_property name="ElementShortName">busy</obj_property>
<obj_property name="ObjectShortName">busy</obj_property>
</wvobject> </wvobject>
</wave_config> </wave_config>