因爲Verilog/Vhdl沒有計算exp指數函數的庫函數,因此在開發過程當中可利用cordic IP核作exp函數即e^x值;函數
但前提要保證輸入範圍在(-pi/4—pi/4)測試
在cordic核中e^x = sinh + cosh因此在配置cordic時點選sinh and cosh便可 以下圖:spa
input width配置爲16位,表示輸入數據的第16位是符號位,第15,14位是整數位,其餘位表示小數位,至關於13位有符號定點小數;3d
output width配置16位,高16位表示sinh結果 其中第16位符號位,第15位整數位,其它小數位,至關於13位有符號定點小數;blog
低16位表示cosh結果 其中第16位符號位,第15位整數位,其它小數位,至關於13位有符號定點小數;ip
其它選項都按上圖顯示配置;ci
編寫testbench測試文件:開發
Testbench:get
`timescale 1ns / 1psinput
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
// Create Date: 2018/11/28 09:08:45
// Design Name:
// Module Name: test_bench_IP_cordic_ex
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
// 利用cordic IP核 作pi/5和-pi/4作exp 定義(可自選)
//需本身將仿真結果高16位提出做爲sinh值 數據格式爲第16位爲符號位 第15位是整數位 後邊其餘是小數
//將仿真結果低16位提出做爲cosh值 數據格式爲第16位爲符號位 第15位是整數位 後邊其餘是小數
//獲得結果exp(x)=sinh+cosh
// Dependencies:
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//////////////////////////////////////////////////////////////////////////////////
module test_bench_IP_cordic_ex(
);
//inputs
reg clk;
reg[15:0] s_axis_phase_tdata;
reg s_axis_phase_tvalid;
//outputs
wire m_axis_dout_tvalid;
wire[31:0] m_axis_dout_tdata;
//others
wire[15:0] sinh;
wire[15:0] cosh;
wire[15:0] exp;
assign sinh = m_axis_dout_tdata[31:16];
assign cosh = m_axis_dout_tdata[15:0];
assign exp = sinh + cosh;
cordic_0 cordic_m0(
.aclk(clk),
//.rst(rst),
.s_axis_phase_tdata(s_axis_phase_tdata),
//.s_axis_phase_tready(s_axis_phase_tready),
.s_axis_phase_tvalid(s_axis_phase_tvalid),//s_axis_phase_tvalid),
.m_axis_dout_tvalid(m_axis_dout_tvalid),
.m_axis_dout_tdata(m_axis_dout_tdata)
);
always #5 clk = ~clk;
initial begin
clk = 0;
s_axis_phase_tvalid = 0;
s_axis_phase_tdata = 0;
#150
s_axis_phase_tvalid = 1;
s_axis_phase_tdata = 16'b0001010000011011;//pi * 1/5
#10
s_axis_phase_tdata = 16'b1110011011011110;//-pi * 1/4
#10
s_axis_phase_tvalid = 0;
#40000 $finish;
end
endmodule
仿真結果以下圖:
圖中標紅區域值分別爲:
e(pi/5)=1.87432861328125
e(-pi/4)=0.45587158203125
利用Matlab仿真結果以下圖:
對比可知仿真結果一致;