我正在尝试执行AES加密系统代码,当检查语法错误时没有任何错误,但我无法对其进行仿真并生成强制输入值的图形 使用的工具:Xilinx ISE,模拟器:Modelsim PE 10.4a 代码:
module aes(d,clk,c,key);
input [127:0] d,key;
input clk;
output reg [127:0] c;
reg [127:0] w1,w2,w3,w4,w5,w6,w7;
reg [3:0] count;
reg done;
always@(posedge clk)
begin
count=4'd0;
key_lut(w7,count,key);
w2=d^w7;
done=0;
while(!done)
begin
sb_lut(w3,w2);
acc_shift(w4,w3);
if(count==4'd11)
begin
c=w4;
done=1;
end
else
begin
count=count+1;
mix_col(w5,w4);
key_lut(w6,count,key);
w2=w5^w6;
end
end
end
task automatic mix_col;
output reg [0:127] p1;
input [0:127] q1;
begin
p1[0:7]=(2*q1[0:7])^(3*q1[8:15])^(q1[16:23])^(q1[24:31]);
p1[8:15]=(q1[0:7])^(2*q1[8:15])^(3*q1[16:23])^(q1[24:31]);
p1[16:23]=(q1[0:7])^(q1[8:15])^(2*q1[16:23])^(3*q1[24:31]);
p1[24:31]=(3*q1[0:7])^(q1[8:15])^(q1[16:23])^(2*q1[24:31]);
p1[32:39]=(2*q1[32:39])^(3*q1[40:47])^(q1[48:55])^(q1[56:63]);
p1[40:47]=(q1[32:39])^(2*q1[40:47])^(3*q1[48:55])^(q1[56:63]);
p1[48:55]=(q1[32:39])^(q1[40:47])^(2*q1[48:55])^(3*q1[56:63]);
p1[56:63]=(3*q1[32:39])^(q1[40:47])^(q1[48:55])^(2*q1[56:63]);
p1[64:71]=(2*q1[64:71])^(3*q1[72:79])^(q1[80:87])^(q1[88:95]);
p1[72:79]=(q1[64:71])^(2*q1[72:79])^(3*q1[80:87])^(q1[88:95]);
p1[80:87]=(q1[64:71])^(q1[72:79])^(2*q1[80:87])^(3*q1[88:95]);
p1[88:95]=(3*q1[64:71])^(q1[72:79])^(q1[80:87])^(2*q1[88:95]);
p1[96:103]=(2*q1[96:103])^(3*q1[104:111])^(q1[112:119])^(q1[120:127]);
p1[104:111]=(q1[96:103])^(2*q1[104:111])^(3*q1[112:119])^(q1[120:127]);
p1[112:119]=(q1[96:103])^(q1[104:111])^(2*q1[112:119])^(3*q1[120:127]);
p1[120:127]=(3*q1[96:103])^(q1[104:111])^(q1[112:119])^(2*q1[120:127]);
end
endtask
task automatic acc_shift;
output reg [0:127] p2;
input [0:127] q2;
begin
p2[0:31]={q2[0:7],q2[104:111],q2[80:87],q2[56:63]};
p2[32:63]={q2[32:39],q2[8:15],q2[112:119],q2[88:95]};
p2[64:95]={q2[64:71],q2[40:47],q2[16:23],q2[120:127]};
p2[96:127]={q2[96:103],q2[72:79],q2[48:55],q2[24:31]};
end
endtask
task automatic key_lut;
output [127:0] p3;
input [3:0] q3;
input [127:0] key;
reg [1407:0] w6;
reg [3:0] w8;
begin
w8=q3;
keyexpansion(w6,key);
p3 = w6 [(((w8+1)*128)-1)-:128];
end
endtask
task automatic keyexpansion;
output reg [1407:0] key_expand;
input [127:0] key;
reg [31:0] temp,w1,w2,w3,w4;
reg [3:0] Nb,Nk,Nr,i,w5;
begin
Nb = 4;
Nk = 4;
Nr = Nk + 6;
i = Nk;
key_expand[127:0]= key;
while(i < Nb*(Nr+1))
begin
temp = key[127:96];
**if (i%Nk==0)** "line 91
begin
rotword(w1,temp);
subword(w2,w1);
w5=(i/Nk);
rcon(w3,w5);
temp = w2 ^ w3;
end
else if ((Nk>6)&&(i%Nk)==4)
begin
subword(w4,temp);
temp =w4;
end
key_expand[(((i+1)*32)-1)-:32] = key_expand[(((i-Nk+1)*32)-1)-:32] ^ temp;
i=i+1;
end
end
endtask
task automatic subword;
output reg [31:0] q4;
input [31:0] p4;
reg [3:0] i;
begin
for(i=0;i<4;i=i+1)
**sb_lut(q4[(((i+1)*8)-1)-:8],p4[(((i+1)*8)-1)-:8]);** line115
end
endtask
task automatic rotword;
output [31:0] p5;
input [31:0] q5;
begin
p5={q5[31:8],q5[7:0]};
end
endtask
task automatic rcon;
output reg [31:0] p6;
input [3:0] q6;
begin
case (q6)
4'd1 : p6= 32'h01000000;
4'd2 : p6= 32'h02000000;
4'd3 : p6= 32'h04000000;
4'd4 : p6= 32'h08000000;
4'd5 : p6= 32'h10000000;
4'd6 : p6= 32'h20000000;
4'd7 : p6= 32'h40000000;
4'd8 : p6= 32'h80000000;
4'd9 : p6= 32'h1B000000;
4'd10 : p6= 32'h36000000;
default : p6 = 32'h0;
endcase
end
endtask
task automatic sb_lut;
output reg [7:0] sbox;
input [7:0] address;
begin
case (address)
8'h0 : sbox = 8'h63;
8'h1 : sbox = 8'h7C;
8'h2 : sbox = 8'h77;
8'h3 : sbox = 8'h7B;
8'h4 : sbox = 8'hF2;
8'h5 : sbox = 8'h6B;
8'h6 : sbox = 8'h6F;
8'h7 : sbox = 8'hC5;
8'h8 : sbox = 8'h30;
8'h9 : sbox = 8'h1;
8'hA : sbox = 8'h67;
8'hB : sbox = 8'h2B;
8'hC : sbox = 8'hFE;
8'hD : sbox = 8'hD7;
8'hE : sbox = 8'hAB;
8'hF : sbox = 8'h76;
8'h10 : sbox = 8'hCA;
8'h11 : sbox = 8'h82;
8'h12 : sbox = 8'hC9;
8'h13 : sbox = 8'h7D;
8'h14 : sbox = 8'hFA;
8'h15 : sbox = 8'h59;
8'h16 : sbox = 8'h47;
8'h17 : sbox = 8'hF0;
8'h18 : sbox = 8'hAD;
8'h19 : sbox = 8'hD4;
8'h1A : sbox = 8'hA2;
8'h1B : sbox = 8'hAF;
8'h1C : sbox = 8'h9C;
8'h1D : sbox = 8'hA4;
8'h1E : sbox = 8'h72;
8'h1F : sbox = 8'hC0;
8'h20 : sbox = 8'hB7;
8'h21 : sbox = 8'hFD;
8'h22 : sbox = 8'h93;
8'h23 : sbox = 8'h26;
8'h24 : sbox = 8'h36;
8'h25 : sbox = 8'h3F;
8'h26 : sbox = 8'hF7;
8'h27 : sbox = 8'hCC;
8'h28 : sbox = 8'h34;
8'h29 : sbox = 8'hA5;
8'h2A : sbox = 8'hE5;
8'h2B : sbox = 8'hF1;
8'h2C : sbox = 8'h71;
8'h2D : sbox = 8'hD8;
8'h2E : sbox = 8'h31;
8'h2F : sbox = 8'h15;
8'h30 : sbox = 8'h4;
8'h31 : sbox = 8'hC7;
8'h32 : sbox = 8'h23;
8'h33 : sbox = 8'hC3;
8'h34 : sbox = 8'h18;
8'h35 : sbox = 8'h96;
8'h36 : sbox = 8'h5;
8'h37 : sbox = 8'h9A;
8'h38 : sbox = 8'h7;
8'h39 : sbox = 8'h12;
8'h3A : sbox = 8'h80;
8'h3B : sbox = 8'hE2;
8'h3C : sbox = 8'hEB;
8'h3D : sbox = 8'h27;
8'h3E : sbox = 8'hB2;
8'h3F : sbox = 8'h75;
8'h40 : sbox = 8'h9;
8'h41 : sbox = 8'h83;
8'h42 : sbox = 8'h2C;
8'h43 : sbox = 8'h1A;
8'h44 : sbox = 8'h1B;
8'h45 : sbox = 8'h6E;
8'h46 : sbox = 8'h5A;
8'h47 : sbox = 8'hA0;
8'h48 : sbox = 8'h52;
8'h49 : sbox = 8'h3B;
8'h4A : sbox = 8'hD6;
8'h4B : sbox = 8'hB3;
8'h4C : sbox = 8'h29;
8'h4D : sbox = 8'hE3;
8'h4E : sbox = 8'h2F;
8'h4F : sbox = 8'h84;
8'h50 : sbox = 8'h53;
8'h51 : sbox = 8'hD1;
8'h52 : sbox = 8'h0;
8'h53 : sbox = 8'hED;
8'h54 : sbox = 8'h20;
8'h55 : sbox = 8'hFC;
8'h56 : sbox = 8'hB1;
8'h57 : sbox = 8'h5B;
8'h58 : sbox = 8'h6A;
8'h59 : sbox = 8'hCB;
8'h5A : sbox = 8'hBE;
8'h5B : sbox = 8'h39;
8'h5C : sbox = 8'h4A;
8'h5D : sbox = 8'h4C;
8'h5E : sbox = 8'h58;
8'h5F : sbox = 8'hCF;
8'h60 : sbox = 8'hD0;
8'h61 : sbox = 8'hEF;
8'h62 : sbox = 8'hAA;
8'h63 : sbox = 8'hFB;
8'h64 : sbox = 8'h43;
8'h65 : sbox = 8'h4D;
8'h66 : sbox = 8'h33;
8'h67 : sbox = 8'h85;
8'h68 : sbox = 8'h45;
8'h69 : sbox = 8'hF9;
8'h6A : sbox = 8'h2;
8'h6B : sbox = 8'h7F;
8'h6C : sbox = 8'h50;
8'h6D : sbox = 8'h3C;
8'h6E : sbox = 8'h9F;
8'h6F : sbox = 8'hA8;
8'h70 : sbox = 8'h51;
8'h71 : sbox = 8'hA3;
8'h72 : sbox = 8'h40;
8'h73 : sbox = 8'h8F;
8'h74 : sbox = 8'h92;
8'h75 : sbox = 8'h9D;
8'h76 : sbox = 8'h38;
8'h77 : sbox = 8'hF5;
8'h78 : sbox = 8'hBC;
8'h79 : sbox = 8'hB6;
8'h7A : sbox = 8'hDA;
8'h7B : sbox = 8'h21;
8'h7C : sbox = 8'h10;
8'h7D : sbox = 8'hFF;
8'h7E : sbox = 8'hF3;
8'h7F : sbox = 8'hD2;
8'h80 : sbox = 8'hCD;
8'h81 : sbox = 8'hC;
8'h82 : sbox = 8'h13;
8'h83 : sbox = 8'hEC;
8'h84 : sbox = 8'h5F;
8'h85 : sbox = 8'h97;
8'h86 : sbox = 8'h44;
8'h87 : sbox = 8'h17;
8'h88 : sbox = 8'hC4;
8'h89 : sbox = 8'hA7;
8'h8A : sbox = 8'h7E;
8'h8B : sbox = 8'h3D;
8'h8C : sbox = 8'h64;
8'h8D : sbox = 8'h5D;
8'h8E : sbox = 8'h19;
8'h8F : sbox = 8'h73;
8'h90 : sbox = 8'h60;
8'h91 : sbox = 8'h81;
8'h92 : sbox = 8'h4F;
8'h93 : sbox = 8'hDC;
8'h94 : sbox = 8'h22;
8'h95 : sbox = 8'h2A;
8'h96 : sbox = 8'h90;
8'h97 : sbox = 8'h88;
8'h98 : sbox = 8'h46;
8'h99 : sbox = 8'hEE;
8'h9A : sbox = 8'hB8;
8'h9B : sbox = 8'h14;
8'h9C : sbox = 8'hDE;
8'h9D : sbox = 8'h5E;
8'h9E : sbox = 8'hB;
8'h9F : sbox = 8'hDB;
8'hA0 : sbox = 8'hE0;
8'hA1 : sbox = 8'h32;
8'hA2 : sbox = 8'h3A;
8'hA3 : sbox = 8'hA;
8'hA4 : sbox = 8'h49;
8'hA5 : sbox = 8'h6;
8'hA6 : sbox = 8'h24;
8'hA7 : sbox = 8'h5C;
8'hA8 : sbox = 8'hC2;
8'hA9 : sbox = 8'hD3;
8'hAA : sbox = 8'hAC;
8'hAB : sbox = 8'h62;
8'hAC : sbox = 8'h91;
8'hAD : sbox = 8'h95;
8'hAE : sbox = 8'hE4;
8'hAF : sbox = 8'h79;
8'hB0 : sbox = 8'hE7;
8'hB1 : sbox = 8'hC8;
8'hB2 : sbox = 8'h37;
8'hB3 : sbox = 8'h6D;
8'hB4 : sbox = 8'h8D;
8'hB5 : sbox = 8'hD5;
8'hB6 : sbox = 8'h4E;
8'hB7 : sbox = 8'hA9;
8'hB8 : sbox = 8'h6C;
8'hB9 : sbox = 8'h56;
8'hBA : sbox = 8'hF4;
8'hBB : sbox = 8'hEA;
8'hBC : sbox = 8'h65;
8'hBD : sbox = 8'h7A;
8'hBE : sbox = 8'hAE;
8'hBF : sbox = 8'h8;
8'hC0 : sbox = 8'hBA;
8'hC1 : sbox = 8'h78;
8'hC2 : sbox = 8'h25;
8'hC3 : sbox = 8'h2E;
8'hC4 : sbox = 8'h1C;
8'hC5 : sbox = 8'hA6;
8'hC6 : sbox = 8'hB4;
8'hC7 : sbox = 8'hC6;
8'hC8 : sbox = 8'hE8;
8'hC9 : sbox = 8'hDD;
8'hCA : sbox = 8'h74;
8'hCB : sbox = 8'h1F;
8'hCC : sbox = 8'h4B;
8'hCD : sbox = 8'hBD;
8'hCE : sbox = 8'h8B;
8'hCF : sbox = 8'h8A;
8'hD0 : sbox = 8'h70;
8'hD1 : sbox = 8'h3E;
8'hD2 : sbox = 8'hB5;
8'hD3 : sbox = 8'h66;
8'hD4 : sbox = 8'h48;
8'hD5 : sbox = 8'h3;
8'hD6 : sbox = 8'hF6;
8'hD7 : sbox = 8'hE;
8'hD8 : sbox = 8'h61;
8'hD9 : sbox = 8'h35;
8'hDA : sbox = 8'h57;
8'hDB : sbox = 8'hB9;
8'hDC : sbox = 8'h86;
8'hDD : sbox = 8'hC1;
8'hDE : sbox = 8'h1D;
8'hDF : sbox = 8'h9E;
8'hE0 : sbox = 8'hE1;
8'hE1 : sbox = 8'hF8;
8'hE2 : sbox = 8'h98;
8'hE3 : sbox = 8'h11;
8'hE4 : sbox = 8'h69;
8'hE5 : sbox = 8'hD9;
8'hE6 : sbox = 8'h8E;
8'hE7 : sbox = 8'h94;
8'hE8 : sbox = 8'h9B;
8'hE9 : sbox = 8'h1E;
8'hEA : sbox = 8'h87;
8'hEB : sbox = 8'hE9;
8'hEC : sbox = 8'hCE;
8'hED : sbox = 8'h55;
8'hEE : sbox = 8'h28;
8'hEF : sbox = 8'hDF;
8'hF0 : sbox = 8'h8C;
8'hF1 : sbox = 8'hA1;
8'hF2 : sbox = 8'h89;
8'hF3 : sbox = 8'hD;
8'hF4 : sbox = 8'hBF;
8'hF5 : sbox = 8'hE6;
8'hF6 : sbox = 8'h42;
8'hF7 : sbox = 8'h68;
8'hF8 : sbox = 8'h41;
8'hF9 : sbox = 8'h99;
8'hFA : sbox = 8'h2D;
8'hFB : sbox = 8'hF;
8'hFC : sbox = 8'hB0;
8'hFD : sbox = 8'h54;
8'hFE : sbox = 8'hBB;
8'hFF : sbox = 8'h16;
default : sbox = 8'h0;
endcase
end
endtask
endmodule
我试图生成RTL原理图,但反复出现如下错误
ERROR:Xst:872-“ aes.v”第115行:不支持的目标。 警告:Xst:790-“ aes.v”第115行:索引值不匹配 数组范围,模拟不匹配。
启用任务rcon。 错误:Xst:870 -“ aes.v”第91行:无法简化操作员REM。启用任务。启用任务子字 编辑:我们已经编辑并显示了代码中的错误行 我们只是在模拟它们而不是在合成它们 请帮助我,在此先谢谢