softmax函数的硬件实现
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函数的硬件实现相关推荐
- Tranformer模型与Softmax函数
目录 Softmax函数的FPGA实现 查表法 CORDIC算法的简介 泰勒级数展开法 多项式拟合法: 参考文献 Transformer模型中抛弃了传统的CNN和RNN,整个网络结构完全是由Atten ...
- logisitic和softmax函数
1,logistic函数 其实logistic函数也就是经常说的sigmoid函数,它的几何形状也就是一条sigmoid曲线.logistic函数的公式形式如下: 其中,x0表示了函数曲线的中心(si ...
- 干货 | 浅谈 Softmax 函数
点击上方"视学算法",马上关注 真爱,请设置"星标"或点个"在看" 来自 | 知乎 作者 | LinT 链接丨https://zhuan ...
- softmax函数_数学证明深度学习激活函数从Softmax到Sparsemax
Sparsemax封闭形式解及其损失函数的推导 本文目标是三个方面.第一部分讨论了sparsemax背后的动机及其与softmax的关系,首次介绍了该激活函数的原始研究论文摘要,以及使用sparsem ...
- python softmax函数
单维度 argmax,max函数: import numpy as np a = np.array([3, 1, 2, 4, 6, 1]) print(np.argmax(a)) 4print(a.m ...
- Softmax函数详解与推导
原文:https://www.cnblogs.com/zongfa/p/8971213.html Softmax函数详解与推导 一.softmax函数 softmax用于多分类过程中,它将多个神经元的 ...
- softmax函数理解
该节课中提到了一种叫作softmax的函数,因为之前对这个概念不了解,所以本篇就这个函数进行整理,如下: 维基给出的解释:softmax函数,也称指数归一化函数,它是一种logistic函数的归一化形 ...
- softmax函数为什么叫softmax?
之前一直很奇怪这个名字,本身是做一个类似归一化的动作,把整体一个vector"压缩"成一个符合概率分布的样子,为什么叫softmax呢? 今天查了下,看了下部分答案,大概写一下理解 ...
- 一分钟理解softmax函数(超简单)
做过多分类任务的同学一定都知道softmax函数.softmax函数,又称归一化指数函数.它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来.下图展示了softma ...
最新文章
- 转: 如何实现jQuery的Ajax文件上传
- 了解DELL的raid卡电池相关信息
- numpy 创建加一行_Python数据分析快速入门--NumPy amp; Pandas
- LibManagementSys图书管理系统
- 简易航空订票系统_基于C++实现简易航空票务,飞机订票系统!
- IIS设置Access-Control-Allow-Origin
- openmp 互斥锁 mysql_openMP 函数总结(并行程序设计导论)
- 十六进制转float和“float转十六进制”经典代码
- 网站升级到新服务器,第一次折腾站点升级HTTPS 虽胜尤败
- 同济大学计算机学院陈震,顾榕-电子与信息工程学院
- oracle数据库笔记---pl/sql的基础使用方法
- sort排序和uniq使用
- 验证空间变形:电子在测地线的圆形轨道上辐射行为
- C#中的IntPtr
- 微信小程序开发——websocket(socket在线测试服务器,或本地socket服务器)
- linux内核支持浮点吗,浅谈linux kernel对于浮点运算的支持
- K'ed by TNT team是什么意思?
- mybatis-plus自动填充(创建时间\修改时间)
- JavaWeb笔记:第07章 MVC |EL |JST |Filter |Listener |JQuery |AJAX |Maven |JSON |Redis |Linux |Nginx
- SLAM在机器人中的应用