⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 som.v

📁 拿verilog编写的som(自适应神经网络算法)
💻 V
📖 第 1 页 / 共 3 页
字号:
               ii<=1;jj<=1;
               wts_temp1<=X1-weights1[0];wts_temp2<=X2-weights2[0];wts_temp3<=X3-weights3[0];
             end
           1:begin
               state3<=2;
               ii<=1;jj<=2;
               wts_temp1<=X1-weights1[1];wts_temp2<=X2-weights2[1];wts_temp3<=X3-weights3[1];
               if(check)
                 begin
                   weights1[0]<=weights1[0]+deta1;weights2[0]<=weights2[0]+deta2;weights3[0]<=weights3[0]+deta3;
                 end
               end
           2:begin
               state3<=3;
               ii<=1;jj<=3;
               wts_temp1<=X1-weights1[2];wts_temp2<=X2-weights2[2];wts_temp3<=X3-weights3[2];
               if(check)
                 begin
                   weights1[1]<=weights1[1]+deta1;weights2[1]<=weights2[1]+deta2;weights3[1]<=weights3[1]+deta3;
                 end
               end
           3:begin
               state3<=4;
               ii<=1;jj<=4;
               wts_temp1<=X1-weights1[3];wts_temp2<=X2-weights2[3];wts_temp3<=X3-weights3[3];
               if(check)
                 begin
                   weights1[2]<=weights1[2]+deta1;weights2[2]<=weights2[2]+deta2;weights3[2]<=weights3[2]+deta3;
                 end
               end
           4:begin
               state3<=5;
               ii<=1;jj<=5;
               wts_temp1<=X1-weights1[4];wts_temp2<=X2-weights2[4];wts_temp3<=X3-weights3[4];
               if(check)
                 begin
                   weights1[3]<=weights1[3]+deta1;weights2[3]<=weights2[3]+deta2;weights3[3]<=weights3[3]+deta3;
                 end
               end
           5:begin
               state3<=6;
               ii<=1;jj<=6;
               wts_temp1<=X1-weights1[5];wts_temp2<=X2-weights2[5];wts_temp3<=X3-weights3[5];
               if(check)
                 begin
                   weights1[4]<=weights1[4]+deta1;weights2[4]<=weights2[4]+deta2;weights3[4]<=weights3[4]+deta3;
                 end
               end
           6:begin
               state3<=7;
               ii<=2;jj<=1;
               wts_temp1<=X1-weights1[6];wts_temp2<=X2-weights2[6];wts_temp3<=X3-weights3[6];
               if(check)
                 begin
                   weights1[5]<=weights1[5]+deta1;weights2[5]<=weights2[5]+deta2;weights3[5]<=weights3[5]+deta3;
                 end
               end
           7:begin
               state3<=8;
               ii<=2;jj<=2;
               wts_temp1<=X1-weights1[7];wts_temp2<=X2-weights2[7];wts_temp3<=X3-weights3[7];
               if(check)
                 begin
                   weights1[6]<=weights1[6]+deta1;weights2[6]<=weights2[6]+deta2;weights3[6]<=weights3[6]+deta3;
                 end
               end
           8:begin
               state3<=9;
               ii<=2;jj<=3;
               wts_temp1<=X1-weights1[8];wts_temp2<=X2-weights2[8];wts_temp3<=X3-weights3[8];
               if(check)
                 begin
                   weights1[7]<=weights1[7]+deta1;weights2[7]<=weights2[7]+deta2;weights3[7]<=weights3[7]+deta3;
                 end
               end
           9:begin
               state3<=10;
               ii<=2;jj<=4;
               wts_temp1<=X1-weights1[9];wts_temp2<=X2-weights2[9];wts_temp3<=X3-weights3[9];
               if(check)
                 begin
                   weights1[8]<=weights1[8]+deta1;weights2[8]<=weights2[8]+deta2;weights3[8]<=weights3[8]+deta3;
                 end
               end
           10:begin
               state3<=11;
               ii<=2;jj<=5;
               wts_temp1<=X1-weights1[10];wts_temp2<=X2-weights2[10];wts_temp3<=X3-weights3[10];
               if(check)
                 begin
                   weights1[9]<=weights1[9]+deta1;weights2[9]<=weights2[9]+deta2;weights3[9]<=weights3[9]+deta3;
                 end
               end
           11:begin
               state3<=12;
               ii<=2;jj<=6;
               wts_temp1<=X1-weights1[11];wts_temp2<=X2-weights2[11];wts_temp3<=X3-weights3[11];
               if(check)
                 begin
                   weights1[10]<=weights1[10]+deta1;weights2[10]<=weights2[10]+deta2;weights3[10]<=weights3[10]+deta3;
                 end
               end
           12:begin
               state3<=13;
               ii<=3;jj<=1;
               wts_temp1<=X1-weights1[12];wts_temp2<=X2-weights2[12];wts_temp3<=X3-weights3[12];
               if(check)
                 begin
                   weights1[11]<=weights1[11]+deta1;weights2[11]<=weights2[11]+deta2;weights3[11]<=weights3[11]+deta3;
                 end
               end
           13:begin
               state3<=14;
               ii<=3;jj<=2;
               wts_temp1<=X1-weights1[13];wts_temp2<=X2-weights2[13];wts_temp3<=X3-weights3[13];
               if(check)
                 begin
                   weights1[12]<=weights1[12]+deta1;weights2[12]<=weights2[12]+deta2;weights3[12]<=weights3[12]+deta3;
                 end
               end
           14:begin
               state3<=15;
               ii<=3;jj<=3;
               wts_temp1<=X1-weights1[14];wts_temp2<=X2-weights2[14];wts_temp3<=X3-weights3[14];
               if(check)
                 begin
                   weights1[13]<=weights1[13]+deta1;weights2[13]<=weights2[13]+deta2;weights3[13]<=weights3[13]+deta3;
                 end
               end
           15:begin
               state3<=16;
               ii<=3;jj<=4;
               wts_temp1<=X1-weights1[15];wts_temp2<=X2-weights2[15];wts_temp3<=X3-weights3[15];
               if(check)
                 begin
                   weights1[14]<=weights1[14]+deta1;weights2[14]<=weights2[14]+deta2;weights3[14]<=weights3[14]+deta3;
                 end
               end
           16:begin
               state3<=17;
               ii<=3;jj<=5;
               wts_temp1<=X1-weights1[16];wts_temp2<=X2-weights2[16];wts_temp3<=X3-weights3[16];
               if(check)
                 begin
                   weights1[15]<=weights1[15]+deta1;weights2[15]<=weights2[15]+deta2;weights3[15]<=weights3[15]+deta3;
                 end
               end
           17:begin
               state3<=18;
               ii<=3;jj<=6;
               wts_temp1<=X1-weights1[17];wts_temp2<=X2-weights2[17];wts_temp3<=X3-weights3[17];
               if(check)
                 begin
                   weights1[16]<=weights1[16]+deta1;weights2[16]<=weights2[16]+deta2;weights3[16]<=weights3[16]+deta3;
                 end
               end
           18:begin
               state3<=19;
               ii<=4;jj<=1;
               wts_temp1<=X1-weights1[18];wts_temp2<=X2-weights2[18];wts_temp3<=X3-weights3[18];
               if(check)
                 begin
                   weights1[17]<=weights1[17]+deta1;weights2[17]<=weights2[17]+deta2;weights3[17]<=weights3[17]+deta3;
                 end
               end
           19:begin
               state3<=20;
               ii<=4;jj<=2;
               wts_temp1<=X1-weights1[19];wts_temp2<=X2-weights2[19];wts_temp3<=X3-weights3[19];
               if(check)
                 begin
                   weights1[18]<=weights1[18]+deta1;weights2[18]<=weights2[18]+deta2;weights3[18]<=weights3[18]+deta3;
                 end
               end
           20:begin
               state3<=21;
               ii<=4;jj<=3;
               wts_temp1<=X1-weights1[20];wts_temp2<=X2-weights2[20];wts_temp3<=X3-weights3[20];
               if(check)
                 begin
                   weights1[19]<=weights1[19]+deta1;weights2[19]<=weights2[19]+deta2;weights3[19]<=weights3[19]+deta3;
                 end
               end
           21:begin
               state3<=22;
               ii<=4;jj<=4;
               wts_temp1<=X1-weights1[21];wts_temp2<=X2-weights2[21];wts_temp3<=X3-weights3[21];
               if(check)
                 begin
                   weights1[20]<=weights1[20]+deta1;weights2[20]<=weights2[20]+deta2;weights3[20]<=weights3[20]+deta3;
                 end
               end
           22:begin
               state3<=23;
               ii<=4;jj<=5;
               wts_temp1<=X1-weights1[22];wts_temp2<=X2-weights2[22];wts_temp3<=X3-weights3[22];
               if(check)
                 begin
                   weights1[21]<=weights1[21]+deta1;weights2[21]<=weights2[21]+deta2;weights3[21]<=weights3[21]+deta3;
                 end
               end
           23:begin
               state3<=24;
               ii<=4;jj<=6;
               wts_temp1<=X1-weights1[23];wts_temp2<=X2-weights2[23];wts_temp3<=X3-weights3[23];
               if(check)
                 begin
                   weights1[22]<=weights1[22]+deta1;weights2[22]<=weights2[22]+deta2;weights3[22]<=weights3[22]+deta3;
                 end
               end
           24:begin
               state3<=25;
               ii<=5;jj<=1;
               wts_temp1<=X1-weights1[24];wts_temp2<=X2-weights2[24];wts_temp3<=X3-weights3[24];
               if(check)
                 begin
                   weights1[23]<=weights1[23]+deta1;weights2[23]<=weights2[23]+deta2;weights3[23]<=weights3[23]+deta3;
                 end
               end
           25:begin
               state3<=26;
               ii<=5;jj<=2;
               wts_temp1<=X1-weights1[25];wts_temp2<=X2-weights2[25];wts_temp3<=X3-weights3[25];
               if(check)
                 begin
                   weights1[24]<=weights1[24]+deta1;weights2[24]<=weights2[24]+deta2;weights3[24]<=weights3[24]+deta3;
                 end
               end
           26:begin
               state3<=27;
               ii<=5;jj<=3;
               wts_temp1<=X1-weights1[26];wts_temp2<=X2-weights2[26];wts_temp3<=X3-weights3[26];
               if(check)
                 begin
                   weights1[25]<=weights1[25]+deta1;weights2[25]<=weights2[25]+deta2;weights3[25]<=weights3[25]+deta3;
                 end
               end
           27:begin
               state3<=28;
               ii<=5;jj<=4;
               wts_temp1<=X1-weights1[27];wts_temp2<=X2-weights2[27];wts_temp3<=X3-weights3[27];
               if(check)
                 begin
                   weights1[26]<=weights1[26]+deta1;weights2[26]<=weights2[26]+deta2;weights3[26]<=weights3[26]+deta3;
                 end
               end
           28:begin
               state3<=29;
               ii<=5;jj<=5;
               wts_temp1<=X1-weights1[28];wts_temp2<=X2-weights2[28];wts_temp3<=X3-weights3[28];
               if(check)
                 begin
                   weights1[27]<=weights1[27]+deta1;weights2[27]<=weights2[27]+deta2;weights3[27]<=weights3[27]+deta3;
                 end
               end
           29:begin
               state3<=30;
               ii<=5;jj<=6;
               wts_temp1<=X1-weights1[29];wts_temp2<=X2-weights2[29];wts_temp3<=X3-weights3[29];
               if(check)
                 begin
                   weights1[28]<=weights1[28]+deta1;weights2[28]<=weights2[28]+deta2;weights3[28]<=weights3[28]+deta3;
                 end
               end
           30:begin
               state3<=31;
               ii<=6;jj<=1;
               wts_temp1<=X1-weights1[30];wts_temp2<=X2-weights2[30];wts_temp3<=X3-weights3[30];
               if(check)
                 begin
                   weights1[29]<=weights1[29]+deta1;weights2[29]<=weights2[29]+deta2;weights3[29]<=weights3[29]+deta3;
                 end
               end
           31:begin
               state3<=32;
               ii<=6;jj<=2;
               wts_temp1<=X1-weights1[31];wts_temp2<=X2-weights2[31];wts_temp3<=X3-weights3[31];
               if(check)
                 begin
                   weights1[30]<=weights1[30]+deta1;weights2[30]<=weights2[30]+deta2;weights3[30]<=weights3[30]+deta3;
                 end
               end
           32:begin
               state3<=33;
               ii<=6;jj<=3;
               wts_temp1<=X1-weights1[32];wts_temp2<=X2-weights2[32];wts_temp3<=X3-weights3[32];
               if(check)
                 begin
                   weights1[31]<=weights1[31]+deta1;weights2[31]<=weights2[31]+deta2;weights3[31]<=weights3[31]+deta3;
                 end
               end
           33:begin
               state3<=34;
               ii<=6;jj<=4;
               wts_temp1<=X1-weights1[33];wts_temp2<=X2-weights2[33];wts_temp3<=X3-weights3[33];
               if(check)
                 begin
                   weights1[32]<=weights1[32]+deta1;weights2[32]<=weights2[32]+deta2;weights3[32]<=weights3[32]+deta3;
                 end
               end
           34:begin
               state3<=35;
               ii<=6;jj<=5;
               wts_temp1<=X1-weights1[34];wts_temp2<=X2-weights2[34];wts_temp3<=X3-weights3[34];
               if(check)
                 begin
                   weights1[33]<=weights1[33]+deta1;weights2[33]<=weights2[33]+deta2;weights3[33]<=weights3[33]+deta3;
                end
               end
           35:begin
               state3<=36;
               ii<=6;jj<=6;
               wts_temp1<=X1-weights1[35];wts_temp2<=X2-weights2[35];wts_temp3<=X3-weights3[35];
               if(check)
                 begin
                   weights1[34]<=weights1[34]+deta1;weights2[34]<=weights2[34]+deta2;weights3[34]<=weights3[34]+deta3;
                 end
               end
           36:begin
               state3<=37;
               Nc<=Nc-1;
               state<=3'b100;
               
               if(check)
                 begin
                   weights1[35]<=weights1[35]+deta1;weights2[35]<=weights2[35]+deta2;weights3[35]<=weights3[35]+deta3;
                 end
               end
           default:
               state3<=0;
         endcase    
      end 
