ramdin2006
Newbie level 5
I am writing program to add two sparse matrix to work in vivado 2016.2 and I am not able to get the output properly. If anyone is interested in helping me out, it will be a great help for me.
Following is the verilog code which i tried out/
This program should add two sparse matrix by finding the non-zero terms and give output matrix.
Following is the verilog code which i tried out/
This program should add two sparse matrix by finding the non-zero terms and give output matrix.
Code Verilog - [expand] 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 // module matrix(); reg sp1[9:0][0:2]; reg sp2[9:0][0:2]; reg sp3[9:0][0:2]; integer r,c,i,j,k,t,tot_val,k1,k2,k3,tot1,tot2; begin k=1; for(i=0;i < r;i=i+1) begin for(j=0;j<c;j=j+1) begin if( t != 0 ) begin sp[k][0] = i; sp[k][1] = j; sp[k][2] = t; k=k+1; end end sp[0][0] = r; sp[0][1] = c; sp[0][2] = k-1; begin r = sp[0][0]; c = sp[0][1]; tot_val = sp[0][2]; for(i=0;i<r;i=i+1) begin for(j=0;j<c;j=j+1) begin for(k=1;k<=tot_val;k=k+1) begin if(sp[k][0]==i && sp[k][1]==j) break; end if(k>tot_val) $display ("0"); else $display ("%4d",sp[k][2]); end end end begin if(sp1[0][0] != sp2[0][0] || sp1[0][1] != sp2[0][1]) begin $display("Invalid Matrix Size"); exit(0); end tot1 = sp1[0][2]; tot2 = sp2[0][2]; k1 = 1; k2 = 1; k3 = 1; while ( k1 <= tot1 && k2 <= tot2) if ( sp1[k1][0] < sp2[k2][0] ) begin sp3[k3][0] = sp1[k1][0]; sp3[k3][1] = sp1[k1][1]; sp3[k3][2] = sp1[k1][2]; k3=k3+1; k1=k1+1; end else if ( sp1[k1][0] > sp2[k2][0] ) begin sp3[k3][0] = sp2[k2][0]; sp3[k3][1] = sp2[k2][1]; sp3[k3][2] = sp2[k2][2]; k3=k3+1; k2=k2+1; end else if ( sp1[k1][0] == sp2[k2][0] ) if ( sp1[k1][1] < sp2[k2][1] ) begin sp3[k3][0] = sp1[k1][0]; sp3[k3][1] = sp1[k1][1]; sp3[k3][2] = sp1[k1][2]; k3=k3+1; k1=k1+1; end else if ( sp1[k1][1] > sp2[k2][1] ) begin sp3[k3][0] = sp2[k2][0]; sp3[k3][1] = sp2[k2][1]; sp3[k3][2] = sp2[k2][2]; k3=k3+1; k2=k2+1; end else sp3[k3][0] = sp2[k2][0]; sp3[k3][1] = sp2[k2][1]; sp3[k3][2] = sp1[k1][2] + sp2[k2][2]; k3=k3+1; k2=k2+1; k1=k1+1; while ( k1 <=tot1 ) sp3[k3][0] = sp1[k1][0]; sp3[k3][1] = sp1[k1][1]; sp3[k3][2] = sp1[k1][2]; k3=k3+1; k1=k1+1; while ( k2 <= tot2 ) sp3[k3][0] = sp2[k2][0]; sp3[k3][1] = sp2[k2][1]; sp3[k3][2] = sp2[k2][2]; k3=k3+1; k2=k2+1; sp3[0][0] = sp1[0][0]; sp3[0][1] = sp1[0][1]; sp3[0][2] = k3-1; end endmodule //
Last edited by a moderator: