设为首页 加入收藏

TOP

Vivado中xilinx_courdic IP核(求exp指数函数)使用(一)
2019-08-24 00:06:23 】 浏览:96
Tags:Vivado xilinx_courdic exp 指数函数 使用

 

由于Verilog/Vhdl没有计算exp指数函数的库函数,所以在开发过程中可利用cordic IP核做exp函数即e^x值;

但前提要保证输入范围在(-pi/4pi/4

cordic核中e^x = sinh + cosh所以在配置cordic时点选sinh and cosh即可 如下图:

 

input width配置为16位,表示输入数据的第16位是符号位,第15,14位是整数位,其他位表示小数位,相当于13位有符号定点小数;

output width配置16位,高16位表示sinh结果 其中第16位符号位,第15位整数位,其它小数位,相当于13位有符号定点小数;

            低16位表示cosh结果 其中第16位符号位,第15位整数位,其它小数位,相当于13位有符号定点小数;

其它选项都按上图显示配置;

 

编写testbench测试文件:

Testbench

`timescale 1ns / 1ps

//////////////////////////////////////////////////////////////////////////////////

// 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/4exp 定义(可自选)

//需自己将仿真结果高16位提出作为sinh 数据格式为第16位为符号位 第15位是整数位 后边其他是小数

//将仿真结果低16位提出作为cosh值 数据格式为第16位为符号位 第15位是整数位 后边其他是小数

//得到结果expx=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;

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Verilog使用相对路径时应注意的问.. 下一篇【基本知识】verilog中 `define ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目