softmax作用

首先我们简单的介绍一下我们使用softmax的用处,以及softmax的函数形式。softmax在维基百科上面的解释是:“softmax function is a generalization of the logistic function that maps a length-p vector of real values to a length-K vector of values”简单的说它是一种适用于多分类的损失函数。公式表示如下:

我们可以看到,要使用硬件去实现softmax函数首先必须硬件实现exp(x)。实现指数函数的思路是什么呢?首先,我们可以使用泰勒级数展开,那么为了保持一定的精度我需要使用很多的乘法器所以每一个指数函数都需要耗费大量的时钟周期,所以说我们还是选择比较简单的分段线段拟合比较好。下面提供我的思路:我使用分段的线段去拟合softmax函数,当然在硬件实现之前我做了很多关于阈值还有精度对神经网络训练精度的实验发现缩小softmax的输入压缩到一定的阈值比如(-10,10)发现对训练正确率的影响很小。那么我可以使用一个ROM来存储线段的K,B,在计算的时候每一个指数函数我都只需要一个乘法器就能计算。这样大大提高了计算速度。(需要注意的是:我们的硬件结构计算全部使用的是十六位浮点型数据,做乘除法的时候只需要调用IP核就行了)

ROM存储K,B信息

memory_initialization_radix=2;
memory_initialization_vector=
0000100000000000
0001100000000010
0001000000000000
0001110000000101
0001010000000001
0010000000001100
0001110000000100
0010010000011100
0010000000001011
0010110001000010
0010100000100000
0011000010010011
0010110001010111
0011010100111001
0011000011101110
0011101001100110
0011101010000111
0011110000000000
0011111011011111
0011110000000000
0100010010101011
1010100000110000
0100101001011001
1011101111111100
0101000001010000
1011101000110000
0101010111011101
1011010101011010
0101101111111000
1110010001100110
0110000101101010
1110101101010101
0110011101011100
1111000111100111
0110110100000000
1111100010100011
0111001011001100
1111111100100111;

