Skip to content
This repository was archived by the owner on Jun 29, 2023. It is now read-only.

Commit e45a2e2

Browse files
committed
Committing old changes
1 parent fa4c081 commit e45a2e2

File tree

6 files changed

+130
-45
lines changed

6 files changed

+130
-45
lines changed

aes256.v

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414
* limitations under the License.
1515
*/
1616

17-
module aes_256 (clk, state, key, out);
17+
module aes_256 (clk, state, key, out, start, finish);
1818
input clk;
1919
input [127:0] state;
2020
input [255:0] key;
2121
output [127:0] out;
22+
input start;
23+
output finish;
2224

2325
reg [127:0] s0;
2426
reg [255:0] k0, k0a, k1;

block_transfer_unit.v

+27-28
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,10 @@ module fifo #(parameter WSIZE = 32, parameter FIFOLEN = 1024) (
159159
output reg [WSIZE - 1:0] data_out,
160160
input write_en,
161161
input read_en,
162-
output reg [WSIZE - 1:0] read_count,
163-
output reg [WSIZE - 1:0] write_count,
164162
output fifo_full,
165163
output fifo_empty,
164+
output reg [WSIZE - 1:0] write_count,
165+
output reg [WSIZE - 1:0] read_count,
166166
input reset,
167167
input clock
168168
);
@@ -191,40 +191,39 @@ module fifo #(parameter WSIZE = 32, parameter FIFOLEN = 1024) (
191191

192192
reg [WSIZE - 1:0] fifo_mem[FIFOLEN - 1:0]; // MSB used to tell if there's a word there or not
193193

194-
initial begin
195-
read_addr <= 'd0;
196-
write_addr <= 'd0;
197-
read_count <= 'd0;
198-
write_count <= 'd0;
199-
end
194+
initial begin
195+
read_addr <= 'd0;
196+
write_addr <= 'd0;
197+
read_count <= 'd0;
198+
write_count <= 'd0;
199+
end
200200

201-
always @(posedge trigger_write, posedge reset) begin
202-
if (reset) begin
203-
write_addr <= 'd0;
204-
write_count <= 'd0;
205-
end
201+
// For some reason this triggers a synchronization warning, it
202+
// can be safely ignored IMHO.
203+
always @(posedge trigger_write, posedge reset)
204+
if (reset) begin
205+
write_addr <= 'd0;
206+
write_count <= 'd0;
207+
end
206208
else if (trigger_write && !fifo_full && !reset) begin
207209
fifo_mem[write_addr[ADDRLEN - 1:0]] <= data_in;
208-
write_addr <= write_addr + 1;
209-
write_count <= write_count + 'd1;
210+
write_addr <= write_addr + 'd1;
211+
write_count <= write_count + 'd1;
210212
end
211-
// else Let the user pick it up via the signal wire
212-
end
213+
// Else let the user pick it up via the signal wire
213214

214-
always @(posedge trigger_read, posedge reset) begin
215-
if (reset) begin
216-
read_addr <= 'd0;
217-
read_count <= 'd0;
218-
end
219-
else
220-
if (trigger_read && !fifo_empty && !reset) begin
215+
always @(posedge trigger_read, posedge reset)
216+
if (reset) begin
217+
read_addr <= 'd0;
218+
read_count <= 'd0;
219+
end
220+
else if (trigger_read && !fifo_empty && !reset) begin
221221
data_out <= fifo_mem[read_addr[ADDRLEN - 1:0]];
222222
read_addr <= read_addr + 'd1;
223-
read_count <= read_count + 'd1;
223+
read_count <= read_count + 'd1;
224224
end
225-
// Leave existing data on the output buffer, signal to clue the user
226-
end
225+
// Else leave existing data on the output buffer, signal to clue the user
227226

228227
assign fifo_empty = (write_addr - read_addr) == 0;
229228
assign fifo_full = (write_addr - read_addr) == FIFOLEN;
230-
endmodule
229+
endmodule

