| /* |
| Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 77]. |
| */ |
| module top(clk,a,b,c,set); |
| parameter A_WIDTH = 4; |
| parameter B_WIDTH = 3; |
| input set; |
| input clk; |
| input signed [(A_WIDTH - 1):0] a; |
| input signed [(B_WIDTH - 1):0] b; |
| output signed [(A_WIDTH + B_WIDTH - 1):0] c; |
| reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c; |
| assign c = reg_tmp_c; |
| always @(posedge clk) |
| begin |
| if(set) |
| begin |
| reg_tmp_c <= 0; |
| end |
| else |
| begin |
| reg_tmp_c <= a * b + c; |
| end |
| end |
| endmodule |