通过输入得到k,b地址

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2017/01/12 20:52:46
// Design Name:
// Module Name: getaddr
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module getaddr(aclk,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,
addra0,addra1,addra2,addra3,addra4,addra5,addra6,addra7,addra8,addra9,
addrb0,addrb1,addrb2,addrb3,addrb4,addrb5,addrb6,addrb7,addrb8,addrb9);
input aclk;
input [15:0] x0,x1,x2,x3,x4,x5,x6,x7,x8,x9;
output[5:0] addra0,addra1,addra2,addra3,addra4,addra5,addra6,addra7,addra8,addra9;
output[5:0] addrb0,addrb1,addrb2,addrb3,addrb4,addrb5,addrb6,addrb7,addrb8,addrb9;
reg [5:0] addra0,addra1,addra2,addra3,addra4,addra5,addra6,addra7,addra8,addra9;
reg [5:0] addrb0,addrb1,addrb2,addrb3,addrb4,addrb5,addrb6,addrb7,addrb8,addrb9;
always @(posedge aclk)
begin
if(x0[15:15]==1)beginif((x0[14:0]<=15'b100100010000000)&&(x0[14:0]>15'b100100000000000)) beginaddra0=6'b000000;addrb0=6'b000001;endelse if((x0[14:0]<=15'b100100000000000)&&(x0[14:0]>15'b100011100000000))beginaddra0=6'b000010;addrb0=6'b000011;endelse if((x0[14:0]<=15'b100011100000000)&&(x0[14:0]>15'b100011000000000))beginaddra0=6'b000100;addrb0=6'b000101;endelse if((x0[14:0]<=15'b100011000000000)&&(x0[14:0]>15'b100010100000000))beginaddra0=6'b000110;addrb0=6'b000111;endelse if((x0[14:0]<=15'b100010100000000)&&(x0[14:0]>15'b100010000000000))beginaddra0=6'b001000;addrb0=6'b001001;endelse if((x0[14:0]<=15'b100010000000000)&&(x0[14:0]>15'b100001000000000))beginaddra0=6'b001010;addrb0=6'b001011;endelse if((x0[14:0]<=15'b100001000000000)&&(x0[14:0]>15'b100000000000000))beginaddra0=6'b001100;addrb0=6'b001101;endelse if((x0[14:0]<=15'b100000000000000)&&(x0[14:0]>15'b011110000000000))beginaddra0=6'b001110;addrb0=6'b001111;endelse if((x0[14:0]<=15'b011110000000000)&&(x0[14:0]>15'b000000000000000))beginaddra0=6'b010000;addrb0=6'b010001;endend
elsebeginif((x0[14:0]<=15'b011110000000000)&&(x0[14:0]>15'b000000000000000))beginaddra0=6'b010010;addrb0=6'b010011;endelse if((x0[14:0]<=15'b100000000000000)&&(x0>15'b011110000000000))beginaddra0=6'b010100;addrb0=6'b010101;endelse if((x0[14:0]<=15'b100001000000000)&&(x0>15'b100000000000000))beginaddra0=6'b010110;addrb0=6'b010111;endelse if((x0[14:0]<=15'b100010000000000)&&(x0[14:0]>15'b100001000000000))beginaddra0=6'b011000;addrb0=6'b011001;endelse if((x0[14:0]<=15'b100010100000000)&&(x0[14:0]>15'b100010000000000))beginaddra0=6'b011010;addrb0=6'b011011;endelse if((x0[14:0]<=15'b100011000000000)&&(x0[14:0]>15'b100010100000000))beginaddra0=6'b011100;addrb0=6'b011101;endelse if((x0[14:0]<=15'b100011100000000)&&(x0[14:0]>15'b100011000000000))beginaddra0=6'b011110;addrb0=6'b011111;endelse if((x0[14:0]<=15'b100100000000000)&&(x0[14:0]>15'b100011100000000))beginaddra0=6'b100000;addrb0=6'b100001;endelse if((x0[14:0]<=15'b100100010000000)&&(x0[14:0]>15'b100100000000000))beginaddra0=6'b100010;addrb0=6'b100011;endelse if((x0[14:0]<=15'b100100100000000)&&(x0[14:0]>15'b100100010000000))beginaddra0=6'b100100;addrb0=6'b100101;endendend
always @(posedge aclk)beginif(x1[15:15]==1)beginif((x1[14:0]<=15'b100100010000000)&&(x1[14:0]>15'b100100000000000)) beginaddra1=6'b000000;addrb1=6'b000001;endelse if((x1[14:0]<=15'b100100000000000)&&(x1[14:0]>15'b100011100000000))beginaddra1=6'b000010;addrb1=6'b000011;endelse if((x1[14:0]<=15'b100011100000000)&&(x1[14:0]>15'b100011000000000))beginaddra1=6'b000100;addrb1=6'b000101;endelse if((x1[14:0]<=15'b100011000000000)&&(x1[14:0]>15'b100010100000000))beginaddra1=6'b000110;addrb1=6'b000111;endelse if((x1[14:0]<=15'b100010100000000)&&(x1[14:0]>15'b100010000000000))beginaddra1=6'b001000;addrb1=6'b001001;endelse if((x1[14:0]<=15'b100010000000000)&&(x1[14:0]>15'b100001000000000))beginaddra1=6'b001010;addrb1=6'b001011;endelse if((x1[14:0]<=15'b100001000000000)&&(x1[14:0]>15'b100000000000000))beginaddra1=6'b001100;addrb1=6'b001101;endelse if((x1[14:0]<=15'b100000000000000)&&(x1[14:0]>15'b011110000000000))beginaddra1=6'b001110;addrb1=6'b001111;endelse if((x1[14:0]<=15'b011110000000000)&&(x1[14:0]>15'b000000000000000))beginaddra1=6'b010000;addrb1=6'b010001;endendelsebeginif((x1[14:0]<=15'b011110000000000)&&(x1[14:0]>15'b000000000000000))beginaddra1=6'b010010;addrb1=6'b010011;endelse if((x1[14:0]<=15'b100000000000000)&&(x1>15'b011110000000000))beginaddra1=6'b010100;addrb1=6'b010101;endelse if((x1[14:0]<=15'b100001000000000)&&(x1>15'b100000000000000))beginaddra1=6'b010110;addrb1=6'b010111;endelse if((x1[14:0]<=15'b100010000000000)&&(x1[14:0]>15'b100001000000000))beginaddra1=6'b011000;addrb1=6'b011001;endelse if((x1[14:0]<=15'b100010100000000)&&(x1[14:0]>15'b100010000000000))beginaddra1=6'b011010;addrb1=6'b011011;endelse if((x1[14:0]<=15'b100011000000000)&&(x1[14:0]>15'b100010100000000))beginaddra1=6'b011100;addrb1=6'b011101;endelse if((x1[14:0]<=15'b100011100000000)&&(x1[14:0]>15'b100011000000000))beginaddra1=6'b011110;addrb1=6'b011111;endelse if((x1[14:0]<=15'b100100000000000)&&(x1[14:0]>15'b100011100000000))beginaddra1=6'b100000;addrb1=6'b100001;endelse if((x1[14:0]<=15'b100100010000000)&&(x1[14:0]>15'b100100000000000))beginaddra1=6'b100010;addrb1=6'b100011;endelse if((x1[14:0]<=15'b100100100000000)&&(x1[14:0]>15'b100100010000000))beginaddra1=6'b100100;addrb1=6'b100101;endendendalways @(posedge aclk)beginif(x2[15:15]==1)beginif((x2[14:0]<=15'b100100010000000)&&(x2[14:0]>15'b100100000000000)) beginaddra2=6'b000000;addrb2=6'b000001;endelse if((x2[14:0]<=15'b100100000000000)&&(x2[14:0]>15'b100011100000000))beginaddra2=6'b000010;addrb2=6'b000011;endelse if((x2[14:0]<=15'b100011100000000)&&(x2[14:0]>15'b100011000000000))beginaddra2=6'b000100;addrb2=6'b000101;endelse if((x2[14:0]<=15'b100011000000000)&&(x2[14:0]>15'b100010100000000))beginaddra2=6'b000110;addrb2=6'b000111;endelse if((x2[14:0]<=15'b100010100000000)&&(x2[14:0]>15'b100010000000000))beginaddra2=6'b001000;addrb2=6'b001001;endelse if((x2[14:0]<=15'b100010000000000)&&(x2[14:0]>15'b100001000000000))beginaddra2=6'b001010;addrb2=6'b001011;endelse if((x2[14:0]<=15'b100001000000000)&&(x2[14:0]>15'b100000000000000))beginaddra2=6'b001100;addrb2=6'b001101;endelse if((x2[14:0]<=15'b100000000000000)&&(x2[14:0]>15'b011110000000000))beginaddra2=6'b001110;addrb2=6'b001111;endelse if((x2[14:0]<=15'b011110000000000)&&(x2[14:0]>15'b000000000000000))beginaddra2=6'b010000;addrb2=6'b010001;endendelsebeginif((x2[14:0]<=15'b011110000000000)&&(x2[14:0]>15'b000000000000000))beginaddra2=6'b010010;addrb2=6'b010011;endelse if((x2[14:0]<=15'b100000000000000)&&(x2>15'b011110000000000))beginaddra2=6'b010100;addrb2=6'b010101;endelse if((x2[14:0]<=15'b100001000000000)&&(x2>15'b100000000000000))beginaddra2=6'b010110;addrb2=6'b010111;endelse if((x2[14:0]<=15'b100010000000000)&&(x2[14:0]>15'b100001000000000))beginaddra2=6'b011000;addrb2=6'b011001;endelse if((x2[14:0]<=15'b100010100000000)&&(x2[14:0]>15'b100010000000000))beginaddra2=6'b011010;addrb2=6'b011011;endelse if((x2[14:0]<=15'b100011000000000)&&(x2[14:0]>15'b100010100000000))beginaddra2=6'b011100;addrb2=6'b011101;endelse if((x2[14:0]<=15'b100011100000000)&&(x2[14:0]>15'b100011000000000))beginaddra2=6'b011110;addrb2=6'b011111;endelse if((x2[14:0]<=15'b100100000000000)&&(x2[14:0]>15'b100011100000000))beginaddra2=6'b100000;addrb2=6'b100001;endelse if((x2[14:0]<=15'b100100010000000)&&(x2[14:0]>15'b100100000000000))beginaddra2=6'b100010;addrb2=6'b100011;endelse if((x2[14:0]<=15'b100100100000000)&&(x2[14:0]>15'b100100010000000))beginaddra2=6'b100100;addrb2=6'b100101;endendendalways @(posedge aclk)beginif(x3[15:15]==1)beginif((x3[14:0]<=15'b100100010000000)&&(x3[14:0]>15'b100100000000000)) beginaddra3=6'b000000;addrb3=6'b000001;endelse if((x3[14:0]<=15'b100100000000000)&&(x3[14:0]>15'b100011100000000))beginaddra3=6'b000010;addrb3=6'b000011;endelse if((x3[14:0]<=15'b100011100000000)&&(x3[14:0]>15'b100011000000000))beginaddra3=6'b000100;addrb3=6'b000101;endelse if((x3[14:0]<=15'b100011000000000)&&(x3[14:0]>15'b100010100000000))beginaddra3=6'b000110;addrb3=6'b000111;endelse if((x3[14:0]<=15'b100010100000000)&&(x3[14:0]>15'b100010000000000))beginaddra3=6'b001000;addrb3=6'b001001;endelse if((x3[14:0]<=15'b100010000000000)&&(x3[14:0]>15'b100001000000000))beginaddra3=6'b001010;addrb3=6'b001011;endelse if((x3[14:0]<=15'b100001000000000)&&(x3[14:0]>15'b100000000000000))beginaddra3=6'b001100;addrb3=6'b001101;endelse if((x3[14:0]<=15'b100000000000000)&&(x3[14:0]>15'b011110000000000))beginaddra3=6'b001110;addrb3=6'b001111;endelse if((x3[14:0]<=15'b011110000000000)&&(x3[14:0]>15'b000000000000000))beginaddra3=6'b010000;addrb3=6'b010001;endendelsebeginif((x3[14:0]<=15'b011110000000000)&&(x3[14:0]>15'b000000000000000))beginaddra3=6'b010010;addrb3=6'b010011;endelse if((x3[14:0]<=15'b100000000000000)&&(x3>15'b011110000000000))beginaddra3=6'b010100;addrb3=6'b010101;endelse if((x3[14:0]<=15'b100001000000000)&&(x3>15'b100000000000000))beginaddra3=6'b010110;addrb3=6'b010111;endelse if((x3[14:0]<=15'b100010000000000)&&(x3[14:0]>15'b100001000000000))beginaddra3=6'b011000;addrb3=6'b011001;endelse if((x3[14:0]<=15'b100010100000000)&&(x3[14:0]>15'b100010000000000))beginaddra3=6'b011010;addrb3=6'b011011;endelse if((x3[14:0]<=15'b100011000000000)&&(x3[14:0]>15'b100010100000000))beginaddra3=6'b011100;addrb3=6'b011101;endelse if((x3[14:0]<=15'b100011100000000)&&(x3[14:0]>15'b100011000000000))beginaddra3=6'b011110;addrb3=6'b011111;endelse if((x3[14:0]<=15'b100100000000000)&&(x3[14:0]>15'b100011100000000))beginaddra3=6'b100000;addrb3=6'b100001;endelse if((x3[14:0]<=15'b100100010000000)&&(x3[14:0]>15'b100100000000000))beginaddra3=6'b100010;addrb3=6'b100011;endelse if((x3[14:0]<=15'b100100100000000)&&(x3[14:0]>15'b100100010000000))beginaddra3=6'b100100;addrb3=6'b100101;endendendalways @(posedge aclk)beginif(x4[15:15]==1)beginif((x4[14:0]<=15'b100100010000000)&&(x4[14:0]>15'b100100000000000)) beginaddra4=6'b000000;addrb4=6'b000001;endelse if((x4[14:0]<=15'b100100000000000)&&(x4[14:0]>15'b100011100000000))beginaddra4=6'b000010;addrb4=6'b000011;endelse if((x4[14:0]<=15'b100011100000000)&&(x4[14:0]>15'b100011000000000))beginaddra4=6'b000100;addrb4=6'b000101;endelse if((x4[14:0]<=15'b100011000000000)&&(x4[14:0]>15'b100010100000000))beginaddra4=6'b000110;addrb4=6'b000111;endelse if((x4[14:0]<=15'b100010100000000)&&(x4[14:0]>15'b100010000000000))beginaddra4=6'b001000;addrb4=6'b001001;endelse if((x4[14:0]<=15'b100010000000000)&&(x4[14:0]>15'b100001000000000))beginaddra4=6'b001010;addrb4=6'b001011;endelse if((x4[14:0]<=15'b100001000000000)&&(x4[14:0]>15'b100000000000000))beginaddra4=6'b001100;addrb4=6'b001101;endelse if((x4[14:0]<=15'b100000000000000)&&(x4[14:0]>15'b011110000000000))beginaddra4=6'b001110;addrb4=6'b001111;endelse if((x4[14:0]<=15'b011110000000000)&&(x4[14:0]>15'b000000000000000))beginaddra4=6'b010000;addrb4=6'b010001;endendelsebeginif((x4[14:0]<=15'b011110000000000)&&(x4[14:0]>15'b000000000000000))beginaddra4=6'b010010;addrb4=6'b010011;endelse if((x4[14:0]<=15'b100000000000000)&&(x4>15'b011110000000000))beginaddra4=6'b010100;addrb4=6'b010101;endelse if((x4[14:0]<=15'b100001000000000)&&(x4>15'b100000000000000))beginaddra4=6'b010110;addrb4=6'b010111;endelse if((x4[14:0]<=15'b100010000000000)&&(x4[14:0]>15'b100001000000000))beginaddra4=6'b011000;addrb4=6'b011001;endelse if((x4[14:0]<=15'b100010100000000)&&(x4[14:0]>15'b100010000000000))beginaddra4=6'b011010;addrb4=6'b011011;endelse if((x4[14:0]<=15'b100011000000000)&&(x4[14:0]>15'b100010100000000))beginaddra4=6'b011100;addrb4=6'b011101;endelse if((x4[14:0]<=15'b100011100000000)&&(x4[14:0]>15'b100011000000000))beginaddra4=6'b011110;addrb4=6'b011111;endelse if((x4[14:0]<=15'b100100000000000)&&(x4[14:0]>15'b100011100000000))beginaddra4=6'b100000;addrb4=6'b100001;endelse if((x4[14:0]<=15'b100100010000000)&&(x4[14:0]>15'b100100000000000))beginaddra4=6'b100010;addrb4=6'b100011;endelse if((x4[14:0]<=15'b100100100000000)&&(x4[14:0]>15'b100100010000000))beginaddra4=6'b100100;addrb4=6'b100101;endendendalways @(posedge aclk)beginif(x5[15:15]==1)beginif((x5[14:0]<=15'b100100010000000)&&(x5[14:0]>15'b100100000000000)) beginaddra5=6'b000000;addrb5=6'b000001;endelse if((x5[14:0]<=15'b100100000000000)&&(x5[14:0]>15'b100011100000000))beginaddra5=6'b000010;addrb5=6'b000011;endelse if((x5[14:0]<=15'b100011100000000)&&(x5[14:0]>15'b100011000000000))beginaddra5=6'b000100;addrb5=6'b000101;endelse if((x5[14:0]<=15'b100011000000000)&&(x5[14:0]>15'b100010100000000))beginaddra5=6'b000110;addrb5=6'b000111;endelse if((x5[14:0]<=15'b100010100000000)&&(x5[14:0]>15'b100010000000000))beginaddra5=6'b001000;addrb5=6'b001001;endelse if((x5[14:0]<=15'b100010000000000)&&(x5[14:0]>15'b100001000000000))beginaddra5=6'b001010;addrb5=6'b001011;endelse if((x5[14:0]<=15'b100001000000000)&&(x5[14:0]>15'b100000000000000))beginaddra5=6'b001100;addrb5=6'b001101;endelse if((x5[14:0]<=15'b100000000000000)&&(x5[14:0]>15'b011110000000000))beginaddra5=6'b001110;addrb5=6'b001111;endelse if((x5[14:0]<=15'b011110000000000)&&(x5[14:0]>15'b000000000000000))beginaddra5=6'b010000;addrb5=6'b010001;endendelsebeginif((x5[14:0]<=15'b011110000000000)&&(x5[14:0]>15'b000000000000000))beginaddra5=6'b010010;addrb5=6'b010011;endelse if((x5[14:0]<=15'b100000000000000)&&(x5>15'b011110000000000))beginaddra5=6'b010100;addrb5=6'b010101;endelse if((x5[14:0]<=15'b100001000000000)&&(x5>15'b100000000000000))beginaddra5=6'b010110;addrb5=6'b010111;endelse if((x5[14:0]<=15'b100010000000000)&&(x5[14:0]>15'b100001000000000))beginaddra5=6'b011000;addrb5=6'b011001;endelse if((x5[14:0]<=15'b100010100000000)&&(x5[14:0]>15'b100010000000000))beginaddra5=6'b011010;addrb5=6'b011011;endelse if((x5[14:0]<=15'b100011000000000)&&(x5[14:0]>15'b100010100000000))beginaddra5=6'b011100;addrb5=6'b011101;endelse if((x5[14:0]<=15'b100011100000000)&&(x5[14:0]>15'b100011000000000))beginaddra5=6'b011110;addrb5=6'b011111;endelse if((x5[14:0]<=15'b100100000000000)&&(x5[14:0]>15'b100011100000000))beginaddra5=6'b100000;addrb5=6'b100001;endelse if((x5[14:0]<=15'b100100010000000)&&(x5[14:0]>15'b100100000000000))beginaddra5=6'b100010;addrb5=6'b100011;endelse if((x5[14:0]<=15'b100100100000000)&&(x5[14:0]>15'b100100010000000))beginaddra5=6'b100100;addrb5=6'b100101;endendendalways @(posedge aclk)beginif(x6[15:15]==1)beginif((x6[14:0]<=15'b100100010000000)&&(x6[14:0]>15'b100100000000000)) beginaddra6=6'b000000;addrb6=6'b000001;endelse if((x6[14:0]<=15'b100100000000000)&&(x6[14:0]>15'b100011100000000))beginaddra6=6'b000010;addrb6=6'b000011;endelse if((x6[14:0]<=15'b100011100000000)&&(x6[14:0]>15'b100011000000000))beginaddra6=6'b000100;addrb6=6'b000101;endelse if((x6[14:0]<=15'b100011000000000)&&(x6[14:0]>15'b100010100000000))beginaddra6=6'b000110;addrb6=6'b000111;endelse if((x6[14:0]<=15'b100010100000000)&&(x6[14:0]>15'b100010000000000))beginaddra6=6'b001000;addrb6=6'b001001;endelse if((x6[14:0]<=15'b100010000000000)&&(x6[14:0]>15'b100001000000000))beginaddra6=6'b001010;addrb6=6'b001011;endelse if((x6[14:0]<=15'b100001000000000)&&(x6[14:0]>15'b100000000000000))beginaddra6=6'b001100;addrb6=6'b001101;endelse if((x6[14:0]<=15'b100000000000000)&&(x6[14:0]>15'b011110000000000))beginaddra6=6'b001110;addrb6=6'b001111;endelse if((x6[14:0]<=15'b011110000000000)&&(x6[14:0]>15'b000000000000000))beginaddra6=6'b010000;addrb6=6'b010001;endendelsebeginif((x6[14:0]<=15'b011110000000000)&&(x6[14:0]>15'b000000000000000))beginaddra6=6'b010010;addrb6=6'b010011;endelse if((x6[14:0]<=15'b100000000000000)&&(x6>15'b011110000000000))beginaddra6=6'b010100;addrb6=6'b010101;endelse if((x6[14:0]<=15'b100001000000000)&&(x6>15'b100000000000000))beginaddra6=6'b010110;addrb6=6'b010111;endelse if((x6[14:0]<=15'b100010000000000)&&(x6[14:0]>15'b100001000000000))beginaddra6=6'b011000;addrb6=6'b011001;endelse if((x6[14:0]<=15'b100010100000000)&&(x6[14:0]>15'b100010000000000))beginaddra6=6'b011010;addrb6=6'b011011;endelse if((x6[14:0]<=15'b100011000000000)&&(x6[14:0]>15'b100010100000000))beginaddra6=6'b011100;addrb6=6'b011101;endelse if((x6[14:0]<=15'b100011100000000)&&(x6[14:0]>15'b100011000000000))beginaddra6=6'b011110;addrb6=6'b011111;endelse if((x6[14:0]<=15'b100100000000000)&&(x6[14:0]>15'b100011100000000))beginaddra6=6'b100000;addrb6=6'b100001;endelse if((x6[14:0]<=15'b100100010000000)&&(x6[14:0]>15'b100100000000000))beginaddra6=6'b100010;addrb6=6'b100011;endelse if((x6[14:0]<=15'b100100100000000)&&(x6[14:0]>15'b100100010000000))beginaddra6=6'b100100;addrb6=6'b100101;endendendalways @(posedge aclk)beginif(x7[15:15]==1)beginif((x7[14:0]<=15'b100100010000000)&&(x7[14:0]>15'b100100000000000)) beginaddra7=6'b000000;addrb7=6'b000001;endelse if((x7[14:0]<=15'b100100000000000)&&(x7[14:0]>15'b100011100000000))beginaddra7=6'b000010;addrb7=6'b000011;endelse if((x7[14:0]<=15'b100011100000000)&&(x7[14:0]>15'b100011000000000))beginaddra7=6'b000100;addrb7=6'b000101;endelse if((x7[14:0]<=15'b100011000000000)&&(x7[14:0]>15'b100010100000000))beginaddra7=6'b000110;addrb7=6'b000111;endelse if((x7[14:0]<=15'b100010100000000)&&(x7[14:0]>15'b100010000000000))beginaddra7=6'b001000;addrb7=6'b001001;endelse if((x7[14:0]<=15'b100010000000000)&&(x7[14:0]>15'b100001000000000))beginaddra7=6'b001010;addrb7=6'b001011;endelse if((x7[14:0]<=15'b100001000000000)&&(x7[14:0]>15'b100000000000000))beginaddra7=6'b001100;addrb7=6'b001101;endelse if((x7[14:0]<=15'b100000000000000)&&(x7[14:0]>15'b011110000000000))beginaddra7=6'b001110;addrb7=6'b001111;endelse if((x7[14:0]<=15'b011110000000000)&&(x7[14:0]>15'b000000000000000))beginaddra7=6'b010000;addrb7=6'b010001;endendelsebeginif((x7[14:0]<=15'b011110000000000)&&(x7[14:0]>15'b000000000000000))beginaddra7=6'b010010;addrb7=6'b010011;endelse if((x7[14:0]<=15'b100000000000000)&&(x7>15'b011110000000000))beginaddra7=6'b010100;addrb7=6'b010101;endelse if((x7[14:0]<=15'b100001000000000)&&(x7>15'b100000000000000))beginaddra7=6'b010110;addrb7=6'b010111;endelse if((x7[14:0]<=15'b100010000000000)&&(x7[14:0]>15'b100001000000000))beginaddra7=6'b011000;addrb7=6'b011001;endelse if((x7[14:0]<=15'b100010100000000)&&(x7[14:0]>15'b100010000000000))beginaddra7=6'b011010;addrb7=6'b011011;endelse if((x7[14:0]<=15'b100011000000000)&&(x7[14:0]>15'b100010100000000))beginaddra7=6'b011100;addrb7=6'b011101;endelse if((x7[14:0]<=15'b100011100000000)&&(x7[14:0]>15'b100011000000000))beginaddra7=6'b011110;addrb7=6'b011111;endelse if((x7[14:0]<=15'b100100000000000)&&(x7[14:0]>15'b100011100000000))beginaddra7=6'b100000;addrb7=6'b100001;endelse if((x7[14:0]<=15'b100100010000000)&&(x7[14:0]>15'b100100000000000))beginaddra7=6'b100010;addrb7=6'b100011;endelse if((x7[14:0]<=15'b100100100000000)&&(x7[14:0]>15'b100100010000000))beginaddra7=6'b100100;addrb7=6'b100101;endendendalways @(posedge aclk)beginif(x8[15:15]==1)beginif((x8[14:0]<=15'b100100010000000)&&(x8[14:0]>15'b100100000000000)) beginaddra8=6'b000000;addrb8=6'b000001;endelse if((x8[14:0]<=15'b100100000000000)&&(x8[14:0]>15'b100011100000000))beginaddra8=6'b000010;addrb8=6'b000011;endelse if((x8[14:0]<=15'b100011100000000)&&(x8[14:0]>15'b100011000000000))beginaddra8=6'b000100;addrb8=6'b000101;endelse if((x8[14:0]<=15'b100011000000000)&&(x8[14:0]>15'b100010100000000))beginaddra8=6'b000110;addrb8=6'b000111;endelse if((x8[14:0]<=15'b100010100000000)&&(x8[14:0]>15'b100010000000000))beginaddra8=6'b001000;addrb8=6'b001001;endelse if((x8[14:0]<=15'b100010000000000)&&(x8[14:0]>15'b100001000000000))beginaddra8=6'b001010;addrb8=6'b001011;endelse if((x8[14:0]<=15'b100001000000000)&&(x8[14:0]>15'b100000000000000))beginaddra8=6'b001100;addrb8=6'b001101;endelse if((x8[14:0]<=15'b100000000000000)&&(x8[14:0]>15'b011110000000000))beginaddra8=6'b001110;addrb8=6'b001111;endelse if((x8[14:0]<=15'b011110000000000)&&(x8[14:0]>15'b000000000000000))beginaddra8=6'b010000;addrb8=6'b010001;endendelsebeginif((x8[14:0]<=15'b011110000000000)&&(x8[14:0]>15'b000000000000000))beginaddra8=6'b010010;addrb8=6'b010011;endelse if((x8[14:0]<=15'b100000000000000)&&(x8>15'b011110000000000))beginaddra8=6'b010100;addrb8=6'b010101;endelse if((x8[14:0]<=15'b100001000000000)&&(x8>15'b100000000000000))beginaddra8=6'b010110;addrb8=6'b010111;endelse if((x8[14:0]<=15'b100010000000000)&&(x8[14:0]>15'b100001000000000))beginaddra8=6'b011000;addrb8=6'b011001;endelse if((x8[14:0]<=15'b100010100000000)&&(x8[14:0]>15'b100010000000000))beginaddra8=6'b011010;addrb8=6'b011011;endelse if((x8[14:0]<=15'b100011000000000)&&(x8[14:0]>15'b100010100000000))beginaddra8=6'b011100;addrb8=6'b011101;endelse if((x8[14:0]<=15'b100011100000000)&&(x8[14:0]>15'b100011000000000))beginaddra8=6'b011110;addrb8=6'b011111;endelse if((x8[14:0]<=15'b100100000000000)&&(x8[14:0]>15'b100011100000000))beginaddra8=6'b100000;addrb8=6'b100001;endelse if((x8[14:0]<=15'b100100010000000)&&(x8[14:0]>15'b100100000000000))beginaddra8=6'b100010;addrb8=6'b100011;endelse if((x8[14:0]<=15'b100100100000000)&&(x8[14:0]>15'b100100010000000))beginaddra8=6'b100100;addrb8=6'b100101;endendendalways @(posedge aclk)beginif(x9[15:15]==1)beginif((x9[14:0]<=15'b100100010000000)&&(x9[14:0]>15'b100100000000000)) beginaddra9=6'b000000;addrb9=6'b000001;endelse if((x9[14:0]<=15'b100100000000000)&&(x9[14:0]>15'b100011100000000))beginaddra9=6'b000010;addrb9=6'b000011;endelse if((x9[14:0]<=15'b100011100000000)&&(x9[14:0]>15'b100011000000000))beginaddra9=6'b000100;addrb9=6'b000101;endelse if((x9[14:0]<=15'b100011000000000)&&(x9[14:0]>15'b100010100000000))beginaddra9=6'b000110;addrb9=6'b000111;endelse if((x9[14:0]<=15'b100010100000000)&&(x9[14:0]>15'b100010000000000))beginaddra9=6'b001000;addrb9=6'b001001;endelse if((x9[14:0]<=15'b100010000000000)&&(x9[14:0]>15'b100001000000000))beginaddra9=6'b001010;addrb9=6'b001011;endelse if((x9[14:0]<=15'b100001000000000)&&(x9[14:0]>15'b100000000000000))beginaddra9=6'b001100;addrb9=6'b001101;endelse if((x9[14:0]<=15'b100000000000000)&&(x9[14:0]>15'b011110000000000))beginaddra9=6'b001110;addrb9=6'b001111;endelse if((x9[14:0]<=15'b011110000000000)&&(x9[14:0]>15'b000000000000000))beginaddra9=6'b010000;addrb9=6'b010001;endendelsebeginif((x9[14:0]<=15'b011110000000000)&&(x9[14:0]>15'b000000000000000))beginaddra9=6'b010010;addrb9=6'b010011;endelse if((x9[14:0]<=15'b100000000000000)&&(x9>15'b011110000000000))beginaddra9=6'b010100;addrb9=6'b010101;endelse if((x9[14:0]<=15'b100001000000000)&&(x9>15'b100000000000000))beginaddra9=6'b010110;addrb9=6'b010111;endelse if((x9[14:0]<=15'b100010000000000)&&(x9[14:0]>15'b100001000000000))beginaddra9=6'b011000;addrb9=6'b011001;endelse if((x9[14:0]<=15'b100010100000000)&&(x9[14:0]>15'b100010000000000))beginaddra9=6'b011010;addrb9=6'b011011;endelse if((x9[14:0]<=15'b100011000000000)&&(x9[14:0]>15'b100010100000000))beginaddra9=6'b011100;addrb9=6'b011101;endelse if((x9[14:0]<=15'b100011100000000)&&(x9[14:0]>15'b100011000000000))beginaddra9=6'b011110;addrb9=6'b011111;endelse if((x9[14:0]<=15'b100100000000000)&&(x9[14:0]>15'b100011100000000))beginaddra9=6'b100000;addrb9=6'b100001;endelse if((x9[14:0]<=15'b100100010000000)&&(x9[14:0]>15'b100100000000000))beginaddra9=6'b100010;addrb9=6'b100011;endelse if((x9[14:0]<=15'b100100100000000)&&(x9[14:0]>15'b100100010000000))beginaddra9=6'b100100;addrb9=6'b100101;endendend
endmodule

