-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathnzcv_unit.v
More file actions
93 lines (90 loc) · 2.88 KB
/
Copy pathnzcv_unit.v
File metadata and controls
93 lines (90 loc) · 2.88 KB
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
92
93
module nzcv_unit(
input [3:0] nzcv_input,// ALU Selection
input s_input,
input [3:0] opcode_input,
input clk,
output operated
);
reg [3:0] nzcv = 4'b0000;
always @(posedge clk)
nzcv = s_input ? nzcv_input : nzcv;
/*
assign operated = opcode_input[3] ?
(opcode_input[2] ?
(opcode_input[1]?
(opcode_input[0]? always_0 : always_1)
:(opcode_input[0]?
(nzcv[2] || (nzcv[3] && !nzcv[0])) || (!nzcv[3] && nzcv[0])
: (nzcv[2] && (nzcv[3] || nzcv[0])) || (!nzcv[3] && !nzcv[0])))
:(opcode_input[1]?
(opcode_input[0]?
(nzcv[3] && !nzcv[0]) || (!nzcv[3] && nzcv[0])
: (nzcv[3] && nzcv[0]) || (!nzcv[3] && !nzcv[0]))
:(opcode_input[0]? !nzcv[1] || nzcv[2] : nzcv[1] && !nzcv[2])))
:(opcode_input[2] ?
(opcode_input[1]?
(opcode_input[0]? !nzcv[0] : nzcv[0])
:(opcode_input[0]? !nzcv[3] : nzcv[3]))
:(opcode_input[1]?
(opcode_input[0]? !nzcv[1] : nzcv[1])
:(opcode_input[0]? !nzcv[2] : nzcv[2])));
*/
assign operated = (opcode_input == 4'b0000) ? nzcv[2] :
(opcode_input == 4'b0001) ? !nzcv[2]:
(opcode_input == 4'b0010) ? nzcv[1]:
(opcode_input == 4'b0011) ? !nzcv[1]:
(opcode_input == 4'b0100) ? nzcv[3]:
(opcode_input == 4'b0101) ? !nzcv[3]:
(opcode_input == 4'b0110) ? nzcv[0]:
(opcode_input == 4'b0111) ? !nzcv[0]:
(opcode_input == 4'b1000) ? nzcv[1] && !nzcv[2]:
(opcode_input == 4'b1001) ? !nzcv[1] || nzcv[2]:
(opcode_input == 4'b1010) ?
(nzcv[3] && nzcv[0]) || (!nzcv[3] && !nzcv[0]):
(opcode_input == 4'b1011) ?
(nzcv[3] && !nzcv[0]) || (!nzcv[3] && nzcv[0]):
(opcode_input == 4'b1100) ?
(nzcv[2] && (nzcv[3] || nzcv[0])) || (!nzcv[3] && !nzcv[0]):
(opcode_input == 4'b1101) ?
(nzcv[2] || (nzcv[3] && !nzcv[0])) || (!nzcv[3] && nzcv[0]):
(opcode_input == 4'b1111) ? 0 : 1;
/*
always @(*)
begin
case(opcode_input)
4'b0000: //
operated = nzcv[2];
4'b0001: //
operated = !nzcv[2];
4'b0010: //
operated = nzcv[1];
4'b0011: //
operated = !nzcv[1];
4'b0100: //
operated = nzcv[3];
4'b0101: //
operated = !nzcv[3];
4'b0110: //
operated = nzcv[0];
4'b0111: //
operated = !nzcv[0];
4'b1000: //
operated = nzcv[1] && !nzcv[2];
4'b1001: //
operated = !nzcv[1] || nzcv[2];
4'b1010: //
operated = (nzcv[3] && nzcv[0]) || (!nzcv[3] && !nzcv[0]);
4'b1011: //
operated = (nzcv[3] && !nzcv[0]) || (!nzcv[3] && nzcv[0]);
4'b1100: //
operated = (nzcv[2] && (nzcv[3] || nzcv[0])) || (!nzcv[3] && !nzcv[0]);
4'b1101: //
operated = (nzcv[2] || (nzcv[3] && !nzcv[0])) || (!nzcv[3] && nzcv[0]);
4'b1110: //
operated = 1'b1;
4'b1111: //
operated = 1'b0;
endcase
end
*/
endmodule