axi_ad9963: Allow to disable the IDELAYs on the ADC data path

Not all designs need the IDELAYs. Disabling them can reduce power consumption of the system.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
main
Lars-Peter Clausen 2017-04-17 13:12:06 +02:00
parent 09ffe42603
commit 72cdd846b0
3 changed files with 21 additions and 2 deletions

View File

@ -43,6 +43,7 @@ module axi_ad9963 #(
parameter ID = 0, parameter ID = 0,
parameter DEVICE_TYPE = 0, parameter DEVICE_TYPE = 0,
parameter ADC_IODELAY_ENABLE = 0,
parameter DAC_IODELAY_ENABLE = 0, parameter DAC_IODELAY_ENABLE = 0,
parameter IO_DELAY_GROUP = "dev_if_delay_group", parameter IO_DELAY_GROUP = "dev_if_delay_group",
parameter DAC_DATAPATH_DISABLE = 0, parameter DAC_DATAPATH_DISABLE = 0,
@ -176,6 +177,7 @@ module axi_ad9963 #(
axi_ad9963_if #( axi_ad9963_if #(
.DEVICE_TYPE (DEVICE_TYPE), .DEVICE_TYPE (DEVICE_TYPE),
.ADC_IODELAY_ENABLE (ADC_IODELAY_ENABLE),
.DAC_IODELAY_ENABLE (DAC_IODELAY_ENABLE), .DAC_IODELAY_ENABLE (DAC_IODELAY_ENABLE),
.IO_DELAY_GROUP (IO_DELAY_GROUP)) .IO_DELAY_GROUP (IO_DELAY_GROUP))
i_dev_if ( i_dev_if (
@ -206,8 +208,9 @@ module axi_ad9963 #(
axi_ad9963_rx #( axi_ad9963_rx #(
.ID (ID), .ID (ID),
.DATAPATH_DISABLE (ADC_DATAPATH_DISABLE)) .DATAPATH_DISABLE (ADC_DATAPATH_DISABLE),
i_rx ( .IODELAY_ENABLE (ADC_IODELAY_ENABLE)
) i_rx (
.adc_rst (adc_rst), .adc_rst (adc_rst),
.adc_clk (adc_clk), .adc_clk (adc_clk),
.adc_valid (adc_valid_s), .adc_valid (adc_valid_s),

View File

@ -36,6 +36,7 @@ module axi_ad9963_if #(
parameter DEVICE_TYPE = 0, parameter DEVICE_TYPE = 0,
parameter DAC_IODELAY_ENABLE = 0, parameter DAC_IODELAY_ENABLE = 0,
parameter ADC_IODELAY_ENABLE = 0,
parameter IO_DELAY_GROUP = "dev_if_delay_group") ( parameter IO_DELAY_GROUP = "dev_if_delay_group") (
// physical interface (receive) // physical interface (receive)
@ -135,6 +136,7 @@ module axi_ad9963_if #(
ad_lvds_in #( ad_lvds_in #(
.SINGLE_ENDED (1), .SINGLE_ENDED (1),
.DEVICE_TYPE (DEVICE_TYPE), .DEVICE_TYPE (DEVICE_TYPE),
.IODELAY_ENABLE (ADC_IODELAY_ENABLE),
.IODELAY_CTRL (0), .IODELAY_CTRL (0),
.IODELAY_GROUP (IO_DELAY_GROUP)) .IODELAY_GROUP (IO_DELAY_GROUP))
i_rx_data ( i_rx_data (
@ -158,6 +160,7 @@ module axi_ad9963_if #(
ad_lvds_in #( ad_lvds_in #(
.SINGLE_ENDED (1), .SINGLE_ENDED (1),
.DEVICE_TYPE (DEVICE_TYPE), .DEVICE_TYPE (DEVICE_TYPE),
.IODELAY_ENABLE (ADC_IODELAY_ENABLE),
.IODELAY_CTRL (1), .IODELAY_CTRL (1),
.IODELAY_GROUP (IO_DELAY_GROUP)) .IODELAY_GROUP (IO_DELAY_GROUP))
i_rx_iq ( i_rx_iq (

View File

@ -42,6 +42,7 @@ module axi_ad9963_rx #(
// parameters // parameters
parameter DATAPATH_DISABLE = 0, parameter DATAPATH_DISABLE = 0,
parameter IODELAY_ENABLE = 0,
parameter ID = 0) ( parameter ID = 0) (
// adc interface // adc interface
@ -233,6 +234,8 @@ module axi_ad9963_rx #(
// adc delay control // adc delay control
generate if (IODELAY_ENABLE == 1) begin
up_delay_cntrl #(.DATA_WIDTH(13), .BASE_ADDRESS(6'h02)) i_delay_cntrl ( up_delay_cntrl #(.DATA_WIDTH(13), .BASE_ADDRESS(6'h02)) i_delay_cntrl (
.delay_clk (delay_clk), .delay_clk (delay_clk),
.delay_rst (delay_rst), .delay_rst (delay_rst),
@ -251,6 +254,16 @@ module axi_ad9963_rx #(
.up_rdata (up_rdata_s[3]), .up_rdata (up_rdata_s[3]),
.up_rack (up_rack_s[3])); .up_rack (up_rack_s[3]));
end else begin
assign up_dld = 'h00;
assign up_dwdata = 'h00;
assign delay_rst = 1'b1;
assign up_wack_s[3] = 0;
assign up_rack_s[3] = 0;
assign up_rdata_s[3] = 'h00;
end
endgenerate
endmodule endmodule
// *************************************************************************** // ***************************************************************************