取出k,b

module addrtodata(addra0,addra1,addra2,addra3,addra4,addra5,addra6,addra7,addra8,addra9,
addrb0,addrb1,addrb2,addrb3,addrb4,addrb5,addrb6,addrb7,addrb8,addrb9,k0,k1,k2,k3,k4,k5,
k6,k7,k8,k9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,aclk);
input aclk;
input [5:0]addra0,addra1,addra2,addra3,addra4,addra5,addra6,addra7,addra8,addra9;
input [5:0]addrb0,addrb1,addrb2,addrb3,addrb4,addrb5,addrb6,addrb7,addrb8,addrb9;
output [15:0] k0,k1,k2,k3,k4,k5,k6,k7,k8,k9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9;
wire [15:0] k0,k1,k2,k3,k4,k5,k6,k7,k8,k9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9;
blk_mem_gen_0 getk_0(.clka(aclk),.ena(1'b1),.addra(addra0),.douta(k0));
blk_mem_gen_0 getk_1(.clka(aclk),.ena(1'b1),.addra(addra1),.douta(k1));
blk_mem_gen_0 getk_2(.clka(aclk),.ena(1'b1),.addra(addra2),.douta(k2));
blk_mem_gen_0 getk_3(.clka(aclk),.ena(1'b1),.addra(addra3),.douta(k3));
blk_mem_gen_0 getk_4(.clka(aclk),.ena(1'b1),.addra(addra4),.douta(k4));
blk_mem_gen_0 getk_5(.clka(aclk),.ena(1'b1),.addra(addra5),.douta(k5));
blk_mem_gen_0 getk_6(.clka(aclk),.ena(1'b1),.addra(addra6),.douta(k6));
blk_mem_gen_0 getk_7(.clka(aclk),.ena(1'b1),.addra(addra7),.douta(k7));
blk_mem_gen_0 getk_8(.clka(aclk),.ena(1'b1),.addra(addra8),.douta(k8));
blk_mem_gen_0 getk_9(.clka(aclk),.ena(1'b1),.addra(addra9),.douta(k9));
blk_mem_gen_0 getb_0(.clka(aclk),.ena(1'b1),.addra(addrb0),.douta(b0));
blk_mem_gen_0 getb_1(.clka(aclk),.ena(1'b1),.addra(addrb1),.douta(b1));
blk_mem_gen_0 getb_2(.clka(aclk),.ena(1'b1),.addra(addrb2),.douta(b2));
blk_mem_gen_0 getb_3(.clka(aclk),.ena(1'b1),.addra(addrb3),.douta(b3));
blk_mem_gen_0 getb_4(.clka(aclk),.ena(1'b1),.addra(addrb4),.douta(b4));
blk_mem_gen_0 getb_5(.clka(aclk),.ena(1'b1),.addra(addrb5),.douta(b5));
blk_mem_gen_0 getb_6(.clka(aclk),.ena(1'b1),.addra(addrb6),.douta(b6));
blk_mem_gen_0 getb_7(.clka(aclk),.ena(1'b1),.addra(addrb7),.douta(b7));
blk_mem_gen_0 getb_8(.clka(aclk),.ena(1'b1),.addra(addrb8),.douta(b8));
blk_mem_gen_0 getb_9(.clka(aclk),.ena(1'b1),.addra(addrb9),.douta(b9));
endmodule

y=kx+b 得到y的值


module gety(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,k0,k1,k2,k3,k4,k5,k6,k7,k8,k9,
b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,aclk);
input aclk;
input [15:0] x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,k0,k1,k2,k3,k4,k5,k6,k7,k8,k9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9;
output[15:0] y0,y1,y2,y3,y4,y5,y6,y7,y8,y9;
wire [15:0] y0,y1,y2,y3,y4,y5,y6,y7,y8,y9;
wire m01,m02,m03,m11,m12,m13,m21,m22,m23,m31,m32,m33,m41,m42,m43,m51,m52,m53,m61,m62,m63,m71,m72,m73,m81,m82,m83,m91,m92,m93;
wire n0,n1,n2,n3,n4,n5,n6,n7,n8,n9;
floating_point_0   gety0(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m01),.s_axis_a_tdata(k0),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m02), .s_axis_b_tdata(x0), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m03), .s_axis_c_tdata(b0), .m_axis_result_tvalid(n0),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y0));
floating_point_0   gety1(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m11),.s_axis_a_tdata(k1),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m12), .s_axis_b_tdata(x1), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m13), .s_axis_c_tdata(b1), .m_axis_result_tvalid(n1),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y1));
floating_point_0   gety2(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m21),.s_axis_a_tdata(k2),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m22), .s_axis_b_tdata(x2), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m23), .s_axis_c_tdata(b2), .m_axis_result_tvalid(n2),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y2));                      floating_point_0   gety3(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m31),.s_axis_a_tdata(k3),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m32), .s_axis_b_tdata(x3), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m33), .s_axis_c_tdata(b3), .m_axis_result_tvalid(n3),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y3));floating_point_0   gety4(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m41),.s_axis_a_tdata(k4),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m42), .s_axis_b_tdata(x4), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m43), .s_axis_c_tdata(b4), .m_axis_result_tvalid(n4),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y4)); floating_point_0   gety5(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m51),.s_axis_a_tdata(k5),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m52), .s_axis_b_tdata(x5), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m53), .s_axis_c_tdata(b5), .m_axis_result_tvalid(n5),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y5));floating_point_0   gety6(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m61),.s_axis_a_tdata(k6),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m62), .s_axis_b_tdata(x6), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m63), .s_axis_c_tdata(b6), .m_axis_result_tvalid(n6),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y6));floating_point_0   gety7(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m71),.s_axis_a_tdata(k7),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m72), .s_axis_b_tdata(x7), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m73), .s_axis_c_tdata(b7), .m_axis_result_tvalid(n7),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y7));floating_point_0   gety8(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m81),.s_axis_a_tdata(k8),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m82), .s_axis_b_tdata(x8), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m83), .s_axis_c_tdata(b8), .m_axis_result_tvalid(n8),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y8));floating_point_0   gety9(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(m91),.s_axis_a_tdata(k9),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(m92), .s_axis_b_tdata(x9), .s_axis_c_tvalid(1'b1), .s_axis_c_tready(m93), .s_axis_c_tdata(b9), .m_axis_result_tvalid(n9),.m_axis_result_tready(1'b1),.m_axis_result_tdata(y9));
endmodule

得到最终结果

module getf(y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,result0,result1,result2,result3,result4,result5,result6,result7,result8,result9,aclk);
input aclk;
input [15:0] y0,y1,y2,y3,y4,y5,y6,y7,y8,y9;
output[15:0] result0,result1,result2,result3,result4,result5,result6,result7,result8,result9;
wire [15:0] f0,f1,f2,f3,f4,f5,f6,f7,f;
wire g01,g02,g11,g12,g21,g22,g31,g32,g41,g42,g51,g52,g61,g62,g71,g72,g81,g82;
wire gg0,gg1,gg2,gg3,gg4,gg5,gg6,gg7,gg8;
wire d01,d02,d11,d12,d21,d22,d31,d32,d41,d42,d51,d52,d61,d62,d71,d72,d81,d82,d91,d92;
wire dd0,dd1,dd2,dd3,dd4,dd5,dd6,dd7,dd8,dd9;
wire [15:0] result0,result1,result2,result3,result4,result5,result6,result7,result8,result9;
floating_point_1     getf0( .aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(g01),.s_axis_a_tdata(y0),.s_axis_b_tvalid(1'b1), .s_axis_b_tready(g02), .s_axis_b_tdata(y1), .m_axis_result_tvalid(gg0), .m_axis_result_tready(1'b1), .m_axis_result_tdata(f0));
floating_point_1     getf1( .aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(g11),.s_axis_a_tdata(y2),.s_axis_b_tvalid(1'b1), .s_axis_b_tready(g12), .s_axis_b_tdata(y3), .m_axis_result_tvalid(gg1), .m_axis_result_tready(1'b1), .m_axis_result_tdata(f1));
floating_point_1     getf2( .aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(g21),.s_axis_a_tdata(y4),.s_axis_b_tvalid(1'b1), .s_axis_b_tready(g22), .s_axis_b_tdata(y5), .m_axis_result_tvalid(gg2), .m_axis_result_tready(1'b1), .m_axis_result_tdata(f2));
floating_point_1     getf3( .aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(g31),.s_axis_a_tdata(y6),.s_axis_b_tvalid(1'b1), .s_axis_b_tready(g32), .s_axis_b_tdata(y7), .m_axis_result_tvalid(gg3), .m_axis_result_tready(1'b1), .m_axis_result_tdata(f3));
floating_point_1     getf4(.aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(g41),.s_axis_a_tdata(y8),.s_axis_b_tvalid(1'b1), .s_axis_b_tready(g42), .s_axis_b_tdata(y9), .m_axis_result_tvalid(gg4), .m_axis_result_tready(1'b1), .m_axis_result_tdata(f4));
floating_point_1     getf5( .aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(g51),.s_axis_a_tdata(f0),.s_axis_b_tvalid(1'b1), .s_axis_b_tready(g52), .s_axis_b_tdata(f1), .m_axis_result_tvalid(gg5), .m_axis_result_tready(1'b1), .m_axis_result_tdata(f5));
floating_point_1     getf6( .aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(g61),.s_axis_a_tdata(f2),.s_axis_b_tvalid(1'b1), .s_axis_b_tready(g62), .s_axis_b_tdata(f3), .m_axis_result_tvalid(gg6), .m_axis_result_tready(1'b1), .m_axis_result_tdata(f6));
floating_point_1     getf7( .aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(g71),.s_axis_a_tdata(f5),.s_axis_b_tvalid(1'b1), .s_axis_b_tready(g72), .s_axis_b_tdata(f6), .m_axis_result_tvalid(gg7), .m_axis_result_tready(1'b1), .m_axis_result_tdata(f7));
floating_point_1     getf( .aclk(aclk),.s_axis_a_tvalid(1'b1),.s_axis_a_tready(g81),.s_axis_a_tdata(f7),.s_axis_b_tvalid(1'b1), .s_axis_b_tready(g82), .s_axis_b_tdata(f4), .m_axis_result_tvalid(gg8), .m_axis_result_tready(1'b1), .m_axis_result_tdata(f));
divide                getresult0(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d01),.s_axis_a_tdata(y0),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d02),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd0), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result0));
divide                getresult1(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d11),.s_axis_a_tdata(y1),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d12),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd1), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result1));
divide                getresult2(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d21),.s_axis_a_tdata(y2),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d22),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd2), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result2));
divide                getresult3(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d31),.s_axis_a_tdata(y3),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d32),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd3), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result3));
divide                getresult4(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d41),.s_axis_a_tdata(y4),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d42),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd4), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result4));
divide                getresult5(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d51),.s_axis_a_tdata(y5),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d52),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd5), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result5));
divide                getresult6(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d61),.s_axis_a_tdata(y6),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d62),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd6), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result6));
divide                getresult7(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d71),.s_axis_a_tdata(y7),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d72),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd7), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result7));
divide                getresult8(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d81),.s_axis_a_tdata(y8),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d82),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd8), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result8));
divide                getresult9(.aclk(aclk), .s_axis_a_tvalid(1'b1),.s_axis_a_tready(d91),.s_axis_a_tdata(y9),.s_axis_b_tvalid(1'b1),.s_axis_b_tready(d92),.s_axis_b_tdata(f),.m_axis_result_tvalid(dd9), .m_axis_result_tready(1'b1),.m_axis_result_tdata(result9));endmodule

前面模块串联

module softmax(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,result0,result1,result2,result3,result4,result5,result6,result7,result8,result9,aclk);
input aclk;
input [15:0] x0,x1,x2,x3,x4,x5,x6,x7,x8,x9;
output [15:0] result0,result1,result2,result3,result4,result5,result6,result7,result8,result9;
wire [5:0] addra0,addra1,addra2,addra3,addra4,addra5,addra6,addra7,addra8,addra9;
wire [5:0] addrb0,addrb1,addrb2,addrb3,addrb4,addrb5,addrb6,addrb7,addrb8,addrb9;
wire [15:0] k0,k1,k2,k3,k4,k5,k6,k7,k8,k9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9;
wire [15:0] y0,y1,y2,y3,y4,y5,y6,y7,y8,y9;
wire [15:0] result0,result1,result2,result3,result4,result5,result6,result7,result8,result9;
getaddr    getaddr( .x0(x0),.x1(x1),.x2(x2),.x3(x3),.x4(x4),.x5(x5),.x6(x6),.x7(x7),.x8(x8),.x9(x9),.addra0(addra0),.addra1(addra1),.addra2(addra2),.addra3(addra3),.addra4(addra4),.addra5(addra5),.addra6(addra6),.addra7(addra7),.addra8(addra8),.addra9(addra9),.addrb0(addrb0),.addrb1(addrb1),.addrb2(addrb2),.addrb3(addrb3),.addrb4(addrb4),.addrb5(addrb5),.addrb6(addrb6),.addrb7(addrb7),.addrb8(addrb8),.addrb9(addrb9),.aclk(aclk));
addrtodata addrtodata(.addra0(addra0),.addra1(addra1),.addra2(addra2),.addra3(addra3),.addra4(addra4),.addra5(addra5),.addra6(addra6),.addra7(addra7),.addra8(addra8),.addra9(addra9),.addrb0(addrb0),.addrb1(addrb1),.addrb2(addrb2),.addrb3(addrb3),.addrb4(addrb4),.addrb5(addrb5),.addrb6(addrb6),.addrb7(addrb7),.addrb8(addrb8),.addrb9(addrb9),.k0(k0),.k1(k1),.k2(k2),.k3(k3),.k4(k4),.k5(k5),.k6(k6),.k7(k7),.k8(k8),.k9(k9),.b0(b0),.b1(b1),.b2(b2),.b3(b3),.b4(b4),.b5(b5),.b6(b6),.b7(b7),.b8(b8),.b9(b9),.aclk(aclk));
gety             gety(.x0(x0),.x1(x1),.x2(x2),.x3(x3),.x4(x4),.x5(x5),.x6(x6),.x7(x7),.x8(x8),.x9(x9),.k0(k0),.k1(k1),.k2(k2),.k3(k3),.k4(k4),.k5(k5),.k6(k6),.k7(k7),.k8(k8),.k9(k9),.b0(b0),.b1(b1),.b2(b2),.b3(b3),.b4(b4),.b5(b5),.b6(b6),.b7(b7),.b8(b8),.b9(b9),.y0(y0),.y1(y1),.y2(y2),.y3(y3),.y4(y4),.y5(y5),.y6(y6),.y7(y7),.y8(y8),.y9(y9),.aclk(aclk));
getf             getf(.y0(y0),.y1(y1),.y2(y2),.y3(y3),.y4(y4),.y5(y5),.y6(y6),.y7(y7),.y8(y8),.y9(y9),.result0(result0),.result1(result1),.result2(result2),.result3(result3),.result4(result4),.result5(result5),.result6(result6),.result7(result7),.result8(result8),.result9(result9),.aclk(aclk));
endmodule代码片

testbench自己根据需要写。

softmax函数的硬件实现相关推荐

  1. Tranformer模型与Softmax函数

    目录 Softmax函数的FPGA实现 查表法 CORDIC算法的简介 泰勒级数展开法 多项式拟合法: 参考文献 Transformer模型中抛弃了传统的CNN和RNN,整个网络结构完全是由Atten ...

  2. logisitic和softmax函数

    1,logistic函数 其实logistic函数也就是经常说的sigmoid函数,它的几何形状也就是一条sigmoid曲线.logistic函数的公式形式如下: 其中,x0表示了函数曲线的中心(si ...

  3. 干货 | 浅谈 Softmax 函数

    点击上方"视学算法",马上关注 真爱,请设置"星标"或点个"在看" 来自 | 知乎   作者 | LinT 链接丨https://zhuan ...

  4. softmax函数_数学证明深度学习激活函数从Softmax到Sparsemax

    Sparsemax封闭形式解及其损失函数的推导 本文目标是三个方面.第一部分讨论了sparsemax背后的动机及其与softmax的关系,首次介绍了该激活函数的原始研究论文摘要,以及使用sparsem ...

  5. python softmax函数

    单维度 argmax,max函数: import numpy as np a = np.array([3, 1, 2, 4, 6, 1]) print(np.argmax(a)) 4print(a.m ...

  6. Softmax函数详解与推导

    原文:https://www.cnblogs.com/zongfa/p/8971213.html Softmax函数详解与推导 一.softmax函数 softmax用于多分类过程中,它将多个神经元的 ...

  7. softmax函数理解

    该节课中提到了一种叫作softmax的函数,因为之前对这个概念不了解,所以本篇就这个函数进行整理,如下: 维基给出的解释:softmax函数,也称指数归一化函数,它是一种logistic函数的归一化形 ...

  8. softmax函数为什么叫softmax?

    之前一直很奇怪这个名字,本身是做一个类似归一化的动作,把整体一个vector"压缩"成一个符合概率分布的样子,为什么叫softmax呢? 今天查了下,看了下部分答案,大概写一下理解 ...

  9. 一分钟理解softmax函数(超简单)

    做过多分类任务的同学一定都知道softmax函数.softmax函数,又称归一化指数函数.它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来.下图展示了softma ...

最新文章

  1. 转: 如何实现jQuery的Ajax文件上传
  2. 了解DELL的raid卡电池相关信息
  3. numpy 创建加一行_Python数据分析快速入门--NumPy amp; Pandas
  4. LibManagementSys图书管理系统
  5. 简易航空订票系统_基于C++实现简易航空票务,飞机订票系统!
  6. IIS设置Access-Control-Allow-Origin
  7. openmp 互斥锁 mysql_openMP 函数总结(并行程序设计导论)
  8. 十六进制转float和“float转十六进制”经典代码
  9. 网站升级到新服务器,第一次折腾站点升级HTTPS 虽胜尤败
  10. 同济大学计算机学院陈震,顾榕-电子与信息工程学院
  11. oracle数据库笔记---pl/sql的基础使用方法
  12. sort排序和uniq使用
  13. 验证空间变形:电子在测地线的圆形轨道上辐射行为
  14. C#中的IntPtr
  15. 微信小程序开发——websocket(socket在线测试服务器,或本地socket服务器)
  16. linux内核支持浮点吗,浅谈linux kernel对于浮点运算的支持
  17. K'ed by TNT team是什么意思?
  18. mybatis-plus自动填充(创建时间\修改时间)
  19. JavaWeb笔记:第07章 MVC |EL |JST |Filter |Listener |JQuery |AJAX |Maven |JSON |Redis |Linux |Nginx
  20. SLAM在机器人中的应用

热门文章

  1. pb数据窗口控件OLE
  2. 77种互联网盈利创新模式(转)
  3. ThinkPHP实现百度网盘下载功能,必备!
  4. STM32软件的烧写方式
  5. Melo7的博客园处女作
  6. 基于KVM安装部署RHCOS(CoreOS)操作系统
  7. 数据持久化Xml与Json
  8. 小白入坑安全测试指南
  9. 一年半前,周鸿祎的想法
  10. 游苏州拙政园谈园林艺术与休闲游戏