Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
S
Synopsys 28nm SLM Integration
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
SoCLabs
Synopsys 28nm SLM Integration
Commits
877d4bde
Commit
877d4bde
authored
4 months ago
by
Daniel Newbrook
Browse files
Options
Downloads
Patches
Plain Diff
Add pwron and reset software control
parent
5ece300b
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
IP_wrappers/PLL_integration_layer.v
+29
-12
29 additions, 12 deletions
IP_wrappers/PLL_integration_layer.v
with
29 additions
and
12 deletions
IP_wrappers/PLL_integration_layer.v
+
29
−
12
View file @
877d4bde
...
@@ -58,6 +58,8 @@ reg [5:0] p_reg;
...
@@ -58,6 +58,8 @@ reg [5:0] p_reg;
reg
[
5
:
0
]
r_reg
;
reg
[
5
:
0
]
r_reg
;
reg
[
4
:
0
]
prediv_reg
;
reg
[
4
:
0
]
prediv_reg
;
reg
pwron_reg
;
reg
pll_rst
;
reg
pll_lock_reg
;
reg
pll_lock_reg
;
reg
[
4
:
0
]
PLL_test_addr
;
reg
[
4
:
0
]
PLL_test_addr
;
...
@@ -102,14 +104,15 @@ always @(posedge ref_clk or negedge resetn) begin
...
@@ -102,14 +104,15 @@ always @(posedge ref_clk or negedge resetn) begin
if
(
~
resetn
)
begin
if
(
~
resetn
)
begin
gear_shift_counter
=
16'h0000
;
gear_shift_counter
=
16'h0000
;
enable_counter
=
16'h0000
;
enable_counter
=
16'h0000
;
end
else
begin
end
else
begin
if
((
gear_shift_reg
==
1'b1
))
begin
if
((
gear_shift_reg
==
1'b1
)
&&
(
pll_rst
==
1'b1
))
begin
gear_shift_counter
=
gear_shift_counter
+
1
;
gear_shift_counter
=
gear_shift_counter
+
1
;
if
(
gear_shift_counter
>
16'h3E88
)
begin
if
(
gear_shift_counter
>
16'h3E88
)
begin
gear_shift_counter
=
16'h0000
;
gear_shift_counter
=
16'h0000
;
end
end
end
else
begin
end
else
begin
if
((
enp_reg
==
1'b0
)
||
(
enr_reg
==
1'b0
))
begin
if
((
(
enp_reg
==
1'b0
)
||
(
enr_reg
==
1'b0
))
&&
(
pll_rst
==
1'b1
))
begin
enable_counter
=
enable_counter
+
1
;
enable_counter
=
enable_counter
+
1
;
if
(
enable_counter
>
16'h2718
)
begin
if
(
enable_counter
>
16'h2718
)
begin
enable_counter
=
16'h0000
;
enable_counter
=
16'h0000
;
...
@@ -124,11 +127,13 @@ always @(*) begin
...
@@ -124,11 +127,13 @@ always @(*) begin
bypass_reg
=
1'b0
;
bypass_reg
=
1'b0
;
enp_reg
=
1'b0
;
enp_reg
=
1'b0
;
enr_reg
=
1'b0
;
enr_reg
=
1'b0
;
gear_shift_reg
=
1'b
1
;
gear_shift_reg
=
1'b
0
;
pll_lock_reg
=
1'b0
;
pll_lock_reg
=
1'b0
;
pwron_reg
=
1'b0
;
pll_rst
=
1'b0
;
// Default startup of PLL
// Default startup of PLL
// F_vco = 100*20/1 = 1.6 GHz
// F_vco = 100*20/1 = 1.6 GHz
// F_vco = F_ref * fbdiv/prediv
// F_clkoutp = 400 MHz
// F_clkoutp = 400 MHz
// F_clkoutr = 800 MHz
// F_clkoutr = 800 MHz
divvcop_reg
=
DEFAULT_DIVVCOP
;
// Divvco = 1
divvcop_reg
=
DEFAULT_DIVVCOP
;
// Divvco = 1
...
@@ -190,15 +195,27 @@ always @(*) begin
...
@@ -190,15 +195,27 @@ always @(*) begin
enp_reg
=
PWDATA
[
4
];
enp_reg
=
PWDATA
[
4
];
enr_reg
=
PWDATA
[
5
];
enr_reg
=
PWDATA
[
5
];
gear_shift_reg
=
PWDATA
[
7
];
gear_shift_reg
=
PWDATA
[
7
];
end
else
begin
end
PSLVERR_reg
=
1'b1
;
if
(
PSTRB
[
1
]
==
1'b1
)
begin
pwron_reg
=
PWDATA
[
8
];
pll_rst
=
PWDATA
[
9
];
end
end
end
end
10'h001
:
begin
10'h001
:
begin
PSLVERR_reg
=
1'b1
;
if
(
PSTRB
[
0
]
==
1'b1
)
begin
gear_shift_counter
[
7
:
0
]
=
PWDATA
[
7
:
0
];
end
if
(
PSTRB
[
1
]
==
1'b1
)
begin
gear_shift_counter
[
15
:
8
]
=
PWDATA
[
15
:
8
];
end
end
end
10'h002
:
begin
10'h002
:
begin
PSLVERR_reg
=
1'b1
;
if
(
PSTRB
[
0
]
==
1'b1
)
begin
enable_counter
[
7
:
0
]
=
PWDATA
[
7
:
0
];
end
if
(
PSTRB
[
1
]
==
1'b1
)
begin
enable_counter
[
15
:
8
]
=
PWDATA
[
15
:
8
];
end
end
end
10'h003
:
begin
10'h003
:
begin
if
(
PSTRB
[
0
]
==
1'b1
)
if
(
PSTRB
[
0
]
==
1'b1
)
...
@@ -222,7 +239,7 @@ always @(*) begin
...
@@ -222,7 +239,7 @@ always @(*) begin
end
end
APB_READ:
begin
APB_READ:
begin
case
(
PADDR
)
case
(
PADDR
)
10'h000
:
PRDATA_reg
=
{{
2
4
{
1'b0
}}
,
gear_shift_reg
,
1'b0
,
enr_reg
,
enp_reg
,
{
3
{
1'b0
}}
,
bypass_reg
}
;
10'h000
:
PRDATA_reg
=
{{
2
2
{
1'b0
}}
,
pll_rst
,
pwron_reg
,
gear_shift_reg
,
1'b0
,
enr_reg
,
enp_reg
,
{
3
{
1'b0
}}
,
bypass_reg
}
;
10'h001
:
PRDATA_reg
=
{{
20
{
1'b0
}}
,
gear_shift_counter
}
;
10'h001
:
PRDATA_reg
=
{{
20
{
1'b0
}}
,
gear_shift_counter
}
;
10'h002
:
PRDATA_reg
=
{{
20
{
1'b0
}}
,
enable_counter
}
;
10'h002
:
PRDATA_reg
=
{{
20
{
1'b0
}}
,
enable_counter
}
;
10'h003
:
PRDATA_reg
=
{{
4
{
1'b0
}}
,
divvcop_reg
,
{
2
{
1'b0
}}
,
p_reg
,
{
4
{
1'b0
}}
,
divvcor_reg
,
{
2
{
1'b0
}}
,
r_reg
}
;
10'h003
:
PRDATA_reg
=
{{
4
{
1'b0
}}
,
divvcop_reg
,
{
2
{
1'b0
}}
,
p_reg
,
{
4
{
1'b0
}}
,
divvcor_reg
,
{
2
{
1'b0
}}
,
r_reg
}
;
...
@@ -326,9 +343,9 @@ dwc_z19606ts_ns u_snps_PLL(
...
@@ -326,9 +343,9 @@ dwc_z19606ts_ns u_snps_PLL(
.
gear_shift
(
gear_shift_reg
),
// Locking control, set high for faster PLL locking at cost of phase margin and jitter
.
gear_shift
(
gear_shift_reg
),
// Locking control, set high for faster PLL locking at cost of phase margin and jitter
.
p
(
p_reg
),
// Post divider division factor P (1-64)
.
p
(
p_reg
),
// Post divider division factor P (1-64)
.
prediv
(
prediv_reg
),
// input frequency division factor (1-32)
.
prediv
(
prediv_reg
),
// input frequency division factor (1-32)
.
pwron
(
1'b1
),
// Power on control
.
pwron
(
pwron_reg
),
// Power on control
.
r
(
r_reg
),
// Post divider division factor R (1-64)
.
r
(
r_reg
),
// Post divider division factor R (1-64)
.
rst
(
~
resetn
),
// Reset signal (set high for 4us whenever PWRON goes high)
.
rst
(
~
pll_rst
),
// Reset signal (set high for 4us whenever PWRON goes high)
.
vregp
(),
// Output voltage regulator for P clock
.
vregp
(),
// Output voltage regulator for P clock
.
vregr
(),
// Output voltage regulator for R clock
.
vregr
(),
// Output voltage regulator for R clock
...
@@ -337,7 +354,7 @@ dwc_z19606ts_ns u_snps_PLL(
...
@@ -337,7 +354,7 @@ dwc_z19606ts_ns u_snps_PLL(
// Test Signals
// Test Signals
.
test_data_i
(
PLL_data_i
),
//Data bus input control registers (7:0)
.
test_data_i
(
PLL_data_i
),
//Data bus input control registers (7:0)
.
test_rd_en
(
PLL_test_rd_en
),
// Control register read enable
.
test_rd_en
(
PLL_test_rd_en
),
// Control register read enable
.
test_rst
(
~
resetn
),
// Control register reset signal
.
test_rst
(
~
pll_rst
),
// Control register reset signal
.
test_sel
(
PLL_test_addr
),
// Select lines for control register (4:0)
.
test_sel
(
PLL_test_addr
),
// Select lines for control register (4:0)
.
test_wr_en
(
PLL_test_wr_en
),
// Control register write enable
.
test_wr_en
(
PLL_test_wr_en
),
// Control register write enable
.
test_data_o
(
PLL_data_o
),
//Data bus output control registers (7:0)
.
test_data_o
(
PLL_data_o
),
//Data bus output control registers (7:0)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment