| module top(input clk, cen, rst, ina, inb, | |
| output reg outa, outb, outc, outd, | |
| output [DEPTH-1:0] vec0, | |
| output [DEPTH-1:0] vec1); | |
| localparam DEPTH = 5; | |
| reg [DEPTH-1:0] r_vec0 = 1'b0; | |
| reg [DEPTH-1:0] r_vec1 = 1'b0; | |
| initial outa = 1'b0; | |
| initial outb = 1'b0; | |
| initial outc = 1'b0; | |
| initial outd = 1'b0; | |
| // posedge, clock_enable, reset (sr) | |
| always @(posedge clk) | |
| if (cen) | |
| if(rst) | |
| r_vec0 <= 1'b0; | |
| else | |
| r_vec0 <= {r_vec0[DEPTH-2:0], ina}; | |
| // negedge, clock_enable, reset (ss) | |
| always @(negedge clk) | |
| if (ina) | |
| if(rst) | |
| r_vec1 <= 1'b1; | |
| else | |
| r_vec1 <= {r_vec1[DEPTH-2:0], inb}; | |
| // posedge, async reset (sr) | |
| always @(posedge clk or posedge rst) | |
| if(rst) | |
| outa <= 1'b0; | |
| else | |
| outa <= r_vec0[DEPTH-1]; | |
| // posedge | |
| always @(posedge clk) | |
| outb <= r_vec1[DEPTH-1]; | |
| // negedge | |
| always @(negedge clk) | |
| outc <= r_vec0[DEPTH-1]; | |
| // negedge, async reset (ss) | |
| always @(negedge clk or posedge rst) | |
| if (rst) | |
| outd <= 1'b1; | |
| else | |
| outd <= r_vec1[DEPTH-1]; | |
| assign vec0 = r_vec0; | |
| assign vec1 = r_vec1; | |
| endmodule |