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

Subversion Repositories integer_square_root

[/] [integer_square_root/] [trunk/] [src/] [ISR.sv] - Blame information for rev 4

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 ayka
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company:
4
// Engineer: Yihua Liu
5
//
6
// Create Date: 2022/06/08 16:50:36
7
// Design Name:
8
// Module Name: ISR
9
// Project Name: lab_3_b
10
// Target Devices: xczu7eg-ffvf1517-2-i
11
// Tool Versions:
12
// Description:
13
//
14
// Dependencies:
15
//
16
// Revision:
17
// Revision 0.01 - File Created
18
// Additional Comments:
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
 
22
 
23 4 ayka
module ISR(
24 2 ayka
    input               reset,
25
    input        [63:0] value,
26
    input               clock,
27
    output logic [31:0] result,
28 4 ayka
    output logic        done
29 2 ayka
);
30 4 ayka
    logic [63:0] new_value, proposed_solution_square;
31
    logic [31:0] proposed_solution;
32
    logic [4:0] i;
33
    logic start, it_done, flush;
34
    logic reset_sync;
35 2 ayka
 
36 4 ayka
    mult Multiplier (
37
        .clock(clock),
38
        .reset(reset),
39
        .mcand({32'h00000000, proposed_solution}),
40
        .mplier({32'h00000000, proposed_solution}),
41
        .start(start),
42
        .product(proposed_solution_square),
43
        .done(it_done)
44
    );
45
 
46 2 ayka
    always_comb begin
47 4 ayka
//        if (reset_async) begin
48
//            done = 0;
49
//            result = 0;
50
//        end
51
//        else begin
52
            // Reduction operator
53
            // see http://www.asic-world.com/verilog/operators2.html
54
            // done = ~|i & it_done & ~flush;
55
            // result[i] = (proposed_solution_square <= new_value) & it_done;
56
        done = ~|i & it_done & ~flush & ~reset_sync;
57
        result[i] = (proposed_solution_square <= new_value) & it_done & ~reset_sync;
58
//        end
59 2 ayka
    end
60
 
61 4 ayka
    always_ff @(posedge clock or posedge reset) begin
62 2 ayka
        if (reset) begin
63 4 ayka
            // done <= 0;
64
            // result <= 0;
65
            reset_sync <= 1;
66
            start <= 0;
67
            flush <= 0;
68
            i <= 5'b11111;
69
            proposed_solution <= 32'h80000000;
70
            new_value <= value;
71 2 ayka
        end
72
        else begin
73 4 ayka
            reset_sync <= 0;
74
            start <= !it_done || !flush;
75
            flush <= it_done;
76
            // if (!it_done && flush) begin
77
            //     flush <= 0;
78
            // end
79
            if (i && it_done && !flush) begin
80
                // flush <= 1;
81
                i <= i - 1;
82
                proposed_solution[i-1] <= 1;
83
                proposed_solution[i] <= result[i];
84
            end
85 2 ayka
        end
86
    end
87
endmodule

powered by: WebSVN 2.1.0

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