This repository has been archived by the owner on Jan 29, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecryption_top.v
166 lines (151 loc) · 5.16 KB
/
decryption_top.v
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: A.C.S.
// Engineer: Anton Mircea-Pavel
//
// Create Date: 23:12:00 11/23/2020
// Design Name:
// Module Name: decryption_top
// Project Name: Tema2_Decryption
// Target Devices: N/A
// Tool versions: 14.5
// Description:
//
// Dependencies: N/A
//
// Revision:
// Revision 0.01 - File Created
// Revision 0.02 - Doc Comments Added
// Revision 0.03 - Rough outline of what the code should look like
// Revision 0.04 - Instantiate regfile
// Revision 0.05 - Instantiate MUX
// Revision 0.06 - Instantiate DEMUX
// Revision 0.07 - Instantiate decryption modules
// Revision 0.08 - Fix signal widths
//////////////////////////////////////////////////////////////////////////////////
module decryption_top#(
parameter addr_witdth = 8,
parameter reg_width = 16,
parameter MST_DWIDTH = 32,
parameter SYS_DWIDTH = 8
)(
// Clock and reset interface
input clk_sys, // system clock
input clk_mst, // master clock (4x system clock speed)
input rst_n, // negated reset
// Input interface
input [MST_DWIDTH -1 : 0] data_i, // data input
input valid_i, // input enable
output busy, // 'bool' value to indicate
// processing is happening
//output interface
output [SYS_DWIDTH - 1 : 0] data_o, // data output
output valid_o, // output enable
// Register access interface
input[addr_witdth - 1:0] addr, // register address
input read, // action indicator
input write, // action indicator
input [reg_width - 1 : 0] wdata, // writted data
output[reg_width - 1 : 0] rdata, // read data
output done, // 'bool' value to indicate status
output error // 'bool' value to indicate errors
);
// Caesar decryption wires
wire caesar_busy;
wire [reg_width - 1 : 0] caesar_key;
wire caesar_valid_o;
wire [SYS_DWIDTH - 1 : 0] caesar_data_o;
wire caesar_valid_i;
wire [SYS_DWIDTH - 1 : 0] caesar_data_i;
// Scytale decryption wires
wire scytale_busy;
wire [reg_width - 1 : 0] scytale_key;
wire scytale_valid_o;
wire [SYS_DWIDTH - 1 : 0] scytale_data_o;
wire scytale_valid_i;
wire [SYS_DWIDTH - 1 : 0] scytale_data_i;
// Zigzag decryption wires
wire zigzag_busy;
wire [reg_width - 1 : 0] zigzag_key;
wire zigzag_valid_o;
wire [SYS_DWIDTH - 1 : 0] zigzag_data_o;
wire zigzag_valid_i;
wire [SYS_DWIDTH - 1 : 0] zigzag_data_i;
// Additional wires
wire [reg_width - 1 : 0] mux_select;
decryption_regfile regfile(
.clk(clk_sys),
.rst_n(rst_n),
.addr(addr),
.read(read),
.write(write),
.rdata(rdata),
.wdata(wdata),
.done(done),
.error(error),
.select(mux_select),
.caesar_key(caesar_key),
.scytale_key(scytale_key),
.zigzag_key(zigzag_key)
);
demux dmx(
.clk_sys(clk_sys),
.clk_mst(clk_mst),
.rst_n(rst_n),
.select(mux_select[1:0]),
.data_i(data_i),
.valid_i(valid_i),
.data0_o(caesar_data_i),
.valid0_o(caesar_valid_i),
.data1_o(scytale_data_i),
.valid1_o(scytale_valid_i),
.data2_o(zigzag_data_i),
.valid2_o(zigzag_valid_i)
);
mux mx(
.clk(clk_sys),
.rst_n(rst_n),
.select(mux_select[1:0]),
.data_o(data_o),
.valid_o(valid_o),
.data0_i(caesar_data_o),
.valid0_i(caesar_valid_o),
.data1_i(scytale_data_o),
.valid1_i(scytale_valid_o),
.data2_i(zigzag_data_o),
.valid2_i(zigzag_valid_o)
);
caesar_decryption cd(
.clk(clk_sys),
.rst_n(rst_n),
.data_i(caesar_data_i),
.valid_i(caesar_valid_i),
.key(caesar_key),
.busy(caesar_busy),
.data_o(caesar_data_o),
.valid_o(caesar_valid_o)
);
scytale_decryption sd(
.clk(clk_sys),
.rst_n(rst_n),
.data_i(scytale_data_i),
.valid_i(scytale_valid_i),
.key_M(scytale_key[7:0]),
.key_N(scytale_key[15:8]),
.busy(scytale_busy),
.data_o(scytale_data_o),
.valid_o(scytale_valid_o)
);
zigzag_decryption zd(
.clk(clk_sys),
.rst_n(rst_n),
.data_i(zigzag_data_i),
.valid_i(zigzag_valid_i),
.key(zigzag_key[7:0]),
.busy(zigzag_busy),
.data_o(zigzag_data_o),
.valid_o(zigzag_valid_o)
);
// Output assigns
assign busy = (caesar_busy || scytale_busy || zigzag_busy);
endmodule