Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
x393
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
x393
Commits
64ff56ce
Commit
64ff56ce
authored
Jul 24, 2015
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
adjusting constraint attributes in the source
parent
8b0a0f11
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
301 additions
and
152 deletions
+301
-152
.project
.project
+15
-15
com.elphel.vdt.VivadoSynthesis.prefs
.settings/com.elphel.vdt.VivadoSynthesis.prefs
+1
-1
huffman393.v
compressor_jp/huffman393.v
+108
-78
cmd_encod_linear_mux.v
memctrl/cmd_encod_linear_mux.v
+16
-16
cmd_encod_tiled_mux.v
memctrl/cmd_encod_tiled_mux.v
+16
-16
mcntrl_linear_rw.v
memctrl/mcntrl_linear_rw.v
+4
-1
mcntrl_tiled_rw.v
memctrl/mcntrl_tiled_rw.v
+4
-1
byte_lane.v
memctrl/phy/byte_lane.v
+16
-5
cmd_addr.v
memctrl/phy/cmd_addr.v
+8
-2
dq_single.v
memctrl/phy/dq_single.v
+0
-1
system_defines.vh
system_defines.vh
+2
-0
level_cross_clocks.v
util_modules/level_cross_clocks.v
+69
-3
pulse_cross_clock.v
util_modules/pulse_cross_clock.v
+15
-1
idelay_ctrl.v
wrap/idelay_ctrl.v
+3
-1
idelay_fine_pipe.v
wrap/idelay_fine_pipe.v
+4
-1
idelay_nofine.v
wrap/idelay_nofine.v
+4
-1
mmcm_phase_cntr.v
wrap/mmcm_phase_cntr.v
+0
-2
odelay_fine_pipe.v
wrap/odelay_fine_pipe.v
+4
-1
odelay_pipe.v
wrap/odelay_pipe.v
+4
-2
x393.v
x393.v
+6
-4
x393.xdc
x393.xdc
+2
-0
No files found.
.project
View file @
64ff56ce
...
@@ -62,77 +62,77 @@
...
@@ -62,77 +62,77 @@
<link>
<link>
<name>
vivado_logs/VivadoBitstream.log
</name>
<name>
vivado_logs/VivadoBitstream.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoBitstream-2015072
2181016920
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoBitstream-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoOpt.log
</name>
<name>
vivado_logs/VivadoOpt.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOpt-2015072
2181016920
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOpt-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoOptPhys.log
</name>
<name>
vivado_logs/VivadoOptPhys.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPhys-2015072
2181016920
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPhys-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoOptPower.log
</name>
<name>
vivado_logs/VivadoOptPower.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPower-2015072
2181016920
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoOptPower-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoPlace.log
</name>
<name>
vivado_logs/VivadoPlace.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoPlace-2015072
2181016920
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoPlace-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoRoute.log
</name>
<name>
vivado_logs/VivadoRoute.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoRoute-2015072
2181016920
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoRoute-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoSynthesis.log
</name>
<name>
vivado_logs/VivadoSynthesis.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoSynthesis-2015072
2180528066
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoSynthesis-2015072
3174740723
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoTimimgSummaryReportImplemented.log
</name>
<name>
vivado_logs/VivadoTimimgSummaryReportImplemented.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-2015072
2181016920
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoTimimgSummaryReportSynthesis.log
</name>
<name>
vivado_logs/VivadoTimimgSummaryReportSynthesis.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportSynthesis-2015072
2180528066
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportSynthesis-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoTimingReportImplemented.log
</name>
<name>
vivado_logs/VivadoTimingReportImplemented.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-2015072
2181016920
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_logs/VivadoTimingReportSynthesis.log
</name>
<name>
vivado_logs/VivadoTimingReportSynthesis.log
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimingReportSynthesis-2015072
2180528066
.log
</location>
<location>
/home/andrey/git/x393/vivado_logs/VivadoTimingReportSynthesis-2015072
3175509485
.log
</location>
</link>
</link>
<link>
<link>
<name>
vivado_state/x393-opt-phys.dcp
</name>
<name>
vivado_state/x393-opt-phys.dcp
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_state/x393-opt-phys-2015072
2181016920
.dcp
</location>
<location>
/home/andrey/git/x393/vivado_state/x393-opt-phys-2015072
3175509485
.dcp
</location>
</link>
</link>
<link>
<link>
<name>
vivado_state/x393-place.dcp
</name>
<name>
vivado_state/x393-place.dcp
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_state/x393-place-2015072
2181016920
.dcp
</location>
<location>
/home/andrey/git/x393/vivado_state/x393-place-2015072
3175509485
.dcp
</location>
</link>
</link>
<link>
<link>
<name>
vivado_state/x393-route.dcp
</name>
<name>
vivado_state/x393-route.dcp
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_state/x393-route-2015072
2181016920
.dcp
</location>
<location>
/home/andrey/git/x393/vivado_state/x393-route-2015072
3175509485
.dcp
</location>
</link>
</link>
<link>
<link>
<name>
vivado_state/x393-synth.dcp
</name>
<name>
vivado_state/x393-synth.dcp
</name>
<type>
1
</type>
<type>
1
</type>
<location>
/home/andrey/git/x393/vivado_state/x393-synth-2015072
2180528066
.dcp
</location>
<location>
/home/andrey/git/x393/vivado_state/x393-synth-2015072
3174740723
.dcp
</location>
</link>
</link>
</linkedResources>
</linkedResources>
</projectDescription>
</projectDescription>
.settings/com.elphel.vdt.VivadoSynthesis.prefs
View file @
64ff56ce
...
@@ -4,6 +4,6 @@ VivadoSynthesis_115_flatten_hierarchy=none
...
@@ -4,6 +4,6 @@ VivadoSynthesis_115_flatten_hierarchy=none
VivadoSynthesis_127_verbose=true
VivadoSynthesis_127_verbose=true
VivadoSynthesis_81_parser_mode=1
VivadoSynthesis_81_parser_mode=1
VivadoSynthesis_93_OtherProblems=Netlist 29-345<-@\#\#@->Board 49-26<-@\#\#@->
VivadoSynthesis_93_OtherProblems=Netlist 29-345<-@\#\#@->Board 49-26<-@\#\#@->
VivadoSynthesis_95_ShowInfo=
tru
e
VivadoSynthesis_95_ShowInfo=
fals
e
com.elphel.store.context.VivadoSynthesis=VivadoSynthesis_102_ConstraintsFiles<-@\#\#@->VivadoSynthesis_95_ShowInfo<-@\#\#@->VivadoSynthesis_115_flatten_hierarchy<-@\#\#@->VivadoSynthesis_101_MaxMsg<-@\#\#@->VivadoSynthesis_127_verbose<-@\#\#@->VivadoSynthesis_93_OtherProblems<-@\#\#@->VivadoSynthesis_81_parser_mode<-@\#\#@->
com.elphel.store.context.VivadoSynthesis=VivadoSynthesis_102_ConstraintsFiles<-@\#\#@->VivadoSynthesis_95_ShowInfo<-@\#\#@->VivadoSynthesis_115_flatten_hierarchy<-@\#\#@->VivadoSynthesis_101_MaxMsg<-@\#\#@->VivadoSynthesis_127_verbose<-@\#\#@->VivadoSynthesis_93_OtherProblems<-@\#\#@->VivadoSynthesis_81_parser_mode<-@\#\#@->
eclipse.preferences.version=1
eclipse.preferences.version=1
compressor_jp/huffman393.v
View file @
64ff56ce
...
@@ -35,12 +35,6 @@ module huffman393 (
...
@@ -35,12 +35,6 @@ module huffman393 (
input
tser_a_not_d
,
// address/not data distributed to submodules
input
tser_a_not_d
,
// address/not data distributed to submodules
input
[
7
:
0
]
tser_d
,
// byte-wide serialized tables address/data to submodules
input
[
7
:
0
]
tser_d
,
// byte-wide serialized tables address/data to submodules
// input sclk, // clock to write tables (NOW posgedge) AF2015
// input twe, // enable write to a table - now the following will be valid ant negedge sclk
// input [8:0] ta, // [8:0] table address
// input [15:0] tdi, // [15:0] table data in
input
[
15
:
0
]
di
,
// [15:0] specially RLL prepared 16-bit data (to FIFO) (sync to xclk)
input
[
15
:
0
]
di
,
// [15:0] specially RLL prepared 16-bit data (to FIFO) (sync to xclk)
input
ds
,
// di valid strobe (sync to xclk)
input
ds
,
// di valid strobe (sync to xclk)
input
rdy
,
// receiver (bit stuffer) is ready to accept data
input
rdy
,
// receiver (bit stuffer) is ready to accept data
...
@@ -50,41 +44,31 @@ module huffman393 (
...
@@ -50,41 +44,31 @@ module huffman393 (
output
reg
flush
,
// last block done - flush the rest bits
output
reg
flush
,
// last block done - flush the rest bits
output
reg
last_block
,
output
reg
last_block
,
output
reg
test_lbw
,
output
reg
test_lbw
,
output
gotLastBlock
)
;
// last block done - flush the rest bits
output
gotLastBlock
// last block done - flush the rest bits
/*
)
;
huffman i_huffman (.pclk(clk), // pixel clock
`ifdef
INFER_LATCHES
.clk(clk2x), // twice frequency - uses negedge inside
.en(cmprs_en), // enable (0 resets counter) sync to .pclk(clk)
.twe(twhe), // enable write to a table
.ta(ta[8:0]), // [8:0] table address
.tdi(di[15:0]), // [23:0] table data in (8 LSBs - quantization data, [13:9] zigzag address
.di(enc_do[15:0]), // [15:0] specially RLL prepared 16-bit data (to FIFO)
.ds(enc_dv), // di valid strobe
.rdy(stuffer_rdy), // receiver (bit stuffer) is ready to accept data
.do(huff_do), // [15:0] output data
.dl(huff_dl), // [3:0] output width (0==16)
.dv(huff_dv), // output data bvalid
.flush(flush),
.last_block(last_block),
.test_lbw(),
.gotLastBlock(test_lbw)); // last block done - flush the rest bits
*/
wire
[
31
:
0
]
tables_out
;
// Only [19:0] are used
reg
[
15
:
0
]
hcode_latch
;
// table output huffman code (1..16 bits)
reg
[
15
:
0
]
hcode_latch
;
// table output huffman code (1..16 bits)
reg
[
3
:
0
]
hlen_latch
;
// table - code length only 4 LSBs are used
reg
[
3
:
0
]
hlen_latch
;
// table - code length only 4 LSBs are used
reg
[
7
:
0
]
haddr70_latch
;
reg
haddr8_latch
;
reg
tables_re_latch
;
reg
stuffer_was_rdy_early_latch
;
`else
wire
[
15
:
0
]
hcode_latch
;
// table output huffman code (1..16 bits)
wire
[
3
:
0
]
hlen_latch
;
// table - code length only 4 LSBs are used
wire
[
7
:
0
]
haddr70_latch
;
wire
haddr8_latch
;
wire
tables_re_latch
;
wire
stuffer_was_rdy_early_latch
;
`endif
wire
[
31
:
0
]
tables_out
;
// Only [19:0] are used
reg
[
7
:
0
]
haddr_r
;
// index in huffman table
reg
[
7
:
0
]
haddr_r
;
// index in huffman table
wire
[
7
:
0
]
haddr_next
;
wire
[
7
:
0
]
haddr_next
;
reg
[
7
:
0
]
haddr70_latch
;
reg
haddr8_latch
;
wire
[
8
:
0
]
haddr
=
{
haddr8_latch
,
haddr70_latch
};
// index in huffman table (after latches)
wire
[
8
:
0
]
haddr
=
{
haddr8_latch
,
haddr70_latch
};
// index in huffman table (after latches)
wire
[
15
:
0
]
fifo_o
;
wire
[
15
:
0
]
fifo_o
;
reg
stuffer_was_rdy
;
reg
stuffer_was_rdy
;
reg
tables_re_latch
;
wire
read_next
;
// assigned depending on steps (each other cycle for normal codes, each for special 00/F0
wire
read_next
;
// assigned depending on steps (each other cycle for normal codes, each for special 00/F0
reg
[
5
:
0
]
steps
;
reg
[
5
:
0
]
steps
;
...
@@ -148,14 +132,7 @@ module huffman393 (
...
@@ -148,14 +132,7 @@ module huffman393 (
assign
gotColor
=
fifo_o
[
13
]
;
assign
gotColor
=
fifo_o
[
13
]
;
always
@
(
negedge
xclk2x
)
stuffer_was_rdy
<=
!
en2x
||
rdy
;
// stuffer ready shoud be on if !en (move to register?)for now]
always
@
(
negedge
xclk2x
)
stuffer_was_rdy
<=
!
en2x
||
rdy
;
// stuffer ready shoud be on if !en (move to register?)for now]
reg
stuffer_was_rdy_early_latch
;
wire
want_read_early
;
wire
want_read_early
;
/*
LD i_stuffer_was_rdy_early (.Q(stuffer_was_rdy_early_latch),.G(xclk2x),.D(!en2x || rdy));
LD i_tables_re (.Q(tables_re_latch),.G(xclk2x),.D(en2x && rdy));
*/
always
@*
if
(
xclk2x
)
stuffer_was_rdy_early_latch
<=
!
en2x
||
rdy
;
always
@*
if
(
xclk2x
)
tables_re_latch
<=
en2x
&&
rdy
;
...
@@ -210,18 +187,18 @@ module huffman393 (
...
@@ -210,18 +187,18 @@ module huffman393 (
always
@
(
negedge
xclk2x
)
if
(
stuffer_was_rdy
&&
steps
[
2
])
begin
// may be just if (stuffer_was_rdy)
always
@
(
negedge
xclk2x
)
if
(
stuffer_was_rdy
&&
steps
[
2
])
begin
// may be just if (stuffer_was_rdy)
haddr_r
[
7
:
0
]
<=
haddr_next
[
7
:
0
]
;
haddr_r
[
7
:
0
]
<=
haddr_next
[
7
:
0
]
;
end
end
/*
LD i_haddr_8 (.Q(haddr[8]),.G(xclk2x),.D(stuffer_was_rdy?tbsel_YC2:tbsel_YC3));
LD i_haddr_7 (.Q(haddr[7]),.G(xclk2x),.D((stuffer_was_rdy && steps[2])?haddr_next[7]:haddr_r[7]
));
assign
pre_dv
=
steps
[
4
]
||
(
steps
[
5
]
&&
(
var_dl_late
[
3
:
0
]
!=
4'b0
))
;
LD i_haddr_6 (.Q(haddr[6]),.G(xclk2x),.D((stuffer_was_rdy && steps[2])?haddr_next[6]:haddr_r[6]))
;
assign
pre_bits
[
15
:
0
]
=
steps
[
5
]
?{
5'b0
,
var_do
[
10
:
0
]
}:
hcode_latch
[
15
:
0
]
;
LD i_haddr_5 (.Q(haddr[5]),.G(xclk2x),.D((stuffer_was_rdy && steps[2])?haddr_next[5]:haddr_r[5]))
;
assign
pre_len
[
3
:
0
]
=
steps
[
5
]
?
var_dl_late
[
3
:
0
]
:
hlen_latch
[
3
:
0
]
;
LD i_haddr_4 (.Q(haddr[4]),.G(xclk2x),.D((stuffer_was_rdy && steps[2])?haddr_next[4]:haddr_r[4]));
LD i_haddr_3 (.Q(haddr[3]),.G(xclk2x),.D((stuffer_was_rdy && steps[2])?haddr_next[3]:haddr_r[3]));
`ifdef
INFER_LATCHES
LD i_haddr_2 (.Q(haddr[2]),.G(xclk2x),.D((stuffer_was_rdy && steps[2])?haddr_next[2]:haddr_r[2]))
;
always
@*
if
(
~
xclk2x
)
hlen_latch
<=
tables_out
[
19
:
16
]
;
LD i_haddr_1 (.Q(haddr[1]),.G(xclk2x),.D((stuffer_was_rdy && steps[2])?haddr_next[1]:haddr_r[1]))
;
always
@*
if
(
~
xclk2x
)
hcode_latch
<=
tables_out
[
15
:
0
]
;
LD i_haddr_0 (.Q(haddr[0]),.G(xclk2x),.D((stuffer_was_rdy && steps[2])?haddr_next[0]:haddr_r[0]))
;
always
@*
if
(
xclk2x
)
stuffer_was_rdy_early_latch
<=
!
en2x
||
rdy
;
*/
always
@*
if
(
xclk2x
)
tables_re_latch
<=
en2x
&&
rdy
;
// wire [ 8:0] haddr = {haddr8_latch,haddr70_latch}; // index in huffman table (after latches)
always
@*
if
(
xclk2x
)
begin
always
@*
if
(
xclk2x
)
begin
if
(
stuffer_was_rdy
)
haddr8_latch
<=
tbsel_YC2
;
if
(
stuffer_was_rdy
)
haddr8_latch
<=
tbsel_YC2
;
else
haddr8_latch
<=
tbsel_YC3
;
else
haddr8_latch
<=
tbsel_YC3
;
...
@@ -232,10 +209,86 @@ module huffman393 (
...
@@ -232,10 +209,86 @@ module huffman393 (
else
haddr70_latch
<=
haddr_r
;
else
haddr70_latch
<=
haddr_r
;
end
end
`else
latch_g_ce
#(
.
WIDTH
(
4
)
,
.
INIT
(
0
)
,
.
IS_CLR_INVERTED
(
0
)
,
.
IS_G_INVERTED
(
1
)
// inverted!
)
latch_hlen_i
(
.
rst
(
1'b0
)
,
// input
.
g
(
xclk2x
)
,
// input
.
ce
(
1'b1
)
,
// input
.
d_in
(
tables_out
[
19
:
16
])
,
// input[0:0]
.
q_out
(
hlen_latch
)
// output[0:0]
)
;
latch_g_ce
#(
.
WIDTH
(
16
)
,
.
INIT
(
0
)
,
.
IS_CLR_INVERTED
(
0
)
,
.
IS_G_INVERTED
(
1
)
// inverted!
)
latch_hcode_i
(
.
rst
(
1'b0
)
,
// input
.
g
(
xclk2x
)
,
// input
.
ce
(
1'b1
)
,
// input
.
d_in
(
tables_out
[
15
:
0
])
,
// input[0:0]
.
q_out
(
hcode_latch
)
// output[0:0]
)
;
latch_g_ce
#(
.
WIDTH
(
1
)
,
.
INIT
(
0
)
,
.
IS_CLR_INVERTED
(
0
)
,
.
IS_G_INVERTED
(
0
)
// non-inverted!
)
latch_stuffer_was_rdy_early_i
(
.
rst
(
1'b0
)
,
// input
.
g
(
xclk2x
)
,
// input
.
ce
(
1'b1
)
,
// input
.
d_in
(
!
en2x
||
rdy
)
,
// input[0:0]
.
q_out
(
stuffer_was_rdy_early_latch
)
// output[0:0]
)
;
latch_g_ce
#(
.
WIDTH
(
1
)
,
.
INIT
(
0
)
,
.
IS_CLR_INVERTED
(
0
)
,
.
IS_G_INVERTED
(
0
)
// non-inverted!
)
latch_tables_re_i
(
.
rst
(
1'b0
)
,
// input
.
g
(
xclk2x
)
,
// input
.
ce
(
1'b1
)
,
// input
.
d_in
(
en2x
&&
rdy
)
,
// input[0:0]
.
q_out
(
tables_re_latch
)
// output[0:0]
)
;
latch_g_ce
#(
.
WIDTH
(
1
)
,
.
INIT
(
0
)
,
.
IS_CLR_INVERTED
(
0
)
,
.
IS_G_INVERTED
(
0
)
// non-inverted!
)
latch_haddr8_re_i
(
.
rst
(
1'b0
)
,
// input
.
g
(
xclk2x
)
,
// input
.
ce
(
1'b1
)
,
// input
.
d_in
(
stuffer_was_rdy
?
tbsel_YC2
:
tbsel_YC3
)
,
// input[0:0]
.
q_out
(
haddr8_latch
)
// output[0:0]
)
;
latch_g_ce
#(
.
WIDTH
(
8
)
,
.
INIT
(
0
)
,
.
IS_CLR_INVERTED
(
0
)
,
.
IS_G_INVERTED
(
0
)
// non-inverted!
)
latch_haddr70_re_i
(
.
rst
(
1'b0
)
,
// input
.
g
(
xclk2x
)
,
// input
.
ce
(
1'b1
)
,
// input
.
d_in
((
stuffer_was_rdy
&&
steps
[
2
])
?
haddr_next
:
haddr_r
)
,
// input[0:0]
.
q_out
(
haddr70_latch
)
// output[0:0]
)
;
`endif
assign
pre_dv
=
steps
[
4
]
||
(
steps
[
5
]
&&
(
var_dl_late
[
3
:
0
]
!=
4'b0
))
;
assign
pre_bits
[
15
:
0
]
=
steps
[
5
]
?{
5'b0
,
var_do
[
10
:
0
]
}:
hcode_latch
[
15
:
0
]
;
assign
pre_len
[
3
:
0
]
=
steps
[
5
]
?
var_dl_late
[
3
:
0
]
:
hlen_latch
[
3
:
0
]
;
always
@
(
negedge
xclk2x
)
if
(
stuffer_was_rdy
)
begin
always
@
(
negedge
xclk2x
)
if
(
stuffer_was_rdy
)
begin
dv0
<=
pre_dv
;
dv0
<=
pre_dv
;
...
@@ -263,30 +316,7 @@ module huffman393 (
...
@@ -263,30 +316,7 @@ module huffman393 (
tbsel_YC2
<=
tbsel_YC1
;
tbsel_YC2
<=
tbsel_YC1
;
tbsel_YC3
<=
tbsel_YC2
;
tbsel_YC3
<=
tbsel_YC2
;
end
end
/*
LD_1 i_hlen3 (.Q( hlen_latch[ 3]),.G(xclk2x),.D(tables_out[19]));
LD_1 i_hlen2 (.Q( hlen_latch[ 2]),.G(xclk2x),.D(tables_out[18]));
LD_1 i_hlen1 (.Q( hlen_latch[ 1]),.G(xclk2x),.D(tables_out[17]));
LD_1 i_hlen0 (.Q( hlen_latch[ 0]),.G(xclk2x),.D(tables_out[16]));
LD_1 i_hcode15(.Q(hcode_latch[15]),.G(xclk2x),.D(tables_out[15]));
LD_1 i_hcode14(.Q(hcode_latch[14]),.G(xclk2x),.D(tables_out[14]));
LD_1 i_hcode13(.Q(hcode_latch[13]),.G(xclk2x),.D(tables_out[13]));
LD_1 i_hcode12(.Q(hcode_latch[12]),.G(xclk2x),.D(tables_out[12]));
LD_1 i_hcode11(.Q(hcode_latch[11]),.G(xclk2x),.D(tables_out[11]));
LD_1 i_hcode10(.Q(hcode_latch[10]),.G(xclk2x),.D(tables_out[10]));
LD_1 i_hcode9 (.Q(hcode_latch[ 9]),.G(xclk2x),.D(tables_out[ 9]));
LD_1 i_hcode8 (.Q(hcode_latch[ 8]),.G(xclk2x),.D(tables_out[ 8]));
LD_1 i_hcode7 (.Q(hcode_latch[ 7]),.G(xclk2x),.D(tables_out[ 7]));
LD_1 i_hcode6 (.Q(hcode_latch[ 6]),.G(xclk2x),.D(tables_out[ 6]));
LD_1 i_hcode5 (.Q(hcode_latch[ 5]),.G(xclk2x),.D(tables_out[ 5]));
LD_1 i_hcode4 (.Q(hcode_latch[ 4]),.G(xclk2x),.D(tables_out[ 4]));
LD_1 i_hcode3 (.Q(hcode_latch[ 3]),.G(xclk2x),.D(tables_out[ 3]));
LD_1 i_hcode2 (.Q(hcode_latch[ 2]),.G(xclk2x),.D(tables_out[ 2]));
LD_1 i_hcode1 (.Q(hcode_latch[ 1]),.G(xclk2x),.D(tables_out[ 1]));
LD_1 i_hcode0 (.Q(hcode_latch[ 0]),.G(xclk2x),.D(tables_out[ 0]));
*/
always
@*
if
(
~
xclk2x
)
hlen_latch
<=
tables_out
[
19
:
16
]
;
always
@*
if
(
~
xclk2x
)
hcode_latch
<=
tables_out
[
15
:
0
]
;
wire
twe
;
wire
twe
;
wire
[
15
:
0
]
tdi
;
wire
[
15
:
0
]
tdi
;
...
...
memctrl/cmd_encod_linear_mux.v
View file @
64ff56ce
...
@@ -436,7 +436,7 @@ module cmd_encod_linear_mux#(
...
@@ -436,7 +436,7 @@ module cmd_encod_linear_mux#(
;
;
`ifdef
def_scanline_chn0
`ifdef
def_scanline_chn0
wire
start0
=
0
|
wire
start0
=
0
`ifdef
def_read_mem_chn0
`ifdef
def_read_mem_chn0
|
start0_rd
|
start0_rd
`endif
`endif
...
@@ -446,7 +446,7 @@ module cmd_encod_linear_mux#(
...
@@ -446,7 +446,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn1
`ifdef
def_scanline_chn1
wire
start1
=
0
|
wire
start1
=
0
`ifdef
def_read_mem_chn1
`ifdef
def_read_mem_chn1
|
start1_rd
|
start1_rd
`endif
`endif
...
@@ -456,7 +456,7 @@ module cmd_encod_linear_mux#(
...
@@ -456,7 +456,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn2
`ifdef
def_scanline_chn2
wire
start2
=
0
|
wire
start2
=
0
`ifdef
def_read_mem_chn2
`ifdef
def_read_mem_chn2
|
start2_rd
|
start2_rd
`endif
`endif
...
@@ -466,7 +466,7 @@ module cmd_encod_linear_mux#(
...
@@ -466,7 +466,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn3
`ifdef
def_scanline_chn3
wire
start3
=
0
|
wire
start3
=
0
`ifdef
def_read_mem_chn3
`ifdef
def_read_mem_chn3
|
start3_rd
|
start3_rd
`endif
`endif
...
@@ -476,7 +476,7 @@ module cmd_encod_linear_mux#(
...
@@ -476,7 +476,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn4
`ifdef
def_scanline_chn4
wire
start4
=
0
|
wire
start4
=
0
`ifdef
def_read_mem_chn4
`ifdef
def_read_mem_chn4
|
start4_rd
|
start4_rd
`endif
`endif
...
@@ -486,7 +486,7 @@ module cmd_encod_linear_mux#(
...
@@ -486,7 +486,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn5
`ifdef
def_scanline_chn5
wire
start5
=
0
|
wire
start5
=
0
`ifdef
def_read_mem_chn5
`ifdef
def_read_mem_chn5
|
start5_rd
|
start5_rd
`endif
`endif
...
@@ -496,7 +496,7 @@ module cmd_encod_linear_mux#(
...
@@ -496,7 +496,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn6
`ifdef
def_scanline_chn6
wire
start6
=
0
|
wire
start6
=
0
`ifdef
def_read_mem_chn6
`ifdef
def_read_mem_chn6
|
start6_rd
|
start6_rd
`endif
`endif
...
@@ -506,7 +506,7 @@ module cmd_encod_linear_mux#(
...
@@ -506,7 +506,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn7
`ifdef
def_scanline_chn7
wire
start7
=
0
|
wire
start7
=
0
`ifdef
def_read_mem_chn7
`ifdef
def_read_mem_chn7
|
start7_rd
|
start7_rd
`endif
`endif
...
@@ -516,7 +516,7 @@ module cmd_encod_linear_mux#(
...
@@ -516,7 +516,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn8
`ifdef
def_scanline_chn8
wire
start8
=
0
|
wire
start8
=
0
`ifdef
def_read_mem_chn8
`ifdef
def_read_mem_chn8
|
start8_rd
|
start8_rd
`endif
`endif
...
@@ -526,7 +526,7 @@ module cmd_encod_linear_mux#(
...
@@ -526,7 +526,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn9
`ifdef
def_scanline_chn9
wire
start9
=
0
|
wire
start9
=
0
`ifdef
def_read_mem_chn9
`ifdef
def_read_mem_chn9
|
start9_rd
|
start9_rd
`endif
`endif
...
@@ -536,7 +536,7 @@ module cmd_encod_linear_mux#(
...
@@ -536,7 +536,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn10
`ifdef
def_scanline_chn10
wire
start10
=
0
|
wire
start10
=
0
`ifdef
def_read_mem_chn10
`ifdef
def_read_mem_chn10
|
start10_rd
|
start10_rd
`endif
`endif
...
@@ -546,7 +546,7 @@ module cmd_encod_linear_mux#(
...
@@ -546,7 +546,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn11
`ifdef
def_scanline_chn11
wire
start11
=
0
|
wire
start11
=
0
`ifdef
def_read_mem_chn11
`ifdef
def_read_mem_chn11
|
start11_rd
|
start11_rd
`endif
`endif
...
@@ -556,7 +556,7 @@ module cmd_encod_linear_mux#(
...
@@ -556,7 +556,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn12
`ifdef
def_scanline_chn12
wire
start12
=
0
|
wire
start12
=
0
`ifdef
def_read_mem_chn12
`ifdef
def_read_mem_chn12
|
start12_rd
|
start12_rd
`endif
`endif
...
@@ -566,7 +566,7 @@ module cmd_encod_linear_mux#(
...
@@ -566,7 +566,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn13
`ifdef
def_scanline_chn13
wire
start13
=
0
|
wire
start13
=
0
`ifdef
def_read_mem_chn13
`ifdef
def_read_mem_chn13
|
start13_rd
|
start13_rd
`endif
`endif
...
@@ -576,7 +576,7 @@ module cmd_encod_linear_mux#(
...
@@ -576,7 +576,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn14
`ifdef
def_scanline_chn14
wire
start14
=
0
|
wire
start14
=
0
`ifdef
def_read_mem_chn14
`ifdef
def_read_mem_chn14
|
start14_rd
|
start14_rd
`endif
`endif
...
@@ -586,7 +586,7 @@ module cmd_encod_linear_mux#(
...
@@ -586,7 +586,7 @@ module cmd_encod_linear_mux#(
;
;
`endif
`endif
`ifdef
def_scanline_chn15
`ifdef
def_scanline_chn15
wire
start15
=
0
|
wire
start15
=
0
`ifdef
def_read_mem_chn15
`ifdef
def_read_mem_chn15
|
start15_rd
|
start15_rd
`endif
`endif
...
...
memctrl/cmd_encod_tiled_mux.v
View file @
64ff56ce
...
@@ -539,7 +539,7 @@ module cmd_encod_tiled_mux #(
...
@@ -539,7 +539,7 @@ module cmd_encod_tiled_mux #(
;
;
`ifdef
def_tiled_chn0
`ifdef
def_tiled_chn0
wire
start0
=
0
|
wire
start0
=
0
`ifdef
def_read_mem_chn0
`ifdef
def_read_mem_chn0
|
start0_rd
|
start0_rd32
|
start0_rd
|
start0_rd32
`endif
`endif
...
@@ -549,7 +549,7 @@ module cmd_encod_tiled_mux #(
...
@@ -549,7 +549,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn1
`ifdef
def_tiled_chn1
wire
start1
=
0
|
wire
start1
=
0
`ifdef
def_read_mem_chn1
`ifdef
def_read_mem_chn1
|
start1_rd
|
start1_rd32
|
start1_rd
|
start1_rd32
`endif
`endif
...
@@ -559,7 +559,7 @@ module cmd_encod_tiled_mux #(
...
@@ -559,7 +559,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn2
`ifdef
def_tiled_chn2
wire
start2
=
0
|
wire
start2
=
0
`ifdef
def_read_mem_chn2
`ifdef
def_read_mem_chn2
|
start2_rd
|
start2_rd32
|
start2_rd
|
start2_rd32
`endif
`endif
...
@@ -569,7 +569,7 @@ module cmd_encod_tiled_mux #(
...
@@ -569,7 +569,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn3
`ifdef
def_tiled_chn3
wire
start3
=
0
|
wire
start3
=
0
`ifdef
def_read_mem_chn3
`ifdef
def_read_mem_chn3
|
start3_rd
|
start3_rd32
|
start3_rd
|
start3_rd32
`endif
`endif
...
@@ -579,7 +579,7 @@ module cmd_encod_tiled_mux #(
...
@@ -579,7 +579,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn4
`ifdef
def_tiled_chn4
wire
start4
=
0
|
wire
start4
=
0
`ifdef
def_read_mem_chn4
`ifdef
def_read_mem_chn4
|
start4_rd
|
start4_rd32
|
start4_rd
|
start4_rd32
`endif
`endif
...
@@ -589,7 +589,7 @@ module cmd_encod_tiled_mux #(
...
@@ -589,7 +589,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn5
`ifdef
def_tiled_chn5
wire
start5
=
0
|
wire
start5
=
0
`ifdef
def_read_mem_chn5
`ifdef
def_read_mem_chn5
|
start5_rd
|
start5_rd32
|
start5_rd
|
start5_rd32
`endif
`endif
...
@@ -599,7 +599,7 @@ module cmd_encod_tiled_mux #(
...
@@ -599,7 +599,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn6
`ifdef
def_tiled_chn6
wire
start6
=
0
|
wire
start6
=
0
`ifdef
def_read_mem_chn6
`ifdef
def_read_mem_chn6
|
start6_rd
|
start6_rd32
|
start6_rd
|
start6_rd32
`endif
`endif
...
@@ -609,7 +609,7 @@ module cmd_encod_tiled_mux #(
...
@@ -609,7 +609,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn7
`ifdef
def_tiled_chn7
wire
start7
=
0
|
wire
start7
=
0
`ifdef
def_read_mem_chn7
`ifdef
def_read_mem_chn7
|
start7_rd
|
start7_rd32
|
start7_rd
|
start7_rd32
`endif
`endif
...
@@ -619,7 +619,7 @@ module cmd_encod_tiled_mux #(
...
@@ -619,7 +619,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn8
`ifdef
def_tiled_chn8
wire
start8
=
0
|
wire
start8
=
0
`ifdef
def_read_mem_chn8
`ifdef
def_read_mem_chn8
|
start8_rd
|
start8_rd32
|
start8_rd
|
start8_rd32
`endif
`endif
...
@@ -629,7 +629,7 @@ module cmd_encod_tiled_mux #(
...
@@ -629,7 +629,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn9
`ifdef
def_tiled_chn9
wire
start9
=
0
|
wire
start9
=
0
`ifdef
def_read_mem_chn9
`ifdef
def_read_mem_chn9
|
start9_rd
|
start9_rd32
|
start9_rd
|
start9_rd32
`endif
`endif
...
@@ -639,7 +639,7 @@ module cmd_encod_tiled_mux #(
...
@@ -639,7 +639,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn10
`ifdef
def_tiled_chn10
wire
start10
=
0
|
wire
start10
=
0
`ifdef
def_read_mem_chn10
`ifdef
def_read_mem_chn10
|
start10_rd
|
start10_rd32
|
start10_rd
|
start10_rd32
`endif
`endif
...
@@ -649,7 +649,7 @@ module cmd_encod_tiled_mux #(
...
@@ -649,7 +649,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn11
`ifdef
def_tiled_chn11
wire
start11
=
0
|
wire
start11
=
0
`ifdef
def_read_mem_chn11
`ifdef
def_read_mem_chn11
|
start11_rd
|
start11_rd32
|
start11_rd
|
start11_rd32
`endif
`endif
...
@@ -659,7 +659,7 @@ module cmd_encod_tiled_mux #(
...
@@ -659,7 +659,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn12
`ifdef
def_tiled_chn12
wire
start12
=
0
|
wire
start12
=
0
`ifdef
def_read_mem_chn12
`ifdef
def_read_mem_chn12
|
start12_rd
|
start12_rd32
|
start12_rd
|
start12_rd32
`endif
`endif
...
@@ -669,7 +669,7 @@ module cmd_encod_tiled_mux #(
...
@@ -669,7 +669,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn13
`ifdef
def_tiled_chn13
wire
start13
=
0
|
wire
start13
=
0
`ifdef
def_read_mem_chn13
`ifdef
def_read_mem_chn13
|
start13_rd
|
start13_rd32
|
start13_rd
|
start13_rd32
`endif
`endif
...
@@ -679,7 +679,7 @@ module cmd_encod_tiled_mux #(
...
@@ -679,7 +679,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn14
`ifdef
def_tiled_chn14
wire
start14
=
0
|
wire
start14
=
0
`ifdef
def_read_mem_chn14
`ifdef
def_read_mem_chn14
|
start14_rd
|
start14_rd32
|
start14_rd
|
start14_rd32
`endif
`endif
...
@@ -689,7 +689,7 @@ module cmd_encod_tiled_mux #(
...
@@ -689,7 +689,7 @@ module cmd_encod_tiled_mux #(
;
;
`endif
`endif
`ifdef
def_tiled_chn15
`ifdef
def_tiled_chn15
wire
start15
=
0
|
wire
start15
=
0
`ifdef
def_read_mem_chn15
`ifdef
def_read_mem_chn15
|
start15_rd
|
start15_rd32
|
start15_rd
|
start15_rd32
`endif
`endif
...
...
memctrl/mcntrl_linear_rw.v
View file @
64ff56ce
...
@@ -96,7 +96,10 @@ module mcntrl_linear_rw #(
...
@@ -96,7 +96,10 @@ module mcntrl_linear_rw #(
// WARNING: [Synth 8-3936] Found unconnected internal register 'frame_y_reg' and it is trimmed from '16' to '3' bits. [memctrl/mcntrl_linear_rw.v:268]
// WARNING: [Synth 8-3936] Found unconnected internal register 'frame_y_reg' and it is trimmed from '16' to '3' bits. [memctrl/mcntrl_linear_rw.v:268]
// Throblem seems to be that frame_y8_r_reg (load of trimmed bits of the frame_y_reg) is (as intended) absorbed into DSP48. The lower 3 bits are used
// Throblem seems to be that frame_y8_r_reg (load of trimmed bits of the frame_y_reg) is (as intended) absorbed into DSP48. The lower 3 bits are used
// outside of the DSP 48. "dont_touch" seems to work here
// outside of the DSP 48. "dont_touch" seems to work here
(
*
keep
=
"true"
*
)
reg
[
FRAME_HEIGHT_BITS
-
1
:
0
]
frame_y
;
// current line number referenced to the frame top
`ifndef
IGNORE_ATTR
(
*
keep
=
"true"
*
)
`endif
reg
[
FRAME_HEIGHT_BITS
-
1
:
0
]
frame_y
;
// current line number referenced to the frame top
reg
[
FRAME_WIDTH_BITS
-
1
:
0
]
frame_x
;
// current column number referenced to the frame left
reg
[
FRAME_WIDTH_BITS
-
1
:
0
]
frame_x
;
// current column number referenced to the frame left
reg
[
FRAME_HEIGHT_BITS
-
4
:
0
]
frame_y8_r
;
// (13 bits) current row with bank removed, latency2 (to be absorbed when inferred DSP multipler)
reg
[
FRAME_HEIGHT_BITS
-
4
:
0
]
frame_y8_r
;
// (13 bits) current row with bank removed, latency2 (to be absorbed when inferred DSP multipler)
reg
[
FRAME_WIDTH_BITS
:
0
]
frame_full_width_r
;
// (14 bit) register to be absorbed by MPY
reg
[
FRAME_WIDTH_BITS
:
0
]
frame_full_width_r
;
// (14 bit) register to be absorbed by MPY
...
...
memctrl/mcntrl_tiled_rw.v
View file @
64ff56ce
...
@@ -110,7 +110,10 @@ module mcntrl_tiled_rw#(
...
@@ -110,7 +110,10 @@ module mcntrl_tiled_rw#(
//WARNING: [Synth 8-3936] Found unconnected internal register 'frame_y_reg' and it is trimmed from '16' to '3' bits. [memctrl/mcntrl_tiled_rw.v:307]
//WARNING: [Synth 8-3936] Found unconnected internal register 'frame_y_reg' and it is trimmed from '16' to '3' bits. [memctrl/mcntrl_tiled_rw.v:307]
// Throblem seems to be that frame_y8_r_reg (load of trimmed bits of the frame_y_reg) is (as intended) absorbed into DSP48. The lower 3 bits are used
// Throblem seems to be that frame_y8_r_reg (load of trimmed bits of the frame_y_reg) is (as intended) absorbed into DSP48. The lower 3 bits are used
// outside of the DSP 48. "dont_touch" seems to work here
// outside of the DSP 48. "dont_touch" seems to work here
(
*
keep
=
"true"
*
)
reg
[
FRAME_HEIGHT_BITS
-
1
:
0
]
frame_y
;
// current line number referenced to the frame top
`ifndef
IGNORE_ATTR
(
*
keep
=
"true"
*
)
`endif
reg
[
FRAME_HEIGHT_BITS
-
1
:
0
]
frame_y
;
// current line number referenced to the frame top
reg
[
FRAME_WIDTH_BITS
-
1
:
0
]
frame_x
;
// current column number referenced to the frame left
reg
[
FRAME_WIDTH_BITS
-
1
:
0
]
frame_x
;
// current column number referenced to the frame left
reg
[
FRAME_HEIGHT_BITS
-
4
:
0
]
frame_y8_r
;
// (13 bits) current row with bank removed, latency2 (to be absorbed when inferred DSP multipler)
reg
[
FRAME_HEIGHT_BITS
-
4
:
0
]
frame_y8_r
;
// (13 bits) current row with bank removed, latency2 (to be absorbed when inferred DSP multipler)
reg
[
FRAME_WIDTH_BITS
:
0
]
frame_full_width_r
;
// (14 bit) register to be absorbed by MPY
reg
[
FRAME_WIDTH_BITS
:
0
]
frame_full_width_r
;
// (14 bit) register to be absorbed by MPY
...
...
memctrl/phy/byte_lane.v
View file @
64ff56ce
...
@@ -55,15 +55,26 @@ module byte_lane #(
...
@@ -55,15 +55,26 @@ module byte_lane #(
input
set
// clk_div synchronous set all delays from previously loaded values
input
set
// clk_div synchronous set all delays from previously loaded values
)
;
)
;
//(* CLOCK_DEDICATED_ROUTE = "FALSE" *) // does not seem to work
wire
dqs_read
;
wire
dqs_read
;
wire
iclk
;
// source-synchronous clock (BUFR from DQS)
wire
iclk
;
// source-synchronous clock (BUFR from DQS)
reg
[
31
:
0
]
din_r
=
0
;
reg
[
31
:
0
]
din_r
=
0
;
// Preventing register removal of equivalent registers
// Preventing register removal of equivalent registers
(
*
keep
=
"true"
*
)
reg
[
3
:
0
]
din_dm_r
=
0
,
din_dqs_r
=
0
,
tin_dq_r
=
4'hf
,
tin_dqs_r
=
4'hf
;
`ifndef
IGNORE_ATTR
(
*
keep
=
"true"
*
)
reg
[
7
:
0
]
dly_data_r
=
0
;
(
*
keep
=
"true"
*
)
(
*
keep
=
"true"
*
)
reg
set_r
=
0
;
`endif
(
*
keep
=
"true"
*
)
reg
dci_disable_dqs_r
,
dci_disable_dq_r
;
reg
[
3
:
0
]
din_dm_r
=
0
,
din_dqs_r
=
0
,
tin_dq_r
=
4'hf
,
tin_dqs_r
=
4'hf
;
`ifndef
IGNORE_ATTR
(
*
keep
=
"true"
*
)
`endif
reg
[
7
:
0
]
dly_data_r
=
0
;
`ifndef
IGNORE_ATTR
(
*
keep
=
"true"
*
)
`endif
reg
set_r
=
0
;
`ifndef
IGNORE_ATTR
(
*
keep
=
"true"
*
)
`endif
reg
dci_disable_dqs_r
,
dci_disable_dq_r
;
reg
[
7
:
0
]
ld_odly
=
8'b0
,
ld_idly
=
8'b0
;
reg
[
7
:
0
]
ld_odly
=
8'b0
,
ld_idly
=
8'b0
;
reg
ld_odly_dqs
,
ld_idly_dqs
,
ld_odly_dm
;
reg
ld_odly_dqs
,
ld_idly_dqs
,
ld_odly_dm
;
BUFR
iclk_i
(
.
O
(
iclk
)
,.
I
(
dqs_read
)
,
.
CLR
(
1'b0
)
,.
CE
(
1'b1
))
;
// OK, works with constraint? Seems now work w/o
BUFR
iclk_i
(
.
O
(
iclk
)
,.
I
(
dqs_read
)
,
.
CLR
(
1'b0
)
,.
CE
(
1'b1
))
;
// OK, works with constraint? Seems now work w/o
...
...
memctrl/phy/cmd_addr.v
View file @
64ff56ce
...
@@ -61,8 +61,14 @@ reg [1:0] in_we_r=2'h3, in_ras_r=2'h3, in_cas_r=2'h3, in_cke_r=2'h3, in_odt_r=2
...
@@ -61,8 +61,14 @@ reg [1:0] in_we_r=2'h3, in_ras_r=2'h3, in_cas_r=2'h3, in_cke_r=2'h3, in_odt_r=2
//reg [1:0] in_tri_r=2'h0; // or tri-state on reset?
//reg [1:0] in_tri_r=2'h0; // or tri-state on reset?
reg
in_tri_r
=
1'b1
;
// or tri-state on reset?
reg
in_tri_r
=
1'b1
;
// or tri-state on reset?
// Preventing register duplication
// Preventing register duplication
(
*
keep
=
"true"
*
)
reg
[
7
:
0
]
dly_data_r
=
0
;
`ifndef
IGNORE_ATTR
(
*
keep
=
"true"
*
)
reg
set_r
=
0
;
(
*
keep
=
"true"
*
)
`endif
reg
[
7
:
0
]
dly_data_r
=
0
;
`ifndef
IGNORE_ATTR
(
*
keep
=
"true"
*
)
`endif
reg
set_r
=
0
;
reg
[
7
:
0
]
ld_dly_cmd
=
8'b0
;
reg
[
7
:
0
]
ld_dly_cmd
=
8'b0
;
reg
[
ADDRESS_NUMBER
-
1
:
0
]
ld_dly_addr
=
0
;
reg
[
ADDRESS_NUMBER
-
1
:
0
]
ld_dly_addr
=
0
;
//wire [ADDRESS_NUMBER-1:0] decode_addr;
//wire [ADDRESS_NUMBER-1:0] decode_addr;
...
...
memctrl/phy/dq_single.v
View file @
64ff56ce
...
@@ -51,7 +51,6 @@ wire dq_tri;
...
@@ -51,7 +51,6 @@ wire dq_tri;
wire
dq_data_dly
;
wire
dq_data_dly
;
wire
dq_dly
;
wire
dq_dly
;
// keep IOBUF_DCIEN.O to user as output only (UDM/LDM), so the rest of tyhe read channel will be optimized out, but I/O will stay the same
// keep IOBUF_DCIEN.O to user as output only (UDM/LDM), so the rest of tyhe read channel will be optimized out, but I/O will stay the same
//(* keep = "true" *)
wire
dq_di
;
wire
dq_di
;
...
...
system_defines.vh
View file @
64ff56ce
...
@@ -5,6 +5,8 @@
...
@@ -5,6 +5,8 @@
`define SHREG_SEQUENTIAL_RESET 1
`define SHREG_SEQUENTIAL_RESET 1
// synthesis does to recognize global clock as G input of the primitive latch
// synthesis does to recognize global clock as G input of the primitive latch
`undef INFER_LATCHES
`undef INFER_LATCHES
// define when using CDC - it does not support them
`undef IGNORE_ATTR
//`define MEMBRIDGE_DEBUG_READ 1
//`define MEMBRIDGE_DEBUG_READ 1
`define use200Mhz 1
`define use200Mhz 1
`define USE_CMD_ENCOD_TILED_32_RD 1
`define USE_CMD_ENCOD_TILED_32_RD 1
...
...
util_modules/level_cross_clocks.v
View file @
64ff56ce
...
@@ -28,11 +28,77 @@ module level_cross_clocks#(
...
@@ -28,11 +28,77 @@ module level_cross_clocks#(
input
[
WIDTH
-
1
:
0
]
d_in
,
input
[
WIDTH
-
1
:
0
]
d_in
,
output
[
WIDTH
-
1
:
0
]
d_out
output
[
WIDTH
-
1
:
0
]
d_out
)
;
)
;
generate
genvar
i
;
for
(
i
=
0
;
i
<
WIDTH
;
i
=
i
+
1
)
begin
:
level_cross_clock_block
if
(
REGISTER
<=
1
)
level_cross_clocks_ff_bit
level_cross_clocks_single_i
(
// just a single ff (if metastability is not a problem)
.
clk
(
clk
)
,
// input
.
d_in
(
d_in
[
i
])
,
// input
.
d_out
(
d_out
[
i
])
// output
)
;
else
if
(
REGISTER
==
2
)
level_cross_clocks_sync_bit
level_cross_clocks_sync_i
(
// classic 2-register synchronizer
.
clk
(
clk
)
,
// input
.
d_in
(
d_in
[
i
])
,
// input
.
d_out
(
d_out
[
i
])
// output
)
;
else
level_cross_clocks_single_bit
#(
// >2 bits (first two only are synchronizer)
.
REGISTER
(
REGISTER
)
)
level_cross_clocks_single_i
(
.
clk
(
clk
)
,
// input
.
d_in
(
d_in
[
i
])
,
// input
.
d_out
(
d_out
[
i
])
// output
)
;
end
endgenerate
endmodule
module
level_cross_clocks_single_bit
#(
parameter
REGISTER
=
3
// number of registers (>3)
)(
input
clk
,
input
d_in
,
output
d_out
)
;
reg
[
REGISTER
-
3
:
0
]
regs
;
wire
d_sync
;
// after a 2-bit synchronizer
assign
d_out
=
regs
[
REGISTER
-
3
]
;
always
@
(
posedge
clk
)
begin
regs
<=
(
regs
<<
1
)
+
d_sync
;
// | d_in complains about widths mismatch
end
level_cross_clocks_sync_bit
level_cross_clocks_sync_bit_i
(
.
clk
(
clk
)
,
// input
.
d_in
(
d_in
)
,
// input
.
d_out
(
d_sync
)
// output
)
;
endmodule
reg
[
WIDTH
*
REGISTER
-
1
:
0
]
regs
;
// Classic 2-bit (exactly) synchronizer
assign
d_out
=
regs
[
WIDTH
-
1
:
0
]
;
module
level_cross_clocks_sync_bit
(
input
clk
,
input
d_in
,
output
d_out
)
;
`ifndef
IGNORE_ATTR
(
*
ASYNC_REG
=
"TRUE"
*
)
`endif
reg
[
1
:
0
]
sync_zer
;
assign
d_out
=
sync_zer
[
1
]
;
always
@
(
posedge
clk
)
begin
always
@
(
posedge
clk
)
begin
regs
<=
{
d_in
,
regs
[
WIDTH
*
REGISTER
-
1
:
WIDTH
]
};
sync_zer
<=
{
sync_zer
[
0
]
,
d_in
};
end
end
endmodule
endmodule
module
level_cross_clocks_ff_bit
(
// just a single FF if REGISTER == 1 (if metastability is not a problem)
input
clk
,
input
d_in
,
output
reg
d_out
)
;
always
@
(
posedge
clk
)
begin
d_out
<=
d_in
;
end
endmodule
util_modules/pulse_cross_clock.v
View file @
64ff56ce
...
@@ -33,8 +33,22 @@ module pulse_cross_clock#(
...
@@ -33,8 +33,22 @@ module pulse_cross_clock#(
output
busy
output
busy
)
;
)
;
localparam
EXTRA_DLY_SAFE
=
EXTRA_DLY
?
1
:
0
;
localparam
EXTRA_DLY_SAFE
=
EXTRA_DLY
?
1
:
0
;
reg
in_reg
=
0
;
`ifndef
IGNORE_ATTR
(
*
KEEP
=
"TRUE"
*
)
`endif
reg
in_reg
=
0
;
// can not be ASYNC_REG as it can not be put together with out_reg
//WARNING: [Constraints 18-1079] Register sensors393_i/sensor_channel_block[0].sensor_channel_i/sens_sync_i/pulse_cross_clock_trig_in_pclk_i/in_reg_reg
// and sensors393_i/sensor_channel_block[0].sensor_channel_i/sens_sync_i/pulse_cross_clock_trig_in_pclk_i/out_reg_reg[0] are
//from the same synchronizer and have the ASYNC_REG property set, but could not be placed into the same slice due to constraints
// or mismatched control signals on the registers.
`ifndef
IGNORE_ATTR
(
*
ASYNC_REG
=
"TRUE"
*
)
`endif
reg
[
2
:
0
]
out_reg
=
0
;
reg
[
2
:
0
]
out_reg
=
0
;
`ifndef
IGNORE_ATTR
(
*
ASYNC_REG
=
"TRUE"
*
)
`endif
reg
busy_r
=
0
;
reg
busy_r
=
0
;
assign
out_pulse
=
out_reg
[
2
]
;
assign
out_pulse
=
out_reg
[
2
]
;
assign
busy
=
busy_r
;
// in_reg;
assign
busy
=
busy_r
;
// in_reg;
...
...
wrap/idelay_ctrl.v
View file @
64ff56ce
...
@@ -28,8 +28,10 @@ module idelay_ctrl
...
@@ -28,8 +28,10 @@ module idelay_ctrl
input
rst
,
input
rst
,
output
rdy
output
rdy
)
;
)
;
`ifndef
IGNORE_ATTR
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
`endif
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
IDELAYCTRL
idelay_ctrl_i
(
IDELAYCTRL
idelay_ctrl_i
(
.
RDY
(
rdy
)
,
.
RDY
(
rdy
)
,
.
REFCLK
(
refclk
)
,
.
REFCLK
(
refclk
)
,
...
...
wrap/idelay_fine_pipe.v
View file @
64ff56ce
...
@@ -49,7 +49,10 @@ module idelay_fine_pipe
...
@@ -49,7 +49,10 @@ module idelay_fine_pipe
if
(
fdly_pre
>
3'h4
)
$
display
(
"ERROR: fine idelay value should be <5, specified %d @ %t"
,
fdly_pre
,
$
time
)
;
if
(
fdly_pre
>
3'h4
)
$
display
(
"ERROR: fine idelay value should be <5, specified %d @ %t"
,
fdly_pre
,
$
time
)
;
end
end
`endif
`endif
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
IDELAYE2_FINEDELAY
`ifndef
IGNORE_ATTR
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
`endif
IDELAYE2_FINEDELAY
#(
#(
.
CINVCTRL_SEL
(
"FALSE"
)
,
.
CINVCTRL_SEL
(
"FALSE"
)
,
.
DELAY_SRC
(
"IDATAIN"
)
,
.
DELAY_SRC
(
"IDATAIN"
)
,
...
...
wrap/idelay_nofine.v
View file @
64ff56ce
...
@@ -34,7 +34,10 @@ module idelay_nofine
...
@@ -34,7 +34,10 @@ module idelay_nofine
input
data_in
,
input
data_in
,
output
data_out
output
data_out
)
;
)
;
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
IDELAYE2
`ifndef
IGNORE_ATTR
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
`endif
IDELAYE2
#(
#(
.
CINVCTRL_SEL
(
"FALSE"
)
,
.
CINVCTRL_SEL
(
"FALSE"
)
,
.
DELAY_SRC
(
"IDATAIN"
)
,
.
DELAY_SRC
(
"IDATAIN"
)
,
...
...
wrap/mmcm_phase_cntr.v
View file @
64ff56ce
...
@@ -108,11 +108,9 @@ module mmcm_phase_cntr#(
...
@@ -108,11 +108,9 @@ module mmcm_phase_cntr#(
reg
[
PHASE_WIDTH
-
1
:
0
]
ps_target
;
reg
[
PHASE_WIDTH
-
1
:
0
]
ps_target
;
reg
ps_busy
=
0
;
reg
ps_busy
=
0
;
// TODO: find out why it was optimized out!
// TODO: find out why it was optimized out!
// (* keep = "true" *)
reg
ps_start0
,
ps_start
;
// debugging
reg
ps_start0
,
ps_start
;
// debugging
assign
ps_ready
=!
ps_busy
&&
locked
&&
!
ps_start0
&&
!
ps_start
;
assign
ps_ready
=!
ps_busy
&&
locked
&&
!
ps_start0
&&
!
ps_start
;
assign
psen
=
ps_start
&&
(
diff
!=
0
)
;
assign
psen
=
ps_start
&&
(
diff
!=
0
)
;
// wire [PHASE_WIDTH:0] diff= ps_target-ps_dout_r;
// made a difference, so it doesn't seem Vivado extends bits of operands "+", "-"
// made a difference, so it doesn't seem Vivado extends bits of operands "+", "-"
wire
[
PHASE_WIDTH
:
0
]
diff
=
{
ps_target
[
PHASE_WIDTH
-
1
]
,
ps_target
}-{
ps_dout_r
[
PHASE_WIDTH
-
1
]
,
ps_dout_r
};
wire
[
PHASE_WIDTH
:
0
]
diff
=
{
ps_target
[
PHASE_WIDTH
-
1
]
,
ps_target
}-{
ps_dout_r
[
PHASE_WIDTH
-
1
]
,
ps_dout_r
};
assign
ps_dout
=
ps_dout_r
;
assign
ps_dout
=
ps_dout_r
;
...
...
wrap/odelay_fine_pipe.v
View file @
64ff56ce
...
@@ -49,7 +49,10 @@ module odelay_fine_pipe
...
@@ -49,7 +49,10 @@ module odelay_fine_pipe
end
end
`endif
`endif
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
ODELAYE2_FINEDELAY
`ifndef
IGNORE_ATTR
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
`endif
ODELAYE2_FINEDELAY
#(
#(
.
CINVCTRL_SEL
(
"FALSE"
)
,
.
CINVCTRL_SEL
(
"FALSE"
)
,
.
DELAY_SRC
(
"ODATAIN"
)
,
.
DELAY_SRC
(
"ODATAIN"
)
,
...
...
wrap/odelay_pipe.v
View file @
64ff56ce
...
@@ -36,8 +36,10 @@ module odelay_pipe
...
@@ -36,8 +36,10 @@ module odelay_pipe
output
data_out
output
data_out
)
;
)
;
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
ODELAYE2
`ifndef
IGNORE_ATTR
#(
(
*
IODELAY_GROUP
=
IODELAY_GRP
*
)
`endif
ODELAYE2
#(
.
CINVCTRL_SEL
(
"FALSE"
)
,
.
CINVCTRL_SEL
(
"FALSE"
)
,
.
DELAY_SRC
(
"ODATAIN"
)
,
.
DELAY_SRC
(
"ODATAIN"
)
,
// .FINEDELAY("ADD_DLY"),
// .FINEDELAY("ADD_DLY"),
...
...
x393.v
View file @
64ff56ce
...
@@ -96,15 +96,17 @@ module x393 #(
...
@@ -96,15 +96,17 @@ module x393 #(
// localparam ADDRESS_NUMBER=15;
// localparam ADDRESS_NUMBER=15;
// localparam COLADDR_NUMBER=10;
// localparam COLADDR_NUMBER=10;
// Source for reset and clock
// Source for reset and clock
(
*
keep
=
"true"
*
)
`ifndef
IGNORE_ATTR
(
*
KEEP
=
"TRUE"
*
)
`endif
wire
[
3
:
0
]
fclk
;
// PL Clocks [3:0], output
wire
[
3
:
0
]
fclk
;
// PL Clocks [3:0], output
(
*
keep
=
"true"
*
)
`ifndef
IGNORE_ATTR
(
*
KEEP
=
"TRUE"
*
)
`endif
wire
[
3
:
0
]
frst
;
// PL Clocks [3:0], output
wire
[
3
:
0
]
frst
;
// PL Clocks [3:0], output
// AXI write interface signals
// AXI write interface signals
//(* keep = "true" *)
wire
axi_aclk
;
// clock - should be buffered
wire
axi_aclk
;
// clock - should be buffered
//(* dont_touch = "true" *)
wire
axi_grst
;
// reset, active high, global (try to get rid of) - trying, removed BUFG
wire
axi_grst
;
// reset, active high, global (try to get rid of) - trying, removed BUFG
// AXI Write Address
// AXI Write Address
wire
[
31
:
0
]
maxi0_awaddr
;
// AWADDR[31:0], input
wire
[
31
:
0
]
maxi0_awaddr
;
// AWADDR[31:0], input
...
...
x393.xdc
View file @
64ff56ce
...
@@ -31,6 +31,8 @@ set_property is_enabled false [get_drc_checks REQP-1577]
...
@@ -31,6 +31,8 @@ set_property is_enabled false [get_drc_checks REQP-1577]
#Synchronous clocking for BRAM (mult_saxi_wr_inbuf_i/ram_var_w_var_r_i/ram_i/RAMB36E1_i) in SDP mode ...
#Synchronous clocking for BRAM (mult_saxi_wr_inbuf_i/ram_var_w_var_r_i/ram_i/RAMB36E1_i) in SDP mode ...
set_property is_enabled false [get_drc_checks REQP-165]
set_property is_enabled false [get_drc_checks REQP-165]
#Useless input. The input pins CE and CLR are not used for BUFR_DIVIDE BYPASS.
set_property is_enabled false [get_drc_checks REQP-14]
# output SDRST, // output SDRST, active low
# output SDRST, // output SDRST, active low
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment