x393
1.0
FPGAcodeforElphelNC393camera
simul_axi_read.v
Go to the documentation of this file.
1
39
`timescale 1ns/1ps
40
41
module
simul_axi_read
#(
42
parameter
ADDRESS_WIDTH
=
10
43
)(
44
input
clk
,
45
input
reset
,
46
input
last
,
// last data word in burst
47
input
data_stb
,
// data strobe (RVALID & RREADY) genearted externally
48
input
[
ADDRESS_WIDTH
-
1
:
0
]
raddr
,
// read burst address as written by axi master, 10 significant bits [11:2], valid at rcmd
49
input
[
3
:
0
]
rlen
,
// burst length as written by axi master, valid at rcmd
50
input
rcmd
,
// read command (address+length) strobe
51
output
[
ADDRESS_WIDTH
-
1
:
0
]
addr_out
,
// output address
52
output
burst
,
// burst in progress
53
output
reg
err_out
);
// data last does not match predicted or FIFO over/under run
54
55
wire
[
ADDRESS_WIDTH
-
1
:
0
]
raddr_fifo
;
// raddr after fifo
56
wire
[
3
:
0
]
rlen_fifo
;
// rlen after fifo
57
wire
fifo_valid
;
// fifo out valid
58
reg
burst_r
=
0
;
59
reg
[
3
:
0
]
left_plus_1
;
60
wire
start_burst
=
fifo_valid
&&
data_stb
&& !
burst_r
;
61
wire
generated_last
=
burst
?(
left_plus_1
==
1
): (
fifo_valid
&& (
rlen_fifo
==
0
)) ;
62
wire
fifo_in_rdy
;
63
wire
error_w
= (
data_stb
&& (
last
!=
generated_last
)) || (
rcmd
&& !
fifo_in_rdy
) || (
start_burst
&& !
fifo_valid
);
64
reg
[
ADDRESS_WIDTH
-
1
:
0
]
adr_out_r
;
65
66
assign
burst
=
burst_r
||
start_burst
;
67
assign
addr_out
=
start_burst
?
raddr_fifo
:
adr_out_r
;
68
always
@ (
posedge
reset
or
posedge
clk
)
begin
69
if
(
reset
)
burst_r
<=
0
;
70
else
if
(
start_burst
)
burst_r
<=
rlen_fifo
!=
0
;
71
// else if (last && data_stb) burst_r <= 0;
72
else
if
(
generated_last
&&
data_stb
)
burst_r
<=
0
;
73
if
(
reset
)
left_plus_1
<=
0
;
74
else
if
(
start_burst
)
left_plus_1
<=
rlen_fifo
;
75
else
if
(
data_stb
)
left_plus_1
<=
left_plus_1
-
1
;
76
if
(
reset
)
err_out
<=
0
;
77
else
err_out
<=
error_w
;
78
// if (reset) was_last <= 0;
79
// else if (data_stb) was_last <= last;
80
81
end
82
always
@ (
posedge
clk
)
begin
83
if
(
start_burst
)
adr_out_r
<=
raddr_fifo
+
1
;
// simulating only address incremental mode
84
else
if
(
data_stb
)
adr_out_r
<=
adr_out_r
+
1
;
85
86
end
87
simul_fifo
88
#(
89
.
WIDTH
(
ADDRESS_WIDTH
+
4
),
90
.
DEPTH
(
64
)
91
)
simmul_fifo_i
(
92
.
clk
(
clk
),
93
.
reset
(
reset
),
94
// .data_in({rlen[3:0],raddr[11:2]}), // did not detect raddr[11:2] for input [ 9:0] raddr
95
.
data_in
({
rlen
[
3
:
0
],
raddr
}),
96
.
load
(
rcmd
),
97
.
input_ready
(
fifo_in_rdy
),
98
.
data_out
({
rlen_fifo
,
raddr_fifo
}),
99
.
valid
(
fifo_valid
),
100
.
ready
(
start_burst
));
101
endmodule
102
simul_axi_read.9150raddr
[ADDRESS_WIDTH-1:0] 9150raddr
Definition:
simul_axi_read.v:48
simul_axi_read.9158fifo_valid
9158fifo_validwire
Definition:
simul_axi_read.v:57
simul_axi_read.9155err_out
reg 9155err_out
Definition:
simul_axi_read.v:53
simul_axi_read.9147reset
9147reset
Definition:
simul_axi_read.v:45
simul_axi_read.9162generated_last
9162generated_lastwire
Definition:
simul_axi_read.v:61
simul_fifo.9219input_ready
9219input_ready
Definition:
simul_fifo.v:53
simul_axi_read.9161start_burst
9161start_burstwire
Definition:
simul_axi_read.v:60
simul_axi_read.9160left_plus_1
9160left_plus_1reg[3:0]
Definition:
simul_axi_read.v:59
simul_fifo.9218load
9218load
Definition:
simul_fifo.v:52
simul_axi_read.9145ADDRESS_WIDTH
9145ADDRESS_WIDTH10
Definition:
simul_axi_read.v:42
simul_axi_read
Definition:
simul_axi_read.v:41
simul_fifo.9221valid
9221valid
Definition:
simul_fifo.v:55
simul_axi_read.9152rcmd
9152rcmd
Definition:
simul_axi_read.v:50
simul_fifo.9216reset
9216reset
Definition:
simul_fifo.v:50
simul_axi_read.9146clk
9146clk
Definition:
simul_axi_read.v:44
simul_axi_read.9154burst
9154burst
Definition:
simul_axi_read.v:52
simul_axi_read.9163fifo_in_rdy
9163fifo_in_rdywire
Definition:
simul_axi_read.v:62
simul_axi_read.simul_fifo
simmul_fifo_i simul_fifo
Definition:
simul_axi_read.v:87
simul_axi_read.9159burst_r
9159burst_rreg
Definition:
simul_axi_read.v:58
simul_fifo.9220data_out
[WIDTH-1:0] 9220data_out
Definition:
simul_fifo.v:54
simul_axi_read.9157rlen_fifo
9157rlen_fifowire[3:0]
Definition:
simul_axi_read.v:56
simul_axi_read.9164error_w
9164error_wwire
Definition:
simul_axi_read.v:63
simul_axi_read.9148last
9148last
Definition:
simul_axi_read.v:46
simul_axi_read.9151rlen
[ 3:0] 9151rlen
Definition:
simul_axi_read.v:49
simul_axi_read.9156raddr_fifo
9156raddr_fifowire[ADDRESS_WIDTH-1:0]
Definition:
simul_axi_read.v:55
simul_fifo.9215clk
9215clk
Definition:
simul_fifo.v:49
simul_axi_read.9153addr_out
[ADDRESS_WIDTH-1:0] 9153addr_out
Definition:
simul_axi_read.v:51
simul_fifo.9217data_in
[WIDTH-1:0] 9217data_in
Definition:
simul_fifo.v:51
simul_fifo.9222ready
9222ready
Definition:
simul_fifo.v:56
simul_axi_read.9165adr_out_r
9165adr_out_rreg[ADDRESS_WIDTH-1:0]
Definition:
simul_axi_read.v:64
simul_axi_read.9149data_stb
9149data_stb
Definition:
simul_axi_read.v:47
simulation_modules
simul_axi_read.v
Generated by
1.8.12