x393  1.0
FPGAcodeforElphelNC393camera
mcntrl_buf_rd.v
Go to the documentation of this file.
1 
40 `timescale 1ns/1ps
41 
42 module mcntrl_buf_rd #(
43  parameter integer LOG2WIDTH_RD = 5 // WIDTH= 1 << LOG2WIDTH
44  ) (
45  input ext_clk,
46  input [14-LOG2WIDTH_RD:0] ext_raddr, // read address
47  input ext_rd, // read port enable
48  input ext_regen, // output register enable
49  output [(1 << LOG2WIDTH_RD)-1:0] ext_data_out, // data out
50 
51 // input emul64, // emulate 64 pixel wide reads with actual 32-wide columns
52  // in the future - use rd64/wr64 for JP4 mode
53  input wclk, // !mclk (inverted)
54  input [1:0] wpage_in, // will register to wclk, input OK with mclk
55  input wpage_set, // set internal write page to wpage_in
56  input page_next, // advance to next page (and reset lower bits to 0)
57  output [1:0] page, // current inernal page
58  input we, // write port enable (also increment write buffer address)
59  input [63:0] data_in // data in
60 );
61  reg [1:0] page_r;
62  reg [6:0] waddr;
63  assign page=page_r;
64 // wire [4:0] next62_norm = waddr[6:2] + 1;
65 // wire [4:0] next62_rot = {waddr[2],waddr[6:3]} + 1;
66 // wire [4:0] next62_emul64 = {next62_rot[3:0],next62_rot[4]};
67  always @ (posedge wclk) begin
68 
69  if (wpage_set) page_r <= wpage_in;
70  else if (page_next) page_r <= page_r+1;
71 
72  if (page_next || wpage_set) waddr <= 0;
73  else if (we) waddr <= waddr+1;
74 
75 // if (page_next || wpage_set) waddr[1:0] <= 0;
76 // else if (we) waddr[1:0] <= waddr[1:0] + 1;
77 
78 // if (page_next || wpage_set) waddr[6:2] <= 0;
79 // else if (we && (&waddr[1:0])) waddr[6:2] <= emul64 ? next62_emul64 : next62_norm;
80 
81  end
82 // ram_512x64w_1kx32r #(
84  .REGISTERS(1),
85  .LOG2WIDTH_WR(6),
87  ) ram_512x64w_1kx32r_i (
88  .rclk (ext_clk), // input
89  .raddr (ext_raddr), // input[9:0]
90  .ren (ext_rd), // input
91  .regen (ext_regen), // input
92  .data_out (ext_data_out), // output[31:0]
93  .wclk (wclk), // input - OK, negedge mclk
94  .waddr ({page,waddr}), // input[8:0] @negedge mclk
95  .we (we), // input @negedge mclk
96  .web (8'hff), // input[7:0]
97  .data_in (data_in) // input[63:0] @negedge mclk
98  );
99 endmodule
100 
[1 << LOG2WIDTH_WR-1:0] 11872data_in
[14-LOG2WIDTH_WR:0] 11869waddr
5197waddrreg[6:0]
Definition: mcntrl_buf_rd.v:62
[63:0] 5195data_in
Definition: mcntrl_buf_rd.v:59
[1 << LOG2WIDTH_RD-1:0] 11867data_out
[1:0] 5193page
Definition: mcntrl_buf_rd.v:57
[14-LOG2WIDTH_RD:0] 11864raddr
5196page_rreg[1:0]
Definition: mcntrl_buf_rd.v:61
[1:0] 5190wpage_in
Definition: mcntrl_buf_rd.v:54
[1 << LOG2WIDTH_RD-1:0] 5188ext_data_out
Definition: mcntrl_buf_rd.v:49
integer 5183LOG2WIDTH_RD5
Definition: mcntrl_buf_rd.v:43
[14-LOG2WIDTH_RD:0] 5185ext_raddr
Definition: mcntrl_buf_rd.v:46
ram_512x64w_1kx32r_i ram_var_w_var_r
Definition: mcntrl_buf_rd.v:83