| module MACC (P, A, B, CARRYIN, CLK, RST); | |
| output reg [47:0] P; | |
| input [24:0] A; | |
| input [17:0] B; | |
| input CARRYIN; | |
| input CLK; | |
| input RST; | |
| reg [47:0] mult_reg; | |
| always @(posedge CLK) | |
| begin | |
| if(!RST) | |
| mult_reg <= 'b0; | |
| else | |
| mult_reg <= A * B; | |
| end | |
| always@(posedge CLK) | |
| begin | |
| if(!RST) | |
| P <= 'b0; | |
| else | |
| `ifndef BUG | |
| P <= mult_reg + CARRYIN; | |
| `else | |
| P <= mult_reg - CARRYIN; | |
| `endif | |
| end | |
| endmodule | |
| module top ( | |
| input clk, | |
| input rst, | |
| input [24:0] a, | |
| input [17:0] b, | |
| input carryin, | |
| output [47:0] p | |
| ); | |
| MACC u_MACC ( | |
| .P (p), | |
| .A (a), | |
| .B (b ), | |
| .CARRYIN (carryin ), | |
| .CLK (clk), | |
| .RST (rst) | |
| ); | |
| endmodule | |