cp2_tb.v

+5-5
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,16 @@ module cp2_tb();
3535
reg we = 0;
3636
reg clk = 0;
3737
reg rst = 0;
38-
reg [31:0] dout = 32'b0;
38+
wire [31:0] dout;
3939

40-
cptwo u1 (.clk(clk), .addr(addr), .din(din), .we(we), .dout(dout), .int(int));
40+
aes256_coprocessor u1 (.clock(clk), .addr(addr), .data_in(din), .write_en(we), .data_out(dout), .interrupt(int));
4141

4242

4343

4444
initial begin
4545
addr = 4'b0000;
4646
//write 1 to everything except int and run
47-
din = 8'hFF7FFFFE
47+
din = 32'hFF7FFFFE;
4848
we = 1;
4949
bounce();
5050

@@ -53,12 +53,12 @@ module cp2_tb();
5353

5454
//test that it was not written to
5555
//empty, full, empty, full, empty, full, empty, full, zero[22:2], reset, run
56-
if(dout != {1'b1, 1'b0, 1'b1, 1'b0, 1'b1, 1'b0, 1'b1, 1'b0, 1'b0, 21'b0, 1'b0, 1'b0})
56+
/*if(dout != {1'b1, 1'b0, 1'b1, 1'b0, 1'b1, 1'b0, 1'b1, 1'b0, 1'b0, 21'b0, 1'b0, 1'b0})
5757
begin
5858
$display "Flag error";
5959
$stop;
6060
end
61-
61+
*/
6262
//test to see if we works
6363

6464

round.v

+24-4
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,29 @@
1515
*/
1616

1717
/* one AES round for every two clock cycles */
18-
module one_round (clk, state_in, key, state_out);
18+
module one_round (clk, state_in, key, state_out, tracker_in, tracker_out);
1919
input clk;
2020
input [127:0] state_in, key;
2121
output reg [127:0] state_out;
22+
/* Tracking pins */
23+
input tracker_in;
24+
output tracker_out;
25+
2226
wire [31:0] s0, s1, s2, s3,
2327
z0, z1, z2, z3,
2428
p00, p01, p02, p03,
2529
p10, p11, p12, p13,
2630
p20, p21, p22, p23,
2731
p30, p31, p32, p33,
2832
k0, k1, k2, k3;
29-
33+
/* Tracking logic */
34+
reg cycle1, cycle2;
35+
always @(clk) begin
36+
cycle1 <= tracker_in;
37+
cycle2 <= cycle1;
38+
end
39+
assign tracker_out = cycle2;
40+
3041
assign {k0, k1, k2, k3} = key;
3142

3243
assign {s0, s1, s2, s3} = state_in;
@@ -47,19 +58,28 @@ module one_round (clk, state_in, key, state_out);
4758
endmodule
4859

4960
/* AES final round for every two clock cycles */
50-
module final_round (clk, state_in, key_in, state_out);
61+
module final_round (clk, state_in, key_in, state_out, tracker_in, tracker_out);
5162
input clk;
5263
input [127:0] state_in;
5364
input [127:0] key_in;
5465
output reg [127:0] state_out;
66+
input tracker_in;
67+
output tracker_out;
5568
wire [31:0] s0, s1, s2, s3,
5669
z0, z1, z2, z3,
5770
k0, k1, k2, k3;
5871
wire [7:0] p00, p01, p02, p03,
5972
p10, p11, p12, p13,
6073
p20, p21, p22, p23,
6174
p30, p31, p32, p33;
62-
75+
/* Tracking logic */
76+
reg cycle1, cycle2;
77+
always @(clk) begin
78+
cycle1 <= tracker_in;
79+
cycle2 <= cycle1;
80+
end
81+
assign tracker_out = cycle2;
82+
6383
assign {k0, k1, k2, k3} = key_in;
6484

6585
assign {s0, s1, s2, s3} = state_in;

