rtl: update controller to support different smp_num for adc/dac sides

This commit is contained in:
Phil
2026-05-08 15:59:20 +03:00
parent 2a928c2407
commit ecb2ed3b7f
2 changed files with 25 additions and 15 deletions

View File

@ -139,9 +139,10 @@ module tb_control;
input logic [31:0] pulse_width,
input logic [31:0] pulse_period,
input logic [15:0] pulse_num,
input logic [15:0] pulse_height_raw
input logic [15:0] pulse_height_raw,
input logic [31:0] pulse_period_adc
);
logic [95:0] payload;
logic [127:0] payload;
int i;
begin
// little-endian payload layout:
@ -149,12 +150,14 @@ module tb_control;
// [63:32] pulse_period
// [79:64] pulse_num
// [95:80] pulse_height_raw
payload = {pulse_height_raw, pulse_num, pulse_period, pulse_width};
// [127:96] pulse_period_ADC
payload = {pulse_period_adc, pulse_height_raw, pulse_num, pulse_period, pulse_width};
axis_send_byte(8'h88, 1'b0); // CMD_SET_DATA
for (i = 0; i < 12; i++) begin
axis_send_byte(payload[i*8 +: 8], (i == 11));
for (i = 0; i < 16; i++) begin
axis_send_byte(payload[i*8 +: 8], (i == 15));
end
end
endtask
@ -219,6 +222,7 @@ module tb_control;
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;
@ -232,7 +236,7 @@ module tb_control;
(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_pulse_period === exp_pulse_period_adc) &&
(adc_pulse_num === exp_pulse_num )) begin
return;
end
@ -252,6 +256,7 @@ module tb_control;
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
// defaults
@ -265,6 +270,7 @@ module tb_control;
test_pulse_period = 32'h55667788;
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);
rst_n = 1'b1;
@ -291,14 +297,16 @@ module tb_control;
test_pulse_width,
test_pulse_period,
test_pulse_num,
test_pulse_height_raw
test_pulse_height_raw,
test_pulse_period_adc
);
wait_cfg_applied(
test_pulse_width,
test_pulse_period,
test_pulse_num,
test_pulse_height_raw
test_pulse_height_raw,
test_pulse_period_adc
);
if (dac_pulse_width !== 32'h11223344) begin
@ -313,8 +321,8 @@ module tb_control;
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'h55667788) begin
$fatal(1, "adc_pulse_period mismatch: got %h expected %h", adc_pulse_period, 32'h55667788);
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);