end
/////////////////////////////////////////////////////////////  
lpm_mult mul_update_wts1(
                .dataa(lam),
                .datab(wts_temp1),
                .result(deta1)
                            );
defparam mul_update_wts1.lpm_widtha=11;
defparam mul_update_wts1.lpm_widthb=`BIT_WIDTH_DATA+1;
defparam mul_update_wts1.lpm_widthp=`BIT_WIDTH_DATA;
defparam mul_update_wts1.lpm_widths=20;
defparam mul_update_wts1.lpm_representation="SIGNED";  
 
lpm_mult mul_update_wts2(
                .dataa(lam),
                .datab(wts_temp2),
                .result(deta2)
                            );
defparam mul_update_wts2.lpm_widtha=11;
defparam mul_update_wts2.lpm_widthb=`BIT_WIDTH_DATA+1;
defparam mul_update_wts2.lpm_widthp=`BIT_WIDTH_DATA;
defparam mul_update_wts2.lpm_widths=20;
defparam mul_update_wts2.lpm_representation="SIGNED";

lpm_mult mul_update_wts3(
                .dataa(lam),
                .datab(wts_temp3),
                .result(deta3)
                            );
defparam mul_update_wts3.lpm_widtha=11;
defparam mul_update_wts3.lpm_widthb=`BIT_WIDTH_DATA+1;
defparam mul_update_wts3.lpm_widthp=`BIT_WIDTH_DATA;
defparam mul_update_wts3.lpm_widths=20;
defparam mul_update_wts3.lpm_representation="SIGNED";

check_nearby B(
                       //output 
                        .check(check),
                       //inputs
                        .ii(ii),
                        .jj(jj),
                        .p_x(winner_x),
                        .p_y(winner_y),
                        .Nc(Nc)
                );
endmodule
//////////////////////////////////////////////////////
//check if max(abs(ii-p_x),abs(jj-p_y))<Nc
module  check_nearby(
                       //output 
                        check,
                       //inputs
                        ii,
                        jj,
                        p_x,
                        p_y,
                        Nc
                     );
output                 check;
input     [2:0]        ii,jj;
input     [2:0]        p_x,p_y;
input     [3:0]        Nc;

wire      [3:0]       a,b,c,d,nc;
assign    nc=(Nc>1)? Nc>>1:1;
assign    a=nc+p_x;
assign    b=nc+ii;
assign    c=nc+p_y;
assign    d=nc+jj;
assign    check=(a>ii&&b>p_x&&c>jj&&d>p_y)? 1:0;
endmodule

                            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -