| module edff_2d (/*AUTOARG*/ | |
| // Outputs | |
| q, | |
| // Inputs | |
| clk, rst_n, en, d | |
| ); | |
| parameter REGISTER_WIDTH = 32; | |
| parameter NUM_OF_REGISTERS = 8; | |
| parameter RESET_STATE = 0; | |
| input clk; | |
| // synopsys sync_set_reset "rst_n" | |
| input rst_n; | |
| input [NUM_OF_REGISTERS-1:0] en; | |
| input [NUM_OF_REGISTERS*REGISTER_WIDTH-1 : 0 ] d ; | |
| output [NUM_OF_REGISTERS*REGISTER_WIDTH-1 : 0 ] q; | |
| integer i; | |
| reg [NUM_OF_REGISTERS*REGISTER_WIDTH-1 : 0 ] q; | |
| always @(posedge clk or negedge rst_n) begin | |
| if ( !rst_n ) begin | |
| for (i = 0; i <= NUM_OF_REGISTERS-1; i = i + 1) | |
| q[REGISTER_WIDTH*(i+1)-1 -: REGISTER_WIDTH] <= RESET_STATE; | |
| end else begin | |
| for (i = 0; i <= NUM_OF_REGISTERS-1; i = i + 1) | |
| if (en[i]) begin | |
| q[REGISTER_WIDTH*(i+1)-1 -: REGISTER_WIDTH] <= d[REGISTER_WIDTH*(i+1)-1 -: REGISTER_WIDTH]; | |
| end //else hold old value | |
| end | |
| end | |
| endmodule |