Line 42... |
Line 42... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
|
|
module clkgen (
|
module clkgen (
|
reset_n ,
|
reset_n ,
|
fastsim_mode ,
|
fastsim_mode ,
|
|
mastermode ,
|
xtal_clk ,
|
xtal_clk ,
|
clkout ,
|
clkout ,
|
gen_resetn ,
|
gen_resetn ,
|
gen_reset ,
|
risc_reset ,
|
app_clk ,
|
app_clk ,
|
uart_ref_clk
|
uart_ref_clk
|
);
|
);
|
|
|
|
|
|
|
input reset_n ; // Async reset signal
|
input reset_n ; // Async reset signal
|
input fastsim_mode ; // fast sim mode = 1
|
input fastsim_mode ; // fast sim mode = 1
|
|
input mastermode ; // 1 : Risc master mode
|
input xtal_clk ; // Xtal clock-25Mhx
|
input xtal_clk ; // Xtal clock-25Mhx
|
output clkout ; // clock output, 250Mhz
|
output clkout ; // clock output, 250Mhz
|
output gen_resetn ; // internally generated reset
|
output gen_resetn ; // internally generated reset
|
output gen_reset ; // internally generated reset
|
output risc_reset ; // internally generated reset
|
output app_clk ; // application clock
|
output app_clk ; // application clock
|
output uart_ref_clk ; // uart 16x Ref clock
|
output uart_ref_clk ; // uart 16x Ref clock
|
|
|
|
|
wire hard_reset_st ;
|
wire hard_reset_st ;
|
wire configure_st ;
|
wire configure_st ;
|
wire wait_pll_st ;
|
wire wait_pll_st ;
|
wire run_st ;
|
wire run_st ;
|
|
wire slave_run_st ;
|
reg pll_done ;
|
reg pll_done ;
|
reg [11:0] pll_count ;
|
reg [11:0] pll_count ;
|
reg [1:0] clkgen_ps ;
|
reg [2:0] clkgen_ps ;
|
reg gen_resetn ; // internally generated reset
|
reg gen_resetn ; // internally generated reset
|
reg gen_reset ; // internally generated reset
|
reg risc_reset ; // internally generated reset
|
|
|
|
|
assign clkout = app_clk;
|
assign clkout = app_clk;
|
wire pllout;
|
wire pllout;
|
/***********************************************
|
/***********************************************
|
Line 132... |
Line 135... |
************************************************/
|
************************************************/
|
always @(posedge xtal_clk or negedge reset_n )
|
always @(posedge xtal_clk or negedge reset_n )
|
begin
|
begin
|
if (!reset_n) begin
|
if (!reset_n) begin
|
gen_resetn <= 0;
|
gen_resetn <= 0;
|
gen_reset <= 1;
|
risc_reset <= 1;
|
end else if(run_st ) begin
|
end else if(run_st ) begin
|
gen_resetn <= 1;
|
gen_resetn <= 1;
|
gen_reset <= 0;
|
risc_reset <= 0;
|
|
end else if(slave_run_st ) begin
|
|
gen_resetn <= 1;
|
|
risc_reset <= 1; // Keet Risc in Reset
|
end else begin
|
end else begin
|
gen_resetn <= 0;
|
gen_resetn <= 0;
|
gen_reset <= 1;
|
risc_reset <= 1;
|
end
|
end
|
end
|
end
|
|
|
|
|
/****************************************
|
/****************************************
|
Reset State Machine
|
Reset State Machine
|
****************************************/
|
****************************************/
|
/*****************************************
|
/*****************************************
|
Define Clock Gen stat machine state
|
Define Clock Gen stat machine state
|
*****************************************/
|
*****************************************/
|
`define HARD_RESET 2'b00
|
`define HARD_RESET 3'b000
|
`define CONFIGURE 2'b01
|
`define CONFIGURE 3'b001
|
`define WAIT_PLL 2'b10
|
`define WAIT_PLL 3'b010
|
`define RUN 2'b11
|
`define RUN 3'b011
|
|
`define SLAVE_RUN 3'b100
|
|
|
assign hard_reset_st = (clkgen_ps == `HARD_RESET);
|
assign hard_reset_st = (clkgen_ps == `HARD_RESET);
|
assign configure_st = (clkgen_ps == `CONFIGURE);
|
assign configure_st = (clkgen_ps == `CONFIGURE);
|
assign wait_pll_st = (clkgen_ps == `WAIT_PLL);
|
assign wait_pll_st = (clkgen_ps == `WAIT_PLL);
|
assign run_st = (clkgen_ps == `RUN);
|
assign run_st = (clkgen_ps == `RUN);
|
|
assign slave_run_st = (clkgen_ps == `SLAVE_RUN);
|
|
|
always @(posedge xtal_clk or negedge reset_n)
|
always @(posedge xtal_clk or negedge reset_n)
|
begin
|
begin
|
if (!reset_n) begin
|
if (!reset_n) begin
|
clkgen_ps <= `HARD_RESET;
|
clkgen_ps <= `HARD_RESET;
|
Line 173... |
Line 181... |
|
|
`CONFIGURE:
|
`CONFIGURE:
|
clkgen_ps <= `WAIT_PLL;
|
clkgen_ps <= `WAIT_PLL;
|
|
|
`WAIT_PLL:
|
`WAIT_PLL:
|
if (pll_done)
|
if (pll_done) begin
|
|
if ( mastermode )
|
clkgen_ps <= `RUN;
|
clkgen_ps <= `RUN;
|
|
else
|
|
clkgen_ps <= `SLAVE_RUN;
|
|
end
|
endcase
|
endcase
|
end
|
end
|
end
|
end
|
|
|
|
|