Line 33... |
Line 33... |
//
|
//
|
// *Author(s):
|
// *Author(s):
|
// - Olivier Girard, olgirard@gmail.com
|
// - Olivier Girard, olgirard@gmail.com
|
//
|
//
|
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
// $Rev: 37 $
|
// $Rev: 85 $
|
// $LastChangedBy: olivier.girard $
|
// $LastChangedBy: olivier.girard $
|
// $LastChangedDate: 2009-12-29 21:58:14 +0100 (Tue, 29 Dec 2009) $
|
// $LastChangedDate: 2011-01-28 22:05:37 +0100 (Fri, 28 Jan 2011) $
|
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
`include "timescale.v"
|
`include "timescale.v"
|
`include "openMSP430_defines.v"
|
`include "openMSP430_defines.v"
|
|
|
module omsp_clock_module (
|
module omsp_clock_module (
|
Line 156... |
Line 156... |
//============================================================================
|
//============================================================================
|
// 4) DATA OUTPUT GENERATION
|
// 4) DATA OUTPUT GENERATION
|
//============================================================================
|
//============================================================================
|
|
|
// Data output mux
|
// Data output mux
|
wire [15:0] bcsctl1_rd = (bcsctl1 & {8{reg_rd[BCSCTL1/2]}}) << (8 & {4{BCSCTL1[0]}});
|
wire [15:0] bcsctl1_rd = {8'h00, (bcsctl1 & {8{reg_rd[BCSCTL1/2]}})} << (8 & {4{BCSCTL1[0]}});
|
wire [15:0] bcsctl2_rd = (bcsctl2 & {8{reg_rd[BCSCTL2/2]}}) << (8 & {4{BCSCTL2[0]}});
|
wire [15:0] bcsctl2_rd = {8'h00, (bcsctl2 & {8{reg_rd[BCSCTL2/2]}})} << (8 & {4{BCSCTL2[0]}});
|
|
|
wire [15:0] per_dout = bcsctl1_rd |
|
wire [15:0] per_dout = bcsctl1_rd |
|
bcsctl2_rd;
|
bcsctl2_rd;
|
|
|
|
|
Line 188... |
Line 188... |
|
|
|
|
// Generate ACLK
|
// Generate ACLK
|
//----------------------------
|
//----------------------------
|
|
|
|
reg aclk_en;
|
reg [2:0] aclk_div;
|
reg [2:0] aclk_div;
|
|
|
wire aclk_en = lfxt_clk_en & ((bcsctl1[`DIVAx]==2'b00) ? 1'b1 :
|
wire aclk_en_nxt = lfxt_clk_en & ((bcsctl1[`DIVAx]==2'b00) ? 1'b1 :
|
(bcsctl1[`DIVAx]==2'b01) ? aclk_div[0] :
|
(bcsctl1[`DIVAx]==2'b01) ? aclk_div[0] :
|
(bcsctl1[`DIVAx]==2'b10) ? &aclk_div[1:0] :
|
(bcsctl1[`DIVAx]==2'b10) ? &aclk_div[1:0] :
|
&aclk_div[2:0]);
|
&aclk_div[2:0]);
|
|
|
always @ (posedge mclk or posedge puc)
|
always @ (posedge mclk or posedge puc)
|
|
if (puc) aclk_en <= 1'b0;
|
|
else aclk_en <= aclk_en_nxt;
|
|
|
|
always @ (posedge mclk or posedge puc)
|
if (puc) aclk_div <= 3'h0;
|
if (puc) aclk_div <= 3'h0;
|
else if ((bcsctl1[`DIVAx]!=2'b00) & lfxt_clk_en) aclk_div <= aclk_div+3'h1;
|
else if ((bcsctl1[`DIVAx]!=2'b00) & lfxt_clk_en) aclk_div <= aclk_div+3'h1;
|
|
|
|
|
// Generate SMCLK
|
// Generate SMCLK
|
//----------------------------
|
//----------------------------
|
|
|
|
reg smclk_en;
|
reg [2:0] smclk_div;
|
reg [2:0] smclk_div;
|
|
|
wire smclk_in = ~scg1 & (bcsctl2[`SELS] ? lfxt_clk_en : 1'b1);
|
wire smclk_in = ~scg1 & (bcsctl2[`SELS] ? lfxt_clk_en : 1'b1);
|
|
|
wire smclk_en = smclk_in & ((bcsctl2[`DIVSx]==2'b00) ? 1'b1 :
|
wire smclk_en_nxt = smclk_in & ((bcsctl2[`DIVSx]==2'b00) ? 1'b1 :
|
(bcsctl2[`DIVSx]==2'b01) ? smclk_div[0] :
|
(bcsctl2[`DIVSx]==2'b01) ? smclk_div[0] :
|
(bcsctl2[`DIVSx]==2'b10) ? &smclk_div[1:0] :
|
(bcsctl2[`DIVSx]==2'b10) ? &smclk_div[1:0] :
|
&smclk_div[2:0]);
|
&smclk_div[2:0]);
|
|
|
always @ (posedge mclk or posedge puc)
|
always @ (posedge mclk or posedge puc)
|
|
if (puc) smclk_en <= 1'b0;
|
|
else smclk_en <= smclk_en_nxt;
|
|
|
|
always @ (posedge mclk or posedge puc)
|
if (puc) smclk_div <= 3'h0;
|
if (puc) smclk_div <= 3'h0;
|
else if ((bcsctl2[`DIVSx]!=2'b00) & smclk_in) smclk_div <= smclk_div+3'h1;
|
else if ((bcsctl2[`DIVSx]!=2'b00) & smclk_in) smclk_div <= smclk_div+3'h1;
|
|
|
|
|
//=============================================================================
|
//=============================================================================
|