2015-06-26 09:04:19 +00:00
|
|
|
// ***************************************************************************
|
|
|
|
// ***************************************************************************
|
2017-05-17 08:44:52 +00:00
|
|
|
// Copyright 2014 - 2017 (c) Analog Devices, Inc. All rights reserved.
|
|
|
|
//
|
2017-05-29 06:55:41 +00:00
|
|
|
// This core 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.
|
2017-05-17 08:44:52 +00:00
|
|
|
//
|
2017-05-29 06:55:41 +00:00
|
|
|
// Redistribution and use of source or resulting binaries, with or without modification
|
|
|
|
// of this file, are permitted under one of the following two license terms:
|
2017-05-17 08:44:52 +00:00
|
|
|
//
|
|
|
|
// 1. The GNU General Public License version 2 as published by the
|
2017-05-29 06:55:41 +00:00
|
|
|
// Free Software Foundation, which can be found in the top level directory of
|
|
|
|
// the repository (LICENSE_GPL2), and at: <https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
|
2017-05-17 08:44:52 +00:00
|
|
|
//
|
|
|
|
// OR
|
|
|
|
//
|
2017-05-29 06:55:41 +00:00
|
|
|
// 2. An ADI specific BSD license as noted in the top level directory, or on-line at:
|
|
|
|
// https://github.com/analogdevicesinc/hdl/blob/master/LICENSE_ADIBSD
|
|
|
|
// This will allow to generate bit files and not release the source code,
|
|
|
|
// as long as it attaches to an ADI device.
|
2015-06-26 09:04:19 +00:00
|
|
|
//
|
|
|
|
// ***************************************************************************
|
|
|
|
// ***************************************************************************
|
|
|
|
|
|
|
|
`timescale 1ns/100ps
|
|
|
|
|
2017-04-13 08:45:54 +00:00
|
|
|
module ad_gt_es #(
|
2015-06-26 09:04:19 +00:00
|
|
|
|
2017-04-13 08:45:54 +00:00
|
|
|
parameter integer GTH_OR_GTX_N = 0) (
|
|
|
|
|
|
|
|
input lpm_dfe_n,
|
2015-08-03 12:38:30 +00:00
|
|
|
|
2015-06-26 09:04:19 +00:00
|
|
|
// drp interface
|
|
|
|
|
2017-04-13 08:45:54 +00:00
|
|
|
input up_rstn,
|
|
|
|
input up_clk,
|
|
|
|
output reg up_es_drp_sel,
|
|
|
|
output reg up_es_drp_wr,
|
|
|
|
output reg [11:0] up_es_drp_addr,
|
|
|
|
output reg [15:0] up_es_drp_wdata,
|
|
|
|
input [15:0] up_es_drp_rdata,
|
|
|
|
input up_es_drp_ready,
|
2015-06-26 09:04:19 +00:00
|
|
|
|
2015-08-03 12:38:30 +00:00
|
|
|
// dma interface
|
|
|
|
|
2017-04-13 08:45:54 +00:00
|
|
|
output reg up_es_dma_req,
|
|
|
|
output reg [31:0] up_es_dma_addr,
|
|
|
|
output reg [31:0] up_es_dma_data,
|
|
|
|
input up_es_dma_ack,
|
2015-06-26 09:04:19 +00:00
|
|
|
|
|
|
|
// processor interface
|
|
|
|
|
2017-04-13 08:45:54 +00:00
|
|
|
input up_es_start,
|
|
|
|
input up_es_stop,
|
|
|
|
input up_es_init,
|
|
|
|
input [15:0] up_es_sdata0,
|
|
|
|
input [15:0] up_es_sdata1,
|
|
|
|
input [15:0] up_es_sdata2,
|
|
|
|
input [15:0] up_es_sdata3,
|
|
|
|
input [15:0] up_es_sdata4,
|
|
|
|
input [15:0] up_es_qdata0,
|
|
|
|
input [15:0] up_es_qdata1,
|
|
|
|
input [15:0] up_es_qdata2,
|
|
|
|
input [15:0] up_es_qdata3,
|
|
|
|
input [15:0] up_es_qdata4,
|
|
|
|
input [ 4:0] up_es_prescale,
|
|
|
|
input [11:0] up_es_hoffset_min,
|
|
|
|
input [11:0] up_es_hoffset_max,
|
|
|
|
input [11:0] up_es_hoffset_step,
|
|
|
|
input [ 7:0] up_es_voffset_min,
|
|
|
|
input [ 7:0] up_es_voffset_max,
|
|
|
|
input [ 7:0] up_es_voffset_step,
|
|
|
|
input [ 1:0] up_es_voffset_range,
|
|
|
|
input [31:0] up_es_start_addr,
|
|
|
|
output reg up_es_status);
|
2015-06-26 09:04:19 +00:00
|
|
|
|
|
|
|
|
2015-08-19 11:11:47 +00:00
|
|
|
localparam [11:0] ES_DRP_CTRL_ADDR = (GTH_OR_GTX_N == 1) ? 12'h03c : 12'h03d; // GTH-7 12'h03d
|
|
|
|
localparam [11:0] ES_DRP_SDATA0_ADDR = (GTH_OR_GTX_N == 1) ? 12'h049 : 12'h036; // GTH-7 12'h036
|
|
|
|
localparam [11:0] ES_DRP_SDATA1_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04a : 12'h037; // GTH-7 12'h037
|
|
|
|
localparam [11:0] ES_DRP_SDATA2_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04b : 12'h038; // GTH-7 12'h038
|
|
|
|
localparam [11:0] ES_DRP_SDATA3_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04c : 12'h039; // GTH-7 12'h039
|
|
|
|
localparam [11:0] ES_DRP_SDATA4_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04d : 12'h03a; // GTH-7 12'h03a
|
|
|
|
localparam [11:0] ES_DRP_QDATA0_ADDR = (GTH_OR_GTX_N == 1) ? 12'h044 : 12'h031; // GTH-7 12'h031
|
|
|
|
localparam [11:0] ES_DRP_QDATA1_ADDR = (GTH_OR_GTX_N == 1) ? 12'h045 : 12'h032; // GTH-7 12'h032
|
|
|
|
localparam [11:0] ES_DRP_QDATA2_ADDR = (GTH_OR_GTX_N == 1) ? 12'h046 : 12'h033; // GTH-7 12'h033
|
|
|
|
localparam [11:0] ES_DRP_QDATA3_ADDR = (GTH_OR_GTX_N == 1) ? 12'h047 : 12'h034; // GTH-7 12'h034
|
|
|
|
localparam [11:0] ES_DRP_QDATA4_ADDR = (GTH_OR_GTX_N == 1) ? 12'h048 : 12'h035; // GTH-7 12'h035
|
|
|
|
localparam [11:0] ES_DRP_HOFFSET_ADDR = (GTH_OR_GTX_N == 1) ? 12'h04f : 12'h03c; // GTH-7 12'h03c
|
|
|
|
localparam [11:0] ES_DRP_VOFFSET_ADDR = (GTH_OR_GTX_N == 1) ? 12'h097 : 12'h03b; // GTH-7 12'h03b
|
|
|
|
localparam [11:0] ES_DRP_STATUS_ADDR = (GTH_OR_GTX_N == 1) ? 12'h153 : 12'h151; // GTH-7 12'h153
|
|
|
|
localparam [11:0] ES_DRP_SCNT_ADDR = (GTH_OR_GTX_N == 1) ? 12'h152 : 12'h150; // GTH-7 12'h152
|
|
|
|
localparam [11:0] ES_DRP_ECNT_ADDR = (GTH_OR_GTX_N == 1) ? 12'h151 : 12'h14f; // GTH-7 12'h151
|
2015-06-26 09:04:19 +00:00
|
|
|
|
2015-08-03 12:38:30 +00:00
|
|
|
localparam [ 5:0] ES_FSM_IDLE = 6'h00;
|
|
|
|
localparam [ 5:0] ES_FSM_STATUS = 6'h01;
|
|
|
|
localparam [ 5:0] ES_FSM_INIT = 6'h02;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLINIT_READ = 6'h03;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLINIT_RRDY = 6'h04;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLINIT_WRITE = 6'h05;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLINIT_WRDY = 6'h06;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA0_WRITE = 6'h07;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA0_WRDY = 6'h08;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA1_WRITE = 6'h09;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA1_WRDY = 6'h0a;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA2_WRITE = 6'h0b;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA2_WRDY = 6'h0c;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA3_WRITE = 6'h0d;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA3_WRDY = 6'h0e;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA4_WRITE = 6'h0f;
|
|
|
|
localparam [ 5:0] ES_FSM_SDATA4_WRDY = 6'h10;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA0_WRITE = 6'h11;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA0_WRDY = 6'h12;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA1_WRITE = 6'h13;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA1_WRDY = 6'h14;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA2_WRITE = 6'h15;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA2_WRDY = 6'h16;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA3_WRITE = 6'h17;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA3_WRDY = 6'h18;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA4_WRITE = 6'h19;
|
|
|
|
localparam [ 5:0] ES_FSM_QDATA4_WRDY = 6'h1a;
|
|
|
|
localparam [ 5:0] ES_FSM_HOFFSET_READ = 6'h1b;
|
|
|
|
localparam [ 5:0] ES_FSM_HOFFSET_RRDY = 6'h1c;
|
|
|
|
localparam [ 5:0] ES_FSM_HOFFSET_WRITE = 6'h1d;
|
|
|
|
localparam [ 5:0] ES_FSM_HOFFSET_WRDY = 6'h1e;
|
|
|
|
localparam [ 5:0] ES_FSM_VOFFSET_READ = 6'h1f;
|
|
|
|
localparam [ 5:0] ES_FSM_VOFFSET_RRDY = 6'h20;
|
|
|
|
localparam [ 5:0] ES_FSM_VOFFSET_WRITE = 6'h21;
|
|
|
|
localparam [ 5:0] ES_FSM_VOFFSET_WRDY = 6'h22;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLSTART_READ = 6'h23;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLSTART_RRDY = 6'h24;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLSTART_WRITE = 6'h25;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLSTART_WRDY = 6'h26;
|
|
|
|
localparam [ 5:0] ES_FSM_STATUS_READ = 6'h27;
|
|
|
|
localparam [ 5:0] ES_FSM_STATUS_RRDY = 6'h28;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLSTOP_READ = 6'h29;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLSTOP_RRDY = 6'h2a;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLSTOP_WRITE = 6'h2b;
|
|
|
|
localparam [ 5:0] ES_FSM_CTRLSTOP_WRDY = 6'h2c;
|
|
|
|
localparam [ 5:0] ES_FSM_SCNT_READ = 6'h2d;
|
|
|
|
localparam [ 5:0] ES_FSM_SCNT_RRDY = 6'h2e;
|
|
|
|
localparam [ 5:0] ES_FSM_ECNT_READ = 6'h2f;
|
|
|
|
localparam [ 5:0] ES_FSM_ECNT_RRDY = 6'h30;
|
|
|
|
localparam [ 5:0] ES_FSM_DMA_WRITE = 6'h31;
|
|
|
|
localparam [ 5:0] ES_FSM_DMA_READY = 6'h32;
|
|
|
|
localparam [ 5:0] ES_FSM_UPDATE = 6'h33;
|
|
|
|
|
2015-06-26 09:04:19 +00:00
|
|
|
// internal registers
|
|
|
|
|
|
|
|
reg up_es_ut = 'd0;
|
2015-08-03 12:38:30 +00:00
|
|
|
reg [31:0] up_es_addr = 'd0;
|
2015-06-26 09:04:19 +00:00
|
|
|
reg [11:0] up_es_hoffset = 'd0;
|
|
|
|
reg [ 7:0] up_es_voffset = 'd0;
|
|
|
|
reg [15:0] up_es_hoffset_rdata = 'd0;
|
|
|
|
reg [15:0] up_es_voffset_rdata = 'd0;
|
|
|
|
reg [15:0] up_es_ctrl_rdata = 'd0;
|
|
|
|
reg [15:0] up_es_scnt_rdata = 'd0;
|
|
|
|
reg [15:0] up_es_ecnt_rdata = 'd0;
|
|
|
|
reg [ 5:0] up_es_fsm = 'd0;
|
|
|
|
|
|
|
|
// internal signals
|
|
|
|
|
|
|
|
wire up_es_heos_s;
|
|
|
|
wire up_es_eos_s;
|
|
|
|
wire up_es_ut_s;
|
|
|
|
wire [ 7:0] up_es_voffset_2_s;
|
|
|
|
wire [ 7:0] up_es_voffset_n_s;
|
|
|
|
wire [ 7:0] up_es_voffset_s;
|
|
|
|
|
2015-08-03 12:38:30 +00:00
|
|
|
// dma interface
|
2015-06-26 09:04:19 +00:00
|
|
|
|
|
|
|
always @(negedge up_rstn or posedge up_clk) begin
|
|
|
|
if (up_rstn == 0) begin
|
2015-08-03 12:38:30 +00:00
|
|
|
up_es_dma_req <= 'b0;
|
|
|
|
up_es_dma_addr <= 'd0;
|
|
|
|
up_es_dma_data <= 'd0;
|
2015-06-26 09:04:19 +00:00
|
|
|
end else begin
|
2015-08-03 12:38:30 +00:00
|
|
|
if ((up_es_dma_req == 1'b1) && (up_es_dma_ack == 1'b1)) begin
|
|
|
|
up_es_dma_req <= 1'b0;
|
|
|
|
up_es_dma_addr <= 32'd0;
|
|
|
|
up_es_dma_data <= 32'd0;
|
2015-06-26 09:04:19 +00:00
|
|
|
end else if (up_es_fsm == ES_FSM_DMA_WRITE) begin
|
2015-08-03 12:38:30 +00:00
|
|
|
up_es_dma_req <= 1'b1;
|
|
|
|
up_es_dma_addr <= up_es_addr;
|
|
|
|
up_es_dma_data <= {up_es_scnt_rdata, up_es_ecnt_rdata};
|
2015-06-26 09:04:19 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
// prescale, horizontal and vertical offsets
|
|
|
|
|
|
|
|
assign up_es_heos_s = (up_es_hoffset == up_es_hoffset_max) ? up_es_ut : 1'b0;
|
|
|
|
assign up_es_eos_s = (up_es_voffset == up_es_voffset_max) ? up_es_heos_s : 1'b0;
|
|
|
|
|
2015-08-03 12:38:30 +00:00
|
|
|
assign up_es_ut_s = up_es_ut & ~lpm_dfe_n;
|
2015-06-26 09:04:19 +00:00
|
|
|
assign up_es_voffset_2_s = ~up_es_voffset + 1'b1;
|
|
|
|
assign up_es_voffset_n_s = {1'b1, up_es_voffset_2_s[6:0]};
|
|
|
|
assign up_es_voffset_s = (up_es_voffset[7] == 1'b1) ? up_es_voffset_n_s : up_es_voffset;
|
|
|
|
|
|
|
|
always @(negedge up_rstn or posedge up_clk) begin
|
|
|
|
if (up_rstn == 1'b0) begin
|
|
|
|
up_es_status <= 1'b0;
|
|
|
|
up_es_ut <= 'd0;
|
2015-08-03 12:38:30 +00:00
|
|
|
up_es_addr <= 'd0;
|
2015-06-26 09:04:19 +00:00
|
|
|
up_es_hoffset <= 'd0;
|
|
|
|
up_es_voffset <= 'd0;
|
|
|
|
end else begin
|
|
|
|
if (up_es_fsm == ES_FSM_IDLE) begin
|
|
|
|
up_es_status <= 1'b0;
|
|
|
|
end else begin
|
|
|
|
up_es_status <= 1'b1;
|
|
|
|
end
|
|
|
|
if (up_es_fsm == ES_FSM_IDLE) begin
|
2015-08-03 12:38:30 +00:00
|
|
|
up_es_ut <= lpm_dfe_n;
|
|
|
|
up_es_addr <= up_es_start_addr;
|
2015-06-26 09:04:19 +00:00
|
|
|
up_es_hoffset <= up_es_hoffset_min;
|
|
|
|
up_es_voffset <= up_es_voffset_min;
|
|
|
|
end else if (up_es_fsm == ES_FSM_UPDATE) begin
|
2015-08-03 12:38:30 +00:00
|
|
|
up_es_ut <= ~up_es_ut | lpm_dfe_n;
|
|
|
|
up_es_addr <= up_es_addr + 3'd4;
|
2015-06-26 09:04:19 +00:00
|
|
|
if (up_es_heos_s == 1'b1) begin
|
|
|
|
up_es_hoffset <= up_es_hoffset_min;
|
|
|
|
end else if (up_es_ut == 1'b1) begin
|
|
|
|
up_es_hoffset <= up_es_hoffset + up_es_hoffset_step;
|
|
|
|
end
|
|
|
|
if (up_es_heos_s == 1'b1) begin
|
|
|
|
up_es_voffset <= up_es_voffset + up_es_voffset_step;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
// read-modify-write parameters (gt's are full of mixed up controls)
|
|
|
|
|
|
|
|
always @(negedge up_rstn or posedge up_clk) begin
|
|
|
|
if (up_rstn == 1'b0) begin
|
|
|
|
up_es_hoffset_rdata <= 'd0;
|
|
|
|
up_es_voffset_rdata <= 'd0;
|
|
|
|
up_es_ctrl_rdata <= 'd0;
|
|
|
|
up_es_scnt_rdata <= 'd0;
|
|
|
|
up_es_ecnt_rdata <= 'd0;
|
|
|
|
end else begin
|
|
|
|
if ((up_es_fsm == ES_FSM_HOFFSET_RRDY) && (up_es_drp_ready == 1'b1)) begin
|
|
|
|
up_es_hoffset_rdata <= up_es_drp_rdata;
|
|
|
|
end
|
|
|
|
if ((up_es_fsm == ES_FSM_VOFFSET_RRDY) && (up_es_drp_ready == 1'b1)) begin
|
|
|
|
up_es_voffset_rdata <= up_es_drp_rdata;
|
|
|
|
end
|
|
|
|
if (((up_es_fsm == ES_FSM_CTRLINIT_RRDY) || (up_es_fsm == ES_FSM_CTRLSTART_RRDY) ||
|
|
|
|
(up_es_fsm == ES_FSM_CTRLSTOP_RRDY)) && (up_es_drp_ready == 1'b1)) begin
|
|
|
|
up_es_ctrl_rdata <= up_es_drp_rdata;
|
|
|
|
end
|
|
|
|
if ((up_es_fsm == ES_FSM_SCNT_RRDY) && (up_es_drp_ready == 1'b1)) begin
|
|
|
|
up_es_scnt_rdata <= up_es_drp_rdata;
|
|
|
|
end
|
|
|
|
if ((up_es_fsm == ES_FSM_ECNT_RRDY) && (up_es_drp_ready == 1'b1)) begin
|
|
|
|
up_es_ecnt_rdata <= up_es_drp_rdata;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
// eye scan state machine- write vertical and horizontal offsets
|
|
|
|
// and read back sample and error counters
|
|
|
|
|
|
|
|
always @(negedge up_rstn or posedge up_clk) begin
|
|
|
|
if (up_rstn == 1'b0) begin
|
|
|
|
up_es_fsm <= ES_FSM_IDLE;
|
|
|
|
end else begin
|
|
|
|
if (up_es_stop == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_IDLE;
|
|
|
|
end else begin
|
|
|
|
case (up_es_fsm)
|
|
|
|
ES_FSM_IDLE: begin // idle
|
|
|
|
if (up_es_start == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_STATUS;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_IDLE;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_STATUS: begin // set status
|
|
|
|
up_es_fsm <= ES_FSM_INIT;
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_INIT: begin // initialize
|
|
|
|
if (up_es_init == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLINIT_READ;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_HOFFSET_READ;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_CTRLINIT_READ: begin // control read
|
|
|
|
up_es_fsm <= ES_FSM_CTRLINIT_RRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLINIT_RRDY: begin // control ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLINIT_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLINIT_RRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLINIT_WRITE: begin // control write
|
|
|
|
up_es_fsm <= ES_FSM_CTRLINIT_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLINIT_WRDY: begin // control ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA0_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLINIT_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_SDATA0_WRITE: begin // sdata write
|
|
|
|
up_es_fsm <= ES_FSM_SDATA0_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA0_WRDY: begin // sdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA1_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA0_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA1_WRITE: begin // sdata write
|
|
|
|
up_es_fsm <= ES_FSM_SDATA1_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA1_WRDY: begin // sdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA2_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA1_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA2_WRITE: begin // sdata write
|
|
|
|
up_es_fsm <= ES_FSM_SDATA2_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA2_WRDY: begin // sdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA3_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA2_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA3_WRITE: begin // sdata write
|
|
|
|
up_es_fsm <= ES_FSM_SDATA3_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA3_WRDY: begin // sdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA4_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA3_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA4_WRITE: begin // sdata write
|
|
|
|
up_es_fsm <= ES_FSM_SDATA4_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA4_WRDY: begin // sdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA0_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_SDATA4_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_QDATA0_WRITE: begin // qdata write
|
|
|
|
up_es_fsm <= ES_FSM_QDATA0_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA0_WRDY: begin // qdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA1_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA0_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA1_WRITE: begin // qdata write
|
|
|
|
up_es_fsm <= ES_FSM_QDATA1_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA1_WRDY: begin // qdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA2_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA1_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA2_WRITE: begin // qdata write
|
|
|
|
up_es_fsm <= ES_FSM_QDATA2_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA2_WRDY: begin // qdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA3_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA2_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA3_WRITE: begin // qdata write
|
|
|
|
up_es_fsm <= ES_FSM_QDATA3_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA3_WRDY: begin // qdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA4_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA3_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA4_WRITE: begin // qdata write
|
|
|
|
up_es_fsm <= ES_FSM_QDATA4_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA4_WRDY: begin // qdata ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_HOFFSET_READ;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_QDATA4_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_HOFFSET_READ: begin // horizontal offset read
|
|
|
|
up_es_fsm <= ES_FSM_HOFFSET_RRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_HOFFSET_RRDY: begin // horizontal offset ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_HOFFSET_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_HOFFSET_RRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_HOFFSET_WRITE: begin // horizontal offset write
|
|
|
|
up_es_fsm <= ES_FSM_HOFFSET_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_HOFFSET_WRDY: begin // horizontal offset ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_VOFFSET_READ;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_HOFFSET_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_VOFFSET_READ: begin // vertical offset read
|
|
|
|
up_es_fsm <= ES_FSM_VOFFSET_RRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_VOFFSET_RRDY: begin // vertical offset ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_VOFFSET_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_VOFFSET_RRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_VOFFSET_WRITE: begin // vertical offset write
|
|
|
|
up_es_fsm <= ES_FSM_VOFFSET_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_VOFFSET_WRDY: begin // vertical offset ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTART_READ;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_VOFFSET_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_CTRLSTART_READ: begin // control read
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTART_RRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTART_RRDY: begin // control ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTART_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTART_RRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTART_WRITE: begin // control write
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTART_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTART_WRDY: begin // control ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_STATUS_READ;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTART_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_STATUS_READ: begin // status read
|
|
|
|
up_es_fsm <= ES_FSM_STATUS_RRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_STATUS_RRDY: begin // status ready
|
|
|
|
if (up_es_drp_ready == 1'b0) begin
|
|
|
|
up_es_fsm <= ES_FSM_STATUS_RRDY;
|
|
|
|
end else if (up_es_drp_rdata[3:0] == 4'b0101) begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTOP_READ;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_STATUS_READ;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_CTRLSTOP_READ: begin // control read
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTOP_RRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTOP_RRDY: begin // control ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTOP_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTOP_RRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTOP_WRITE: begin // control write
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTOP_WRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTOP_WRDY: begin // control ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_SCNT_READ;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_CTRLSTOP_WRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_SCNT_READ: begin // read sample count
|
|
|
|
up_es_fsm <= ES_FSM_SCNT_RRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_SCNT_RRDY: begin // sample count ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_ECNT_READ;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_SCNT_RRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_ECNT_READ: begin // read error count
|
|
|
|
up_es_fsm <= ES_FSM_ECNT_RRDY;
|
|
|
|
end
|
|
|
|
ES_FSM_ECNT_RRDY: begin // error count ready
|
|
|
|
if (up_es_drp_ready == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_DMA_WRITE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_ECNT_RRDY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_DMA_WRITE: begin // dma write
|
|
|
|
up_es_fsm <= ES_FSM_DMA_READY;
|
|
|
|
end
|
|
|
|
ES_FSM_DMA_READY: begin // dma ack
|
2015-08-03 12:38:30 +00:00
|
|
|
if (up_es_dma_ack == 1'b1) begin
|
2015-06-26 09:04:19 +00:00
|
|
|
up_es_fsm <= ES_FSM_UPDATE;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_DMA_READY;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ES_FSM_UPDATE: begin // update
|
|
|
|
if (up_es_eos_s == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_IDLE;
|
|
|
|
end else if (up_es_ut == 1'b1) begin
|
|
|
|
up_es_fsm <= ES_FSM_HOFFSET_READ;
|
|
|
|
end else begin
|
|
|
|
up_es_fsm <= ES_FSM_VOFFSET_READ;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
default: begin
|
|
|
|
up_es_fsm <= ES_FSM_IDLE;
|
|
|
|
end
|
|
|
|
endcase
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
// drp signals controlled by the fsm
|
|
|
|
|
|
|
|
always @(negedge up_rstn or posedge up_clk) begin
|
|
|
|
if (up_rstn == 1'b0) begin
|
|
|
|
up_es_drp_sel <= 'd0;
|
|
|
|
up_es_drp_wr <= 'd0;
|
|
|
|
up_es_drp_addr <= 'd0;
|
|
|
|
up_es_drp_wdata <= 'd0;
|
|
|
|
end else begin
|
|
|
|
case (up_es_fsm)
|
|
|
|
ES_FSM_CTRLINIT_READ: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b0;
|
|
|
|
up_es_drp_addr <= ES_DRP_CTRL_ADDR;
|
|
|
|
up_es_drp_wdata <= 16'h0000;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLINIT_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_CTRL_ADDR;
|
2015-08-19 11:11:47 +00:00
|
|
|
if (GTH_OR_GTX_N == 1) begin
|
2015-08-03 12:38:30 +00:00
|
|
|
up_es_drp_wdata <= {up_es_ctrl_rdata[15:10], 2'b11,
|
|
|
|
up_es_ctrl_rdata[7:5], up_es_prescale};
|
2015-06-26 09:04:19 +00:00
|
|
|
end else begin
|
|
|
|
up_es_drp_wdata <= {up_es_ctrl_rdata[15:10], 2'b11, up_es_ctrl_rdata[7:0]};
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA0_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_SDATA0_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_sdata0;
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA1_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_SDATA1_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_sdata1;
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA2_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_SDATA2_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_sdata2;
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA3_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_SDATA3_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_sdata3;
|
|
|
|
end
|
|
|
|
ES_FSM_SDATA4_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_SDATA4_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_sdata4;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA0_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_QDATA0_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_qdata0;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA1_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_QDATA1_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_qdata1;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA2_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_QDATA2_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_qdata2;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA3_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_QDATA3_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_qdata3;
|
|
|
|
end
|
|
|
|
ES_FSM_QDATA4_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_QDATA4_ADDR;
|
|
|
|
up_es_drp_wdata <= up_es_qdata4;
|
|
|
|
end
|
|
|
|
ES_FSM_HOFFSET_READ: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b0;
|
|
|
|
up_es_drp_addr <= ES_DRP_HOFFSET_ADDR;
|
|
|
|
up_es_drp_wdata <= 16'h0000;
|
|
|
|
end
|
|
|
|
ES_FSM_HOFFSET_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_HOFFSET_ADDR;
|
2015-08-19 11:11:47 +00:00
|
|
|
if (GTH_OR_GTX_N == 1) begin
|
2015-06-26 09:04:19 +00:00
|
|
|
up_es_drp_wdata <= {up_es_hoffset, up_es_hoffset_rdata[3:0]};
|
|
|
|
end else begin
|
|
|
|
up_es_drp_wdata <= {up_es_hoffset_rdata[15:12], up_es_hoffset};
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_VOFFSET_READ: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b0;
|
|
|
|
up_es_drp_addr <= ES_DRP_VOFFSET_ADDR;
|
|
|
|
up_es_drp_wdata <= 16'h0000;
|
|
|
|
end
|
|
|
|
ES_FSM_VOFFSET_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_VOFFSET_ADDR;
|
2015-08-19 11:11:47 +00:00
|
|
|
if (GTH_OR_GTX_N == 1) begin
|
2015-08-03 12:38:30 +00:00
|
|
|
up_es_drp_wdata <= {up_es_voffset_rdata[15:11], up_es_voffset_s[7],
|
|
|
|
up_es_ut_s, up_es_voffset_s[6:0], up_es_voffset_range};
|
2015-06-26 09:04:19 +00:00
|
|
|
end else begin
|
2015-08-03 12:38:30 +00:00
|
|
|
up_es_drp_wdata <= {up_es_prescale, up_es_voffset_rdata[10:9],
|
|
|
|
up_es_ut_s, up_es_voffset_s};
|
2015-06-26 09:04:19 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTART_READ: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b0;
|
|
|
|
up_es_drp_addr <= ES_DRP_CTRL_ADDR;
|
|
|
|
up_es_drp_wdata <= 16'h0000;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTART_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_CTRL_ADDR;
|
2015-08-19 11:11:47 +00:00
|
|
|
if (GTH_OR_GTX_N == 1) begin
|
2015-06-26 09:04:19 +00:00
|
|
|
up_es_drp_wdata <= {6'd1, up_es_ctrl_rdata[9:0]};
|
|
|
|
end else begin
|
|
|
|
up_es_drp_wdata <= {up_es_ctrl_rdata[15:6], 6'd1};
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_STATUS_READ: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b0;
|
|
|
|
up_es_drp_addr <= ES_DRP_STATUS_ADDR;
|
|
|
|
up_es_drp_wdata <= 16'h0000;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTOP_READ: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b0;
|
|
|
|
up_es_drp_addr <= ES_DRP_CTRL_ADDR;
|
|
|
|
up_es_drp_wdata <= 16'h0000;
|
|
|
|
end
|
|
|
|
ES_FSM_CTRLSTOP_WRITE: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b1;
|
|
|
|
up_es_drp_addr <= ES_DRP_CTRL_ADDR;
|
2015-08-19 11:11:47 +00:00
|
|
|
if (GTH_OR_GTX_N == 1) begin
|
2015-06-26 09:04:19 +00:00
|
|
|
up_es_drp_wdata <= {6'd0, up_es_ctrl_rdata[9:0]};
|
|
|
|
end else begin
|
|
|
|
up_es_drp_wdata <= {up_es_ctrl_rdata[15:6], 6'd0};
|
|
|
|
end
|
|
|
|
end
|
|
|
|
ES_FSM_SCNT_READ: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b0;
|
|
|
|
up_es_drp_addr <= ES_DRP_SCNT_ADDR;
|
|
|
|
up_es_drp_wdata <= 16'h0000;
|
|
|
|
end
|
|
|
|
ES_FSM_ECNT_READ: begin
|
|
|
|
up_es_drp_sel <= 1'b1;
|
|
|
|
up_es_drp_wr <= 1'b0;
|
|
|
|
up_es_drp_addr <= ES_DRP_ECNT_ADDR;
|
|
|
|
up_es_drp_wdata <= 16'h0000;
|
|
|
|
end
|
|
|
|
default: begin
|
|
|
|
up_es_drp_sel <= 1'b0;
|
|
|
|
up_es_drp_wr <= 1'b0;
|
|
|
|
up_es_drp_addr <= 9'h000;
|
|
|
|
up_es_drp_wdata <= 16'h0000;
|
|
|
|
end
|
|
|
|
endcase
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
endmodule
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
|
|
// ***************************************************************************
|