完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
由于Verilog/Vhdl没有计算exp指数函数的库函数,所以在开发过程中可利用cordic IP核做exp函数即e^x值;
但前提要保证输入范围在(-pi/4—pi/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/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仿真结果如下图: 对比可知仿真结果一致; |
|
|
|
只有小组成员才能发言,加入小组>>
2389 浏览 7 评论
2805 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2272 浏览 9 评论
3346 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2440 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
769浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
551浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
392浏览 1评论
1976浏览 0评论
693浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 15:13 , Processed in 1.257628 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号