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;
43 for(j=0; j<`WIDTH ; j=j+1) begin : OUTX
44 SRL16E SRL16E (.Q (out_d_[j]),
49 .CE (in_r && !in_a && !control[0] && count==0),
52 defparam SRL16E.INIT = 0;
56 assign controlx[(1<<`ADDR_BITS)-1] =
57 !control[(1<<`ADDR_BITS)-1] ? control[(1<<`ADDR_BITS)-2] : (!out_r && !out_a) ? 0 : control[(1<<`ADDR_BITS)-1];
59 always @(posedge clk) begin
66 end else if (count!=0) begin
75 if (!in_r && in_a) in_a <= 0;
77 if (!control[1]) control[0] <= 0;
78 end else if (in_r && !in_a) begin
84 control[(1<<`ADDR_BITS)-1:1] <= controlx[(1<<`ADDR_BITS)-1:1];
86 if (control[(1<<`ADDR_BITS)-1] && !out_r && !out_a) begin
89 if (out_r && out_a) begin
93 if ( inchead && !inctail) begin
95 end else if (!inchead && inctail) begin