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;
65 
66  assign burst=burst_r || start_burst;
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
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),
99  .valid(fifo_valid),
100  .ready(start_burst));
101 endmodule
102 
[ADDRESS_WIDTH-1:0] 9150raddr
9160left_plus_1reg[3:0]
simmul_fifo_i simul_fifo
[WIDTH-1:0] 9220data_out
Definition: simul_fifo.v:54
9157rlen_fifowire[3:0]
[ 3:0] 9151rlen
9156raddr_fifowire[ADDRESS_WIDTH-1:0]
[ADDRESS_WIDTH-1:0] 9153addr_out
[WIDTH-1:0] 9217data_in
Definition: simul_fifo.v:51
9165adr_out_rreg[ADDRESS_WIDTH-1:0]