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

Subversion Repositories signed_integer_divider

[/] [signed_integer_divider/] [trunk/] [shifter_tb.v] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 m99
module  shifter_tb();
2
reg     clk=0,rst=0;
3
always #1 clk=~clk;
4
initial #100 rst=1;
5
 
6
// driver
7
reg     signed[31:0]data=0,data_1=0;
8
reg     state=0;
9
reg     [4:0]ct=0;
10
always@(posedge clk)begin
11
        if(rst)begin
12
                case(state)
13
                        0:begin
14
                                data<=$random;
15
                                state<=1;
16
                        end
17
                        1:begin
18
                                if(ct==31)begin
19
                                        state<=0;
20
 
21
                                        ct<=0;
22
                                end
23
                                else begin
24
                                        ct<=ct+1;
25
                                        data<=data>>>1;
26
                                end
27
                        end
28
                endcase
29
        end
30
end
31
 
32
// score board
33
reg     signd=0;
34
reg     [31:0]data_tb=0;
35
reg     [4:0]shifted_tb=0;
36
always@* begin
37
        if(data[31]==0)begin
38
                data_1=~data;
39
                signd=1;
40
        end
41
        else begin
42
                signd=0;
43
                data_1=data;
44
        end
45
        casex(data_1)
46
                32'b10??????????????????????????????:begin
47
                        data_tb=data_1[31:0];
48
                        shifted_tb=0;
49
                end
50
                32'b110?????????????????????????????:begin
51
                        data_tb={data_1[30:0],{1{signd}}};
52
                        shifted_tb=1;
53
                end
54
                32'b1110????????????????????????????:begin
55
                        data_tb={data_1[29:0],{2{signd}}};
56
                        shifted_tb=2;
57
                end
58
                32'b11110???????????????????????????:begin
59
                        data_tb={data_1[28:0],{3{signd}}};
60
                        shifted_tb=3;
61
                end
62
                32'b111110??????????????????????????:begin
63
                        data_tb={data_1[27:0],{4{signd}}};
64
                        shifted_tb=4;
65
                end
66
                32'b1111110?????????????????????????:begin
67
                        data_tb={data_1[26:0],{5{signd}}};
68
                        shifted_tb=5;
69
                end
70
                32'b11111110????????????????????????:begin
71
                        data_tb={data_1[25:0],{6{signd}}};
72
                        shifted_tb=6;
73
                end
74
                32'b111111110???????????????????????:begin
75
                        data_tb={data_1[24:0],{7{signd}}};
76
                        shifted_tb=7;
77
                end
78
                32'b1111111110??????????????????????:begin
79
                        data_tb={data_1[23:0],{8{signd}}};
80
                        shifted_tb=8;
81
                end
82
                32'b11111111110?????????????????????:begin
83
                        data_tb={data_1[22:0],{9{signd}}};
84
                        shifted_tb=9;
85
                end
86
                32'b111111111110????????????????????:begin
87
                        data_tb={data_1[21:0],{10{signd}}};
88
                        shifted_tb=10;
89
                end
90
                32'b1111111111110???????????????????:begin
91
                        data_tb={data_1[20:0],{11{signd}}};
92
                        shifted_tb=11;
93
                end
94
                32'b11111111111110??????????????????:begin
95
                        data_tb={data_1[19:0],{12{signd}}};
96
                        shifted_tb=12;
97
                end
98
                32'b111111111111110?????????????????:begin
99
                        data_tb={data_1[18:0],{13{signd}}};
100
                        shifted_tb=13;
101
                end
102
                32'b1111111111111110????????????????:begin
103
                        data_tb={data_1[17:0],{14{signd}}};
104
                        shifted_tb=14;
105
                end
106
                32'b11111111111111110???????????????:begin
107
                        data_tb={data_1[16:0],{15{signd}}};
108
                        shifted_tb=15;
109
                end
110
                32'b111111111111111110??????????????:begin
111
                        data_tb={data_1[15:0],{16{signd}}};
112
                        shifted_tb=16;
113
                end
114
                32'b1111111111111111110?????????????:begin
115
                        data_tb={data_1[14:0],{17{signd}}};
116
                        shifted_tb=17;
117
                end
118
                32'b11111111111111111110????????????:begin
119
                        data_tb={data_1[13:0],{18{signd}}};
120
                        shifted_tb=18;
121
                end
122
                32'b111111111111111111110???????????:begin
123
                        data_tb={data_1[12:0],{19{signd}}};
124
                        shifted_tb=19;
125
                end
126
                32'b1111111111111111111110??????????:begin
127
                        data_tb={data_1[11:0],{20{signd}}};
128
                        shifted_tb=20;
129
                end
130
                32'b11111111111111111111110?????????:begin
131
                        data_tb={data_1[10:0],{21{signd}}};
132
                        shifted_tb=21;
133
                end
134
                32'b111111111111111111111110????????:begin
135
                        data_tb={data_1[9:0],{22{signd}}};
136
                        shifted_tb=22;
137
                end
138
                32'b1111111111111111111111110???????:begin
139
                        data_tb={data_1[8:0],{23{signd}}};
140
                        shifted_tb=23;
141
                end
142
                32'b11111111111111111111111110??????:begin
143
                        data_tb={data_1[7:0],{24{signd}}};
144
                        shifted_tb=24;
145
                end
146
                32'b111111111111111111111111110?????:begin
147
                        data_tb={data_1[6:0],{25{signd}}};
148
                        shifted_tb=25;
149
                end
150
                32'b1111111111111111111111111110????:begin
151
                        data_tb={data_1[5:0],{26{signd}}};
152
                        shifted_tb=26;
153
                end
154
                32'b11111111111111111111111111110???:begin
155
                        data_tb={data_1[4:0],{27{signd}}};
156
                        shifted_tb=27;
157
                end
158
                32'b111111111111111111111111111110??:begin
159
                        data_tb={data_1[3:0],{28{signd}}};
160
                        shifted_tb=28;
161
                end
162
                32'b1111111111111111111111111111110?:begin
163
                        data_tb={data_1[2:0],{29{signd}}};
164
                        shifted_tb=29;
165
                end
166
                32'b11111111111111111111111111111110:begin
167
                        data_tb={data_1[1:0],{30{signd}}};
168
                        shifted_tb=30;
169
                end
170
                32'b11111111111111111111111111111111:begin
171
                        data_tb={data_1[31],{31{signd}}};
172
                        shifted_tb=31;
173
                end
174
        endcase
175
        if(signd)data_tb=~data_tb;
176
end
177
 
178
// checker
179
wire    [31:0]data_o;
180
wire    [4:0]shifted_o;
181
always@(negedge clk)
182
        if(rst)begin
183
                if(data_o==data_tb)$display("%6d        correct data_o=%h",$time,data_o);
184
                else $display("%6d      error   data_o=%h       data_tb=%h",$time,data_o,data_tb);
185
                if(shifted_o==shifted_tb)$display("%6d  correct shifted_o=%d",$time,shifted_o);
186
                else $display("%6d      error   shifted_o=%d    shifted_tb=%d",$time,shifted_o,shifted_tb);
187
        end
188
 
189
 
190
shifter shifter_0(
191
data,
192
data_o,
193
shifted_o
194
);
195
endmodule

powered by: WebSVN 2.1.0

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