x393  1.0
FPGAcodeforElphelNC393camera
cmd_encod_linear_rw.v
Go to the documentation of this file.
1 
39 `timescale 1ns/1ps
40 
42 // parameter BASEADDR = 0,
43  parameter ADDRESS_NUMBER= 15,
44  parameter COLADDR_NUMBER= 10,
45  parameter NUM_XFER_BITS= 6, // number of bits to specify transfer length
46  parameter CMD_PAUSE_BITS= 10,
47  parameter CMD_DONE_BIT= 10, // VDT BUG: CMD_DONE_BIT is used in a function call parameter!
48  parameter RSEL= 1'b1, // late/early READ commands (to adjust timing by 1 SDCLK period)
49  parameter WSEL= 1'b0 // late/early WRITE commands (to adjust timing by 1 SDCLK period)
50 ) (
51  input mrst,
52  input clk,
53 // programming interface
54 // input [7:0] cmd_ad, // byte-serial command address/data (up to 6 bytes: AL-AH-D0-D1-D2-D3
55 // input cmd_stb, // strobe (with first byte) for the command a/d
56  input [2:0] bank_in, // bank address
57  input [ADDRESS_NUMBER-1:0] row_in, // memory row
58  input [COLADDR_NUMBER-4:0] start_col, // start memory column in 8-bursts
59  input [NUM_XFER_BITS-1:0] num128_in, // number of 128-bit words to transfer (8*16 bits) - full bursts of 8 ( 0 - maximal length, 64)
60  input skip_next_page_in, // do not reset external buffer (continue)
61  input start_rd, // start generating commands by cmd_encod_linear_rd
62  input start_wr, // start generating commands by cmd_encod_linear_wr
63  output reg start, // this channel was started (1 clk from start_rd || start_wr
64  output reg [31:0] enc_cmd, // encoded command
65  output reg enc_wr, // write encoded command
66  output reg enc_done // encoding finished
67 );
68  wire [31:0] enc_cmd_rd; // encoded command
69  wire enc_wr_rd; // write encoded command
70  wire enc_done_rd; // encoding finished
71  wire [31:0] enc_cmd_wr; // encoded command
72  wire enc_wr_wr; // write encoded command
73  wire enc_done_wr; // encoding finished
74  reg select_wr;
75 
82  .RSEL (RSEL)
83  ) cmd_encod_linear_rd_i (
84  .mrst (mrst), // input
85  .clk (clk), // input
86  .bank_in (bank_in), // input[2:0]
87  .row_in (row_in), // input[14:0]
88  .start_col (start_col), // input[6:0]
89  .num128_in (num128_in), // input[5:0]
91  .start (start_rd), // input
92  .enc_cmd (enc_cmd_rd), // output[31:0] reg
93  .enc_wr (enc_wr_rd), // output reg
94  .enc_done (enc_done_rd) // output reg
95  );
96 
103  .WSEL (WSEL)
104  ) cmd_encod_linear_wr_i (
105  .mrst (mrst), // input
106  .clk (clk), // input
107  .bank_in (bank_in), // input[2:0]
108  .row_in (row_in), // input[14:0]
109  .start_col (start_col), // input[6:0]
110  .num128_in (num128_in), // input[5:0]
112  .start (start_wr), // input
113  .enc_cmd (enc_cmd_wr), // output[31:0] reg
114  .enc_wr (enc_wr_wr), // output reg
115  .enc_done (enc_done_wr) // output reg
116  );
117 
118  always @(posedge clk) begin
119  if (mrst) start <= 0;
120  else start <= start_rd || start_wr;
121 
122  if (mrst) select_wr <= 0;
123  else if (start_rd) select_wr <= 0;
124  else if (start_wr) select_wr <= 1;
125  end
126  always @(posedge clk) begin
130  end
131 
132 endmodule
133 
[NUM_XFER_BITS-1:0] 4004num128_in
[COLADDR_NUMBER-4:0] 4003start_col
[NUM_XFER_BITS-1:0] 4030num128_in
cmd_encod_linear_rd_i cmd_encod_linear_rd
[ADDRESS_NUMBER-1:0] 4002row_in
[COLADDR_NUMBER-4:0] 4029start_col
[NUM_XFER_BITS-1:0] 3955num128_in
[ADDRESS_NUMBER-1:0] 3953row_in
[COLADDR_NUMBER-4:0] 3954start_col
cmd_encod_linear_wr_i cmd_encod_linear_wr
[ADDRESS_NUMBER-1:0] 4028row_in