update program3 with new testbench spec
This commit is contained in:
parent
e5684b4705
commit
90c683d1da
@ -24,11 +24,11 @@ module program3_tb () ;
|
|||||||
// 53 characters in length
|
// 53 characters in length
|
||||||
// *** No more than 24 leading space characters, including preamble. ***
|
// *** No more than 24 leading space characters, including preamble. ***
|
||||||
// string str1 =
|
// string str1 =
|
||||||
// string str1 = "Mr. Watson, come here. I want to see you."; // sample program 1 input
|
string str1 = " A joke is a very serious thing."; // sample program 1 input
|
||||||
// string str1 = " Knowledge comes, but wisdom lingers. "; // alternative inputs
|
// string str1 = " Knowledge comes, but wisdom lingers. "; // alternative inputs
|
||||||
// string str1 = " 01234546789abcdefghijklmnopqrstuvwxyz. "; // (make up your own,
|
// string str1 = " 01234546789abcdefghijklmnopqrstuvwxyz. "; // (make up your own,
|
||||||
// string str1 = " A joke is a very serious thing."; // as well)
|
// string str1 = " A joke is a very serious thing."; // as well)
|
||||||
string str1 = " Ajok "; //
|
// string str1 = " Ajok "; //
|
||||||
// string str1 = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
|
// string str1 = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
|
||||||
// string str1 = "``@@```@@@````@@@@````@@@@@";
|
// string str1 = "``@@```@@@````@@@@````@@@@@";
|
||||||
// string str1 = " Knowledge comes, but wisdom lingers. "; //
|
// string str1 = " Knowledge comes, but wisdom lingers. "; //
|
||||||
@ -110,7 +110,7 @@ module program3_tb () ;
|
|||||||
// testbench will change on falling clocks to avoid race conditions at rising clocks
|
// testbench will change on falling clocks to avoid race conditions at rising clocks
|
||||||
for (int i=0; i<64; i++) begin
|
for (int i=0; i<64; i++) begin
|
||||||
msg_crypto1[i] = ((msg_padded1[i]-'h20) ^ lfsr1[i]);
|
msg_crypto1[i] = ((msg_padded1[i]-'h20) ^ lfsr1[i]);
|
||||||
msg_crypto1[i][7] = 0;//^msg_crypto1[i][6:0]; // prepend parity bit into MSB
|
msg_crypto1[i][7] = ^msg_crypto1[i][6:0]; // prepend parity bit into MSB
|
||||||
$fdisplay(file_no,"i=%d, msg_pad=0x%h, lfsr=%b msg_crypt w/ parity = 0x%h",
|
$fdisplay(file_no,"i=%d, msg_pad=0x%h, lfsr=%b msg_crypt w/ parity = 0x%h",
|
||||||
i,msg_padded1[i],lfsr1[i],msg_crypto1[i]);
|
i,msg_padded1[i],lfsr1[i],msg_crypto1[i]);
|
||||||
//for display purposes only, add 8'h20 to avoid nonprintable characters
|
//for display purposes only, add 8'h20 to avoid nonprintable characters
|
||||||
@ -135,7 +135,7 @@ module program3_tb () ;
|
|||||||
dut.DM.core[m+64] = msg_crypto1[m];
|
dut.DM.core[m+64] = msg_crypto1[m];
|
||||||
for(int n=24; n<64; n++) begin // load subsequent, possibly corrupt, encrypted message into data memory
|
for(int n=24; n<64; n++) begin // load subsequent, possibly corrupt, encrypted message into data memory
|
||||||
// set flipper = 8 or higher to disable bit corruption
|
// set flipper = 8 or higher to disable bit corruption
|
||||||
flipper = 8;//$random; // value between 0 and 63, inclusive
|
flipper = $random;//$random; // value between 0 and 63, inclusive
|
||||||
dut.DM.core[n+64] = msg_crypto1[n]^(1<<flipper);
|
dut.DM.core[n+64] = msg_crypto1[n]^(1<<flipper);
|
||||||
if(flipper<8) flipped[n]=1;
|
if(flipper<8) flipped[n]=1;
|
||||||
end
|
end
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Program 2 register use map:
|
// Program 2 register use map:
|
||||||
// r0 is the accumulator, r1 r2 r3 are often used to cache temp values
|
// r0 is the accumulator, r1 is often used to cache temp values
|
||||||
// r5 is the TAP LUT link register
|
// r5 is the TAP LUT link register
|
||||||
// r6 is LFSR tap pattern
|
// r6 is LFSR tap pattern
|
||||||
// r7 is LFSR state value
|
// r7 is LFSR state value
|
||||||
@ -50,14 +50,14 @@ tap_init: LDI #d64
|
|||||||
lut_return: PUT r6 // tap pattern now in r6
|
lut_return: PUT r6 // tap pattern now in r6
|
||||||
LDW r11 // get the first preamble character
|
LDW r11 // get the first preamble character
|
||||||
PUT r1 // put cipher text into r1
|
PUT r1 // put cipher text into r1
|
||||||
LDI #d32 // load expected space character
|
LDI #d0 // load expected space character
|
||||||
XOR r1 // get the initial state
|
XOR r1 // get the initial state
|
||||||
PUT r7 // put initial state guess into r7
|
PUT r7 // put initial state guess into r7
|
||||||
NXT r11 // increment read pointer
|
NXT r11 // increment read pointer
|
||||||
NXT r9 // decrement total encryption chars remaining
|
NXT r9 // decrement total encryption chars remaining
|
||||||
tap_loop: LDI lfsr_routine
|
tap_loop: LDI lfsr_routine
|
||||||
JAL r0 // jump to lfsr routine which calculates next state in r7
|
JAL r0 // jump to lfsr routine which calculates next state in r7
|
||||||
LDI #d32 // load space char expected plaintext
|
LDI #d0 // load space char expected plaintext
|
||||||
XOR r7
|
XOR r7
|
||||||
CLB r0 // clear leading bit in the expected ciphertext
|
CLB r0 // clear leading bit in the expected ciphertext
|
||||||
PUT r1 // store expected cipher text in r1
|
PUT r1 // store expected cipher text in r1
|
||||||
@ -67,6 +67,7 @@ tap_init: LDI #d64
|
|||||||
CLB r0 // clear leading bit for r0 since we do not expect any errors for this program
|
CLB r0 // clear leading bit for r0 since we do not expect any errors for this program
|
||||||
XOR r1 // XOR actual from expected, result of 0 means matching
|
XOR r1 // XOR actual from expected, result of 0 means matching
|
||||||
JNZ r2 // jump to outer loop (picks new tap pattern) if the actual cipher was not equal to the expected
|
JNZ r2 // jump to outer loop (picks new tap pattern) if the actual cipher was not equal to the expected
|
||||||
|
LDI #d0 // load preamble char
|
||||||
NXT r11 // increment read pointer
|
NXT r11 // increment read pointer
|
||||||
NXT r9 // decrement total encryption chars remaining
|
NXT r9 // decrement total encryption chars remaining
|
||||||
LDI finish_preamble // load main_loop location into r0
|
LDI finish_preamble // load main_loop location into r0
|
||||||
@ -85,7 +86,7 @@ finish_preamble: LDI lfsr_routine
|
|||||||
PUT r1 // put the plaintext in r1
|
PUT r1 // put the plaintext in r1
|
||||||
LDI finish_preamble
|
LDI finish_preamble
|
||||||
PUT r2 // load address of finish_preamble loop into r2
|
PUT r2 // load address of finish_preamble loop into r2
|
||||||
LDI #d32 // get value of space
|
LDI #d0 // get value of space
|
||||||
XOR r1 // compare if r1 == 32
|
XOR r1 // compare if r1 == 32
|
||||||
JEZ r2 // jump to finish preamble loop if this plaintext == space(32)
|
JEZ r2 // jump to finish preamble loop if this plaintext == space(32)
|
||||||
LDI correct_pre
|
LDI correct_pre
|
||||||
@ -94,7 +95,7 @@ finish_preamble: LDI lfsr_routine
|
|||||||
JEZ r2
|
JEZ r2
|
||||||
error_pre: LDI #x80
|
error_pre: LDI #x80
|
||||||
STW r12
|
STW r12
|
||||||
LDI common
|
LDI common_pre
|
||||||
JMP r0
|
JMP r0
|
||||||
correct_pre: CLB r1
|
correct_pre: CLB r1
|
||||||
GET r1
|
GET r1
|
||||||
|
Reference in New Issue
Block a user