OpenCores
URL https://opencores.org/ocsvn/socgen/socgen/trunk

Subversion Repositories socgen

[/] [socgen/] [trunk/] [common/] [opencores.org/] [cde/] [ip/] [mult/] [rtl/] [verilog/] [top.serial] - Blame information for rev 135

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 131 jt_eaton
 
2
   //
3
   // Internal wires and regs
4
   //
5
 
6
 
7
   reg [5:0]                            serial_mul_cnt;
8
   reg                                  mul_free;
9
 
10
 
11
   wire [WIDTH-1:0]                     x;
12
   wire [WIDTH-1:0]                     y;
13
 
14
   reg ex_freeze_r;
15
 
16
 
17
   always @( posedge clk)
18
     if (reset) ex_freeze_r <= 1'b1;
19
     else       ex_freeze_r <= ex_freeze;
20
 
21
 
22
   //
23
   // Combinatorial logic
24
   //
25
 
26
 
27
   assign x = a_in;
28
 
29
   assign y = b_in;
30
 
31
 
32 135 jt_eaton
`ifndef SYNTHESIS
33 131 jt_eaton
 
34
 
35
always@(posedge clk)
36
if((serial_mul_cnt == 6'b000000) && ex_freeze && ex_freeze_r)
37
begin
38
   $display("%t %m mul (%x,%x,%x);",$realtime,a_in,b_in,mul_prod_r );
39
end
40
 
41
 
42
 
43
 
44
`endif
45
 
46
 
47
 
48
 
49
 
50
 
51
   always @( posedge clk)
52
     if (reset) begin
53
        mul_prod_r <=  64'h0000_0000_0000_0000;
54
        serial_mul_cnt <= 6'd0;
55
        mul_free <= 1'b1;
56
 
57
     end
58
     else if (|serial_mul_cnt) begin
59
        serial_mul_cnt <= serial_mul_cnt - 6'd1;
60
        if (mul_prod_r[0])
61
          mul_prod_r[(WIDTH*2)-1:WIDTH-1] <= mul_prod_r[(WIDTH*2)-1:WIDTH] + x;
62
        else
63
          mul_prod_r[(WIDTH*2)-1:WIDTH-1] <= {1'b0,mul_prod_r[(WIDTH*2)-1: WIDTH]};
64
        mul_prod_r[WIDTH-2:0] <= mul_prod_r[WIDTH-1:1];
65
 
66
     end
67
     else if (alu_op_mul && mul_free) begin
68
        mul_prod_r <= {32'd0, y};
69
        mul_free <= 0;
70
        serial_mul_cnt <= 6'b10_0000;
71
     end
72
     else if (!ex_freeze | mul_free) begin
73
        mul_free <= 1'b1;
74
     end
75
 
76
   assign mul_stall = (|serial_mul_cnt) | (alu_op_mul & !ex_freeze_r);
77
 
78
 
79
 
80
 
81
 
82
 
83
 
84
 
85
 
86
 
87
 
88
 
89
 
90
 
91
 
92
 
93
 
94
 
95
 
96
 
97
 
98
 
99
 
100
 
101
 
102
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.