initial commit, add dds_par module
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
// ***************************************************************************
|
||||
// ***************************************************************************
|
||||
// Copyright (C) 2017, 2018, 2022 Analog Devices, Inc. All rights reserved.
|
||||
// SPDX short identifier: ADIJESD204
|
||||
// ***************************************************************************
|
||||
// ***************************************************************************
|
||||
|
||||
`timescale 1ns/100ps
|
||||
|
||||
module jesd204_rx_cgs #(
|
||||
parameter DATA_PATH_WIDTH = 4
|
||||
) (
|
||||
input clk,
|
||||
input reset,
|
||||
|
||||
input [DATA_PATH_WIDTH-1:0] char_is_cgs,
|
||||
input [DATA_PATH_WIDTH-1:0] char_is_error,
|
||||
|
||||
output ready,
|
||||
|
||||
output [1:0] status_state
|
||||
);
|
||||
|
||||
localparam CGS_STATE_INIT = 2'b00;
|
||||
localparam CGS_STATE_CHECK = 2'b01;
|
||||
localparam CGS_STATE_DATA = 2'b10;
|
||||
|
||||
reg [1:0] state = CGS_STATE_INIT;
|
||||
reg rdy = 1'b0;
|
||||
reg [1:0] beat_error_count = 'h00;
|
||||
|
||||
wire beat_is_cgs = &char_is_cgs;
|
||||
wire beat_has_error = |char_is_error;
|
||||
wire beat_is_all_error = &char_is_error;
|
||||
|
||||
assign ready = rdy;
|
||||
assign status_state = state;
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (state == CGS_STATE_INIT) begin
|
||||
beat_error_count <= 'h00;
|
||||
end else begin
|
||||
if (beat_has_error == 1'b1) begin
|
||||
beat_error_count <= beat_error_count + 1'b1;
|
||||
end else begin
|
||||
beat_error_count <= 'h00;
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
if (reset == 1'b1) begin
|
||||
state <= CGS_STATE_INIT;
|
||||
end else begin
|
||||
case (state)
|
||||
CGS_STATE_INIT: begin
|
||||
if (beat_is_cgs == 1'b1) begin
|
||||
state <= CGS_STATE_CHECK;
|
||||
end
|
||||
end
|
||||
CGS_STATE_CHECK: begin
|
||||
if (beat_has_error == 1'b1) begin
|
||||
if (beat_error_count == 'h3 ||
|
||||
beat_is_all_error == 1'b1) begin
|
||||
state <= CGS_STATE_INIT;
|
||||
end
|
||||
end else begin
|
||||
state <= CGS_STATE_DATA;
|
||||
end
|
||||
end
|
||||
CGS_STATE_DATA: begin
|
||||
if (beat_has_error == 1'b1) begin
|
||||
state <= CGS_STATE_CHECK;
|
||||
end
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
always @(posedge clk) begin
|
||||
case (state)
|
||||
CGS_STATE_INIT: rdy <= 1'b0;
|
||||
CGS_STATE_DATA: rdy <= 1'b1;
|
||||
default: rdy <= rdy;
|
||||
endcase
|
||||
end
|
||||
|
||||
endmodule
|
||||
Reference in New Issue
Block a user