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

Subversion Repositories socgen

[/] [socgen/] [trunk/] [common/] [opencores.org/] [cde/] [ip/] [mult/] [rtl/] [verilog/] [top.generic] - Diff between revs 131 and 135

Only display areas with differences | Details | Blame | View Log

Rev 131 Rev 135
   //
   //
   // Internal wires and regs
   // Internal wires and regs
   //
   //
reg ex_freeze_r;
reg ex_freeze_r;
  always @( posedge clk)
  always @( posedge clk)
     if (reset) ex_freeze_r <= 1'b1;
     if (reset) ex_freeze_r <= 1'b1;
     else       ex_freeze_r <= ex_freeze;
     else       ex_freeze_r <= ex_freeze;
   wire [2*WIDTH-1:0]                   mul_prod;
   wire [2*WIDTH-1:0]                   mul_prod;
   reg [1:0]                            mul_stall_count;
   reg [1:0]                            mul_stall_count;
 
 
`ifndef SYNTHESYS
`ifndef SYNTHESIS
 
 
always@(posedge clk)
always@(posedge clk)
if(mul_stall_count == 2'b10)
if(mul_stall_count == 2'b10)
begin
begin
   $display("%t %m mul (%x,%x,%x);",$realtime,a_in,b_in,mul_prod );
   $display("%t %m mul (%x,%x,%x);",$realtime,a_in,b_in,mul_prod );
end
end
`endif
`endif
   or1200_gmultp2_32x32 or1200_gmultp2_32x32(
   or1200_gmultp2_32x32 or1200_gmultp2_32x32(
                                             .X(a_in),
                                             .X(a_in),
                                             .Y(b_in),
                                             .Y(b_in),
                                             .RST(reset),
                                             .RST(reset),
                                             .CLK(clk),
                                             .CLK(clk),
                                             .P(mul_prod)
                                             .P(mul_prod)
                                             );
                                             );
   always @( posedge clk)
   always @( posedge clk)
     if (reset) begin
     if (reset) begin
        mul_prod_r <=  64'h0000_0000_0000_0000;
        mul_prod_r <=  64'h0000_0000_0000_0000;
     end
     end
     else begin
     else begin
        mul_prod_r <=  mul_prod[63:0];
        mul_prod_r <=  mul_prod[63:0];
     end
     end
   //
   //
   // Generate stall signal during multiplication
   // Generate stall signal during multiplication
   //
   //
   always @( posedge clk)
   always @( posedge clk)
     if (reset)
     if (reset)
       mul_stall_count <= 0;
       mul_stall_count <= 0;
     else if (!(|mul_stall_count))
     else if (!(|mul_stall_count))
       mul_stall_count <= {mul_stall_count[0], alu_op_mul & !ex_freeze_r};
       mul_stall_count <= {mul_stall_count[0], alu_op_mul & !ex_freeze_r};
     else
     else
       mul_stall_count <= {mul_stall_count[0],1'b0};
       mul_stall_count <= {mul_stall_count[0],1'b0};
   assign mul_stall = (|mul_stall_count) |
   assign mul_stall = (|mul_stall_count) |
                      (!(|mul_stall_count) & alu_op_mul & !ex_freeze_r);
                      (!(|mul_stall_count) & alu_op_mul & !ex_freeze_r);
 
 

powered by: WebSVN 2.1.0

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