forked from KevinPal/FPGA-3D-Renderer-ECE385
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.sv
91 lines (72 loc) · 1.43 KB
/
util.sv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// Ceiling of the min and max of 2 24.8 fixed point numbers
module ceil_min_max(
input int a,
input int b,
output int min,
output int max
);
int min_raw;
int max_raw;
always_comb begin
if(a < b) begin
min_raw = a;
max_raw = b;
end else begin
min_raw = b;
max_raw = a;
end
if(min_raw[7:0] == 0)
min = min_raw;
else begin
min = min_raw + (1 <<8);
min[7:0] = 0;
end
if(max_raw[7:0] == 0)
max = max_raw;
else begin
max = max_raw + (1 <<8);
max[7:0] = 0;
end
end
endmodule
// Detects the positive edge of the signal clock by comparing it to its
// value from the last clock cycle.
module pos_edge_detect(
input logic CLK,
input logic RESET,
input logic signal,
output logic pe
);
logic last_sig = 0;
logic delayed_sig = 0;
always_ff @ (posedge CLK) begin
if(RESET) begin
delayed_sig <= 0;
last_sig <= 0;
end else begin
last_sig <= signal;
delayed_sig <= last_sig;
end
end
assign pe = signal & (~delayed_sig);
endmodule
// Ceiling of a 24.8 fixed point number
module ceil(
input int val,
output int out
);
always_comb begin
if(val[7:0] == 0)
out = val;
else begin
out = val + (1 <<8);
out[7:0] = 0;
end
end
endmodule
module abs(
input int a,
output int b
);
assign b = (a < 0) ? (-1 * a) : a;
endmodule