72 lines
1.8 KiB
Verilog
72 lines
1.8 KiB
Verilog
`timescale 1ns / 1ps
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
// Company:
|
|
// Engineer:
|
|
//
|
|
// Create Date: 05/05/2021 10:29:55 AM
|
|
// Design Name:
|
|
// Module Name: configuration_manager
|
|
// Project Name:
|
|
// Target Devices:
|
|
// Tool Versions:
|
|
// Description:
|
|
//
|
|
// Dependencies:
|
|
//
|
|
// Revision:
|
|
// Revision 0.01 - File Created
|
|
// Additional Comments:
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
|
`include "clock_divider.v"
|
|
`include "pulse_generator.v"
|
|
|
|
module configuration_manager(
|
|
input clk_in,
|
|
output prog_reset,
|
|
output prog_clk,
|
|
output ccff_head,
|
|
output configuration_done
|
|
);
|
|
|
|
parameter START_CYCLE=3; // Start configuration on cycle 3 of prog_clk
|
|
parameter CONFIGURATION_CLK_DIV_SIZE=12; // Divide clk_in (50MHz) by 4096 (2^12) times
|
|
|
|
wire prog_clk_out; // prog_clk signal from clk_divider
|
|
wire ccff_head_out;
|
|
|
|
assign ccff_head = ccff_head_out & ~prog_reset;
|
|
assign prog_clk = prog_clk_out & ~configuration_done; // prog_clk will stop when configuration done
|
|
|
|
// PRESET
|
|
// Programming reset will be enabled until START_CYCLE
|
|
reset_generator #(
|
|
.INITIAL_VALUE(1),
|
|
.ACTIVE_CYCLES(START_CYCLE)
|
|
) prog_reset_generator(
|
|
.clk(~prog_clk),
|
|
.pulse(prog_reset)
|
|
);
|
|
|
|
|
|
// PROG_CLK
|
|
// Divide pl_clk (50MHz) by 4096 (2^12) times
|
|
clock_divider #(
|
|
.CLK_DIVIDER_SIZE(CONFIGURATION_CLK_DIV_SIZE)
|
|
) prog_clk_divider (
|
|
.clk_in(clk_in),
|
|
.clk_out(prog_clk_out)
|
|
);
|
|
|
|
|
|
// Instantiate bitstream loader
|
|
bitstream_loader loader (
|
|
.prog_clk(prog_clk),
|
|
.config_chain_head(ccff_head_out),
|
|
.start(~prog_reset),
|
|
.done(configuration_done)
|
|
);
|
|
|
|
endmodule
|