table.v

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ module table_lookup (clk, state, p0, p1, p2, p3);
2828
t3 (clk, b3, p3);
2929
endmodule
3030

31-
/* substitue four bytes in a word */
31+
/* substitute four bytes in a word */
3232
module S4 (clk, in, out);
3333
input clk;
3434
input [31:0] in;

test_benches.v

+70-6
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,75 @@ module fifo_tb();
5656
end
5757
endmodule
5858

59+
module block_to_word_disassembler_tb();
60+
reg [127:0] block_in;
61+
wire [31:0] word_out;
62+
63+
reg block_in_ready, word_out_hold;
64+
wire word_ready, pull_block;
65+
66+
reg clock, reset;
67+
68+
block_to_word_disassembler btw_dis_DUT(.block_in(block_in), .word_out(word_out),
69+
.block_in_ready(block_in_ready), .word_out_hold(word_out_hold),
70+
.word_ready(word_ready), .pull_block(pull_block),
71+
.clock(clock), .reset(reset));
72+
73+
74+
parameter BLOCK_1 = 128'h0123_0ABC__0456_0DEF__0789_1ABC__1123_1DEF;
75+
parameter BLOCK_2 = 128'h0ABC_0123__0DEF_0456__1ABC_0789__1DEF_1123;
76+
parameter BLOCK_3 = 128'h1111_2222__3333_4444__5555_6666__1212_3434;
77+
78+
initial begin
79+
hit_reset;
80+
81+
block_in = BLOCK_1;
82+
block_in_ready = 1'b1;
83+
84+
tick; tick; tick; tick;
85+
block_in = BLOCK_2;
86+
tick;
87+
88+
tick; tick; tick;
89+
word_out_hold = 1'b1;
90+
tick;
91+
word_out_hold = 1'b0;
92+
tick; tick;
93+
94+
tick; tick; tick; tick; tick;
95+
end
96+
97+
task tick;
98+
begin
99+
#1 clock = 1'b1;
100+
#1 clock = 1'b0;
101+
end
102+
endtask
103+
104+
task hit_reset;
105+
begin
106+
block_in = 128'b0;
107+
word_out_hold = 1'b0;
108+
block_in_ready = 1'b0;
109+
clock = 1'b0;
110+
reset = 1'b0;
111+
112+
#1 reset = 1'b1;
113+
#1 reset = 1'b0;
114+
end
115+
endtask
116+
endmodule
59117

60-
module block_transfer_unit_tb();
118+
119+
module word_to_block_assembler_tb();
61120
reg [31:0] word_in;
62121
wire [127:0] block_out;
63122
reg word_in_ready, block_out_hold;
64123
wire block_ready, pull_word;
65124

66125
reg clock, reset;
67126

68-
word_to_block_assembler #(.WSIZE(32)) (
127+
word_to_block_assembler #(.WSIZE(32)) wtb_assembler_dut (
69128
.word_in(word_in),
70129
.word_in_ready(word_in_ready),
71130
.block_out_hold(block_out_hold),
@@ -78,18 +137,23 @@ module block_transfer_unit_tb();
78137
initial begin
79138
hit_reset;
80139

81-
word_in = 32'hA0B0_C0D1;
140+
word_in = 32'h0000_C0D1;
82141
word_in_ready = 1'b1;
83142
tick;
84143

85-
word_in = 32'hB0A0_D0C1;
144+
word_in = 32'h0000_D0C1;
86145
tick;
87146

88-
word_in = 32'hC0D0_E0F1;
147+
word_in = 32'h0000_E0F1;
89148
tick;
90149

91-
word_in = 32'hD0C0_F0E1;
150+
word_in = 32'h0000_F0E1;
92151
tick;
152+
block_out_hold = 1'b1;
153+
tick;tick;tick;tick;tick; // just some random clocks to check and see what happens
154+
block_out_hold = 1'b0;
155+
tick;tick;tick;
156+
$stop();
93157
end
94158

95159
task tick;

0 commit comments

Comments
 (0)