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

Subversion Repositories fixed_point_arithmetic_parameterized

[/] [fixed_point_arithmetic_parameterized/] [trunk/] [src/] [qmult.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 samis13
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company: 
4
// Engineer: 
5
// 
6
// Create Date:    11:21:14 08/24/2011 
7
// Design Name: 
8
// Module Name:    q15_mult 
9
// Project Name: 
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 0.01 - File Created
18
// Additional Comments: 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
module qmult(
22
    input [N-1:0] a,
23
    input [N-1:0] b,
24
    output [N-1:0] c
25
    );
26
 
27
        wire [2*N-1:0] a_ext;
28
        wire [2*N-1:0] b_ext;
29
        wire [2*N-1:0] r_ext;
30
 
31
        reg [2*N-1:0] a_mult;
32
        reg [2*N-1:0] b_mult;
33
        reg [2*N-1:0] result;
34
        reg [N-1:0] retVal;
35
 
36
        //Parameterized values
37
        parameter Q = 15;
38
        parameter N = 32;
39
 
40
        qtwosComp #(Q,N) comp_a (a[30:0], a_ext);
41
 
42
        qtwosComp #(Q,N) comp_b (b[30:0], b_ext);
43
 
44
        qtwosComp #(Q,N) comp_r (result[N-2+Q:Q], r_ext);
45
 
46
        assign c = retVal;
47
 
48
        always @(a_ext,b_ext)
49
        begin
50
                if(a[N-1] == 1)
51
                        a_mult <= a_ext;
52
                else
53
                        a_mult <= a;
54
 
55
                if(b[N-1] == 1)
56
                        b_mult <= b_ext;
57
                else
58
                        b_mult <= b;
59
        end
60
 
61
        always @(a_mult,b_mult)
62
        begin
63
                result <= a_mult * b_mult;
64
        end;
65
 
66
        always @(result,r_ext)
67
        begin
68
                //sign
69
                if((a[N-1] == 1 && b[N-1] == 0) || (a[N-1] == 0 && b[N-1] == 1)) begin
70
                        retVal[N-1] <= 1;
71
                        retVal[N-2:0] <= r_ext[N-2:0];
72
                end
73
                else begin
74
                        retVal[N-1] <= 0;
75
                        retVal[N-2:0] <= result[N-2+Q:Q];
76
                end
77
        end
78
 
79
endmodule

powered by: WebSVN 2.1.0

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