jesd204:tx_ctrl: Update the sync_request logic

The cfg_links_disable register will mask the SYNC lines, disabled links
will always have a de-asserted SYNC (logic state HIGH).
The FSM will stay in CGS as long as there is one active link with an
asserted SYNC (logic state LOW).

Update the test bench to generate the SYNC signals in different clock
edges, so it can test all the possible scenarios.
main
Istvan Csomortani 2018-04-04 11:59:51 +01:00 committed by István Csomortáni
parent c12ce216e9
commit d18eb85e41
2 changed files with 39 additions and 23 deletions

View File

@ -101,7 +101,7 @@ i_cdc_sync (
.out_resetn(1'b1),
.out(status_sync)
);
assign status_sync_masked = status_sync ^ cfg_links_disable;
assign status_sync_masked = status_sync | cfg_links_disable;
always @(posedge clk) begin
if (reset == 1'b1) begin

View File

@ -44,36 +44,19 @@
module tx_tb;
parameter VCD_FILE = "tx_tb.vcd";
parameter NUM_LANES = 1;
parameter NUM_LINKS = 1;
parameter NUM_LANES = 4;
parameter NUM_LINKS = 2;
parameter OCTETS_PER_FRAME = 4;
parameter FRAMES_PER_MULTIFRAME = 32;
`include "tb_base.v"
reg [31:0] tx_data = 'h00000000;
wire tx_ready;
always @(posedge clk) begin
if (reset == 1'b1) begin
tx_data <= 'h00000000;
end else if (tx_ready == 1'b1) begin
tx_data <= tx_data + 1'b1;
end
end
reg [NUM_LINKS-1:0] sync = {NUM_LINKS{1'b1}};
reg [31:0] counter = 'h00;
reg [31:0] tx_data = 'h00000000;
always @(posedge clk) begin
counter <= counter + 1'b1;
if (counter >= 'h10 && counter <= 'h30) begin
sync <= {NUM_LINKS{1'b0}};
end else begin
sync <= {NUM_LINKS{1'b1}};
end
end
wire tx_ready;
wire [NUM_LANES-1:0] cfg_lanes_disable;
wire [NUM_LINKS-1:0] cfg_links_disable;
wire [7:0] cfg_beats_per_multiframe;
@ -87,11 +70,42 @@ module tx_tb;
wire [7:0] cfg_mframes_per_ilas;
wire cfg_disable_char_replacement;
wire cfg_disable_scrambler;
wire tx_ilas_config_rd;
wire [1:0] tx_ilas_config_addr;
wire [32*NUM_LANES-1:0] tx_ilas_config_data;
always @(posedge clk) begin
if (reset == 1'b1) begin
tx_data <= 'h00000000;
end else if (tx_ready == 1'b1) begin
tx_data <= tx_data + 1'b1;
end
end
/* Generate independent SYNCs
*
* Each SYNC will be asserted/deasserted at different clock edges.
* The assertion/deassertion order: first SYNC[0], ..., last SYNC[NUM_LINKS-1]
*/
always @(posedge clk) begin
counter <= counter + 1'b1;
end
genvar i;
generate
for (i=1; i<=NUM_LINKS; i=i+1) begin: SYNC_GENERATOR
always @(posedge clk) begin
if (counter >= (32'h100 | (i << 4)) && counter <= (32'h300 | (i << 4))) begin
sync[i-1] <= 1'b0;
end else begin
sync[i-1] <= 1'b1;
end
end
end
endgenerate
// DUT with static configuration
jesd204_tx_static_config #(
.NUM_LANES(NUM_LANES),
.NUM_LINKS(NUM_LINKS),
@ -142,6 +156,8 @@ module tx_tb;
.ilas_config_addr(tx_ilas_config_addr),
.ilas_config_data(tx_ilas_config_data),
.ctrl_manual_sync_request (1'b0),
.tx_ready(tx_ready),
.tx_data({NUM_LANES{tx_data}}),