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

Subversion Repositories pwm

[/] [pwm/] [trunk/] [RTL/] [minus_one.v] - Blame information for rev 4

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

Line No. Rev Author Line
1 2 m99
/*Author: Zhuxu
2
        m99a1@yahoo.cn
3
Use parallel prefix tree structure to reduce a 16-bit number by one.
4
 
5
stage 0:        number of genration=16; number of logic operation=16;   G_0[xx]=~i_operand[xx];
6
stage 1:        NOG=16;                 NOO=8;                          G_1[2n-1]=G_0[2n-1]&&G_0[2n-2]; n=8:1
7
stage 2:        NOG=16;                 NOO=7;                          G_2[2n-1]=G_1[2n-1]&&G_1[2n-3]; n=8:2
8
stage 3:        NOG=16;                 NOO=6;                          G_3[2n-1]=G_2[2n-1]&&G_2[2n-5]; n=8:3
9
stage 4:        NOG=16;                 NOO=4;                          G_4[2n-1]=G_3[2n-1]&&G_3[2n-9]; n=8:5
10
stage 5:        NOG=16;                 NOO=7;                          G_5[2n]=G_4[2n]&&G_4[2n-1];     n=7:1
11
 
12
*/
13
module minus_one(
14
input   [15:0]i_operand,
15
output  [15:0]o_result,
16
output  o_borrow
17
);
18
//stage 0
19
wire    [15:0]G_0;
20
assign  G_0=~i_operand;
21
 
22
//stage 1
23
wire    [15:0]G_1;
24
assign  G_1[1]=G_0[1]&G_0[0];
25
assign  G_1[3]=G_0[3]&G_0[2];
26
assign  G_1[5]=G_0[5]&G_0[4];
27
assign  G_1[7]=G_0[7]&G_0[6];
28
assign  G_1[9]=G_0[9]&G_0[8];
29
assign  G_1[11]=G_0[11]&G_0[10];
30
assign  G_1[13]=G_0[13]&G_0[12];
31
assign  G_1[15]=G_0[15]&G_0[14];
32
assign  G_1[0]=G_0[0];
33
assign  G_1[2]=G_0[2];
34
assign  G_1[4]=G_0[4];
35
assign  G_1[6]=G_0[6];
36
assign  G_1[8]=G_0[8];
37
assign  G_1[10]=G_0[10];
38
assign  G_1[12]=G_0[12];
39
assign  G_1[14]=G_0[14];
40
 
41
//stage 2
42
wire    [15:0]G_2;
43
assign  G_2[3]=G_1[3]&G_1[1];
44
assign  G_2[5]=G_1[5]&G_1[3];
45
assign  G_2[7]=G_1[7]&G_1[5];
46
assign  G_2[9]=G_1[9]&G_1[7];
47
assign  G_2[11]=G_1[11]&G_1[9];
48
assign  G_2[13]=G_1[13]&G_1[11];
49
assign  G_2[15]=G_1[15]&G_1[13];
50
assign  G_2[0]=G_1[0];
51
assign  G_2[2]=G_1[2];
52
assign  G_2[1]=G_1[1];
53
assign  G_2[4]=G_1[4];
54
assign  G_2[6]=G_1[6];
55
assign  G_2[8]=G_1[8];
56
assign  G_2[10]=G_1[10];
57
assign  G_2[12]=G_1[12];
58
assign  G_2[14]=G_1[14];
59
 
60
//stage 3
61
wire    [15:0]G_3;
62
assign  G_3[5]=G_2[5]&G_2[1];
63
assign  G_3[7]=G_2[7]&G_2[3];
64
assign  G_3[9]=G_2[9]&G_2[5];
65
assign  G_3[11]=G_2[11]&G_2[7];
66
assign  G_3[13]=G_2[13]&G_2[9];
67
assign  G_3[15]=G_2[15]&G_2[11];
68
assign  G_3[0]=G_2[0];
69
assign  G_3[2]=G_2[2];
70
assign  G_3[1]=G_2[1];
71
assign  G_3[4]=G_2[4];
72
assign  G_3[3]=G_2[3];
73
assign  G_3[6]=G_2[6];
74
assign  G_3[8]=G_2[8];
75
assign  G_3[10]=G_2[10];
76
assign  G_3[12]=G_2[12];
77
assign  G_3[14]=G_2[14];
78
 
79
//stage 4
80
wire    [15:0]G_4;
81
assign  G_4[9]=G_3[9]&G_3[1];
82
assign  G_4[11]=G_3[11]&G_3[3];
83
assign  G_4[13]=G_3[13]&G_3[5];
84
assign  G_4[15]=G_3[15]&G_3[7];
85
assign  G_4[0]=G_3[0];
86
assign  G_4[2]=G_3[2];
87
assign  G_4[1]=G_3[1];
88
assign  G_4[4]=G_3[4];
89
assign  G_4[3]=G_3[3];
90
assign  G_4[6]=G_3[6];
91
assign  G_4[5]=G_3[5];
92
assign  G_4[8]=G_3[8];
93
assign  G_4[7]=G_3[7];
94
assign  G_4[10]=G_3[10];
95
assign  G_4[12]=G_3[12];
96
assign  G_4[14]=G_3[14];
97
 
98
//stage 5
99
wire    [15:0]G_5;
100
assign  G_5[2]=G_4[2]&G_4[1];
101
assign  G_5[4]=G_4[4]&G_4[3];
102
assign  G_5[6]=G_4[6]&G_4[5];
103
assign  G_5[8]=G_4[8]&G_4[7];
104
assign  G_5[10]=G_4[10]&G_4[9];
105
assign  G_5[12]=G_4[12]&G_4[11];
106
assign  G_5[14]=G_4[14]&G_4[13];
107
assign  G_5[1]=G_4[1];
108
assign  G_5[3]=G_4[3];
109
assign  G_5[5]=G_4[5];
110
assign  G_5[7]=G_4[7];
111
assign  G_5[9]=G_4[9];
112
assign  G_5[11]=G_4[11];
113
assign  G_5[13]=G_4[13];
114
assign  G_5[15]=G_4[15];
115
assign  G_5[0]=G_4[0];
116
 
117
//stage 6
118
assign  o_result[0]=~i_operand[0];
119
assign  o_result[15:1]=(G_5[14:0]&(~i_operand[15:1]))|((~G_5[14:0])&i_operand[15:1]);
120
assign  o_borrow=G_5[15];
121
 
122
endmodule

powered by: WebSVN 2.1.0

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