1 module `MODULE_NAME(clk, rst,
3 out_r_, out_a, out_d_);
10 input [(`WIDTH-1):0] in_d;
11 output [(`WIDTH-1):0] out_d_;
16 assign out_r_ = out_r;
18 wire[((1<<(`ADDR_BITS))-1):0] controlx;
19 reg[((1<<(`ADDR_BITS))-1):0] control;
24 if (`ADDR_BITS > 1) begin: OUT
25 for(i=1; i<=((1<<`ADDR_BITS)-2) ; i=i+1) begin : OUT
27 ( control[i-1] && !control[i] ) ? 1 :
28 ( control[i] && !control[i+1]) ? 0 :
35 initial addr = 4'b1111;
39 for(j=0; j<`WIDTH ; j=j+1) begin : OUTX
40 SRL16E SRL16E (.Q (out_d_[j]),
45 .CE (in_r && !in_a && !control[0]),
48 defparam SRL16E.INIT = 0;
52 assign controlx[(1<<`ADDR_BITS)-1] =
53 !control[(1<<`ADDR_BITS)-1] ? control[(1<<`ADDR_BITS)-2] : (!out_r && !out_a) ? 0 : control[(1<<`ADDR_BITS)-1];
58 always @(posedge clk) begin
67 if (!in_r && in_a) in_a <= 0;
69 if (!control[1]) control[0] <= 0;
70 end else if (in_r && !in_a) begin
76 control[(1<<`ADDR_BITS)-1:1] <= controlx[(1<<`ADDR_BITS)-1:1];
78 if (control[(1<<`ADDR_BITS)-1] && !out_r && !out_a) begin
81 if (out_r && out_a) begin
85 if ( inchead && !inctail) begin
87 end else if (!inchead && inctail) begin