尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
03 xilinx除法IP核的使用
xilinx除法器IP核配置Algorithm Type算法类型可选High Radix、LutMult、Radix2一般常用Radix2Operand Sign有符号和无符号选择Dividend Width被除数宽度Divisor Width除数宽度Remainder Type 余数类型可以选择小数模式或者余数模式Fractional Width 余数模式为小数时选择小数宽度Clocks per Division 每多少个时钟周期处理一除法运算Flow Control流控选择可选Blocking和Non BlockingLatency Configuration输出延迟一般选择Automaticlmplementation Details配置细节如被除数位段、除数位段、商位段、小数或余数位段除法器IP核时序下面非阻塞模式下的时序需要除数和被除数同时有效才进行计算图中假设Latency为0实际使用中一般不为0下面是阻塞模式下的时序相当于在除数和被除数端口加了个FIFO除数和被除数不要求同时有效图中假设Latency为0实际使用中一般不为0除法器IP核小数格式xilinx 除法器IP核在将余数输出模式配置为小数模式时其输出结果分为商和小数两部分部分如下分别是有符号模式和无符号模式下小数输出规则。无符号模式FractRmd除法器IP核输出的小数IntRmd余数Divisor除数F输出小数位宽即除法器小数部分输出结果为真实小数放大了2^F倍取整有符号模式FractRmd除法器IP核输出的小数IntRmd余数Divisor除数F输出小数位宽即除法器小数部分输出结果为真实小数放大了2^(F-1)倍取整因为符号要占1位所以放大倍数为2^(F-1))除法器IP核在有符号模式下有以下几种输出可能商为0小数部分为0商和小数的符号位分别为2’b00商为0小数部分为正商和小数的符号位分别为2’b00商为0小数部分为负商和小数的符号位分别为2’b01商为正小数部分为0商和小数的符号位分别为2’b00商为正小数部分为正商和小数的符号位分别为2’b00商为负小数部分为0商和小数的符号位分别为2’b10商为负小数部分为负商和小数的符号位分别为2’b11xilinx 除法器IP核在有符号模式下商和小数合并为定点数的方法拼接合并法拼接规则如下当商和小数的符号位分别为2’b00时{商的符号位,商,小数去符号位}当商和小数的符号位分别为2’b01时{商取反,小数包含符号位}当商和小数的符号位分别为2’b10时{商的符号位,商,小数去符号位}当商和小数的符号位分别为2’b11时 ​{商的符号位,商-1,小数去符号位}如下是两个有符号相除采用符号位1位、整数位7位、小数位10位格式进行量化//浮点数等式-18.625/6.325-2.944664031620553//转换为定点格式(-18.625*2^10)/(6.325*2^10)-19072/647618b11_1011_0101_1000_0000/18b00_0110_0100_0111_0110//定点数相除结果商18‘b11_1111_1111_1111_1110-2小数11b100_0011_1001-967//将商和余数合并{1b1, 7‘b111 1110 - 1b1,10‘b0000111001}{1b1,7‘b1111101,10‘b0000111001}18‘b11_1111_0100_0011_1001-3015//将结果转换回浮点数-3015/2^10-2.9443359375相加合并法规则如下将商按小数的保留位宽进行放大然后再与小数部分相加相加时两边需要用符号位扩展到相同位宽如下是两个有符号相除采用符号位1位、整数位7位、小数位10位格式进行量化//浮点数等式-18.625/6.325-2.944664031620553//转换为定点格式(-18.625*2^10)/(6.325*2^10)-19072/647618b11_1011_0101_1000_0000/18b00_0110_0100_0111_0110 商18‘b11_1111_1111_1111_1110-2小数11b100_0011_1001-967//将商和余数合并(-210)(-967)18‘b11_1111_1000_0000_000018‘b11_1111_1100_0011_100118‘b11_1111_0100_0011_1001-3015//将结果转换回浮点数-3015/2^10-2.9443359375仿真验证在工程中添加一个除法IP核除数和被除数均为18位有符号数输出小数保留11位采用非阻塞时序。步骤1打开IP Catalog找到除法IP核步骤2打开除法IP核配置界面并进行配置步骤3生成除法IP核创建仿真激励文件后面弹出的define module页面直接关闭即可。在仿真激励文件中输入以下内容timescale1ns/1ps moduletb_div_gen_i18_i18_f11();//激励时钟reg aclk1b0;//被除数reg dividend_tvalid1b0;regsigned[23:0]dividend_tdatad0;//除数reg divisor_tvalid1b0;regsigned[23:0]divisor_tdatad0;//商和小数wiresigned[17:0]quotient;wiresigned[10:0]fractional;//采用加法合并的成定点数结果regsigned[17:0]add_q1018h0;//采用拼接合并的成定点数结果regsigned[28:0]splice_q10_temp29h0;wiresigned[17:0]splice_q10;//除法器输出包含商和小数wire div_dout_tvalid;wire[31:0]div_dout_tdata;//仿真结束标志reg sim_done_flag1b0;//仿真数据写入标志reg write_sim_flag1b0;//产生激励时钟initial begin aclk1b0;end always #10aclk~aclk;initial begin dividend_tvalid1b0;divisor_tvalid1b0;dividend_tdata0;divisor_tdata0;//商为0小数部分为0商和小数的符号位为2’b00//0/1.5---0/1536repeat(100)(posedge aclk);dividend_tvalid1b1;divisor_tvalid1b1;dividend_tdata0;divisor_tdata1536;(posedge aclk);dividend_tvalid1b0;divisor_tvalid1b0;//商为0小数部分为正商和小数的符号位为2’b00//0.5/1.5---512/1536repeat(100)(posedge aclk);dividend_tvalid1b1;divisor_tvalid1b1;dividend_tdata512;divisor_tdata1536;(posedge aclk);dividend_tvalid1b0;divisor_tvalid1b0;//商为0小数部分为负商和小数的符号位为2’b01//-0.5/1.5----512/1536repeat(100)(posedge aclk);dividend_tvalid1b1;divisor_tvalid1b1;dividend_tdata-512;divisor_tdata1536;(posedge aclk);dividend_tvalid1b0;divisor_tvalid1b0;//商为正小数部分为0商和小数的符号位为2’b00//1.5/0.5---1536/512repeat(100)(posedge aclk);dividend_tvalid1b1;divisor_tvalid1b1;dividend_tdata1536;divisor_tdata512;(posedge aclk);dividend_tvalid1b0;divisor_tvalid1b0;//商为正小数部分为正商和小数的符号位为2’b00//1.8/0.5---1843/512repeat(100)(posedge aclk);dividend_tvalid1b1;divisor_tvalid1b1;dividend_tdata1843;divisor_tdata512;(posedge aclk);dividend_tvalid1b0;divisor_tvalid1b0;//商为负小数部分为0商和小数的符号位为2’b10//-1.5/0.5----1536/512repeat(100)(posedge aclk);dividend_tvalid1b1;divisor_tvalid1b1;dividend_tdata-1536;divisor_tdata512;(posedge aclk);dividend_tvalid1b0;divisor_tvalid1b0;//商为负小数部分为负商和小数的符号位为2’b11//-1.8/0.5----1843/512repeat(100)(posedge aclk);dividend_tvalid1b1;divisor_tvalid1b1;dividend_tdata-1843;divisor_tdata512;(posedge aclk);dividend_tvalid1b0;divisor_tvalid1b0;//仿真结束repeat(100)(posedge aclk);sim_done_flag1b1;(posedge aclk);sim_done_flag1b0;end//商assign quotientdiv_dout_tdata[28:11];//小数assign fractionaldiv_dout_tdata[10:0];//采用加法合并成定点数其中符号位1位、整数位7位、小数位10位将商按小数的保留位宽进行放大然后再与小数部分相加相加时需要扩位always (posedge aclk)beginif(div_dout_tvalid1b1)add_q10{quotient[17],quotient[6:0],10h000}{{7{fractional[10]}},fractional};end//采用拼接合并成定点数其中符号位1位、整数位18位、小数位10位always (posedge aclk)beginif(div_dout_tvalid1b1)begincase({quotient[17],fractional[10]})2b00:splice_q10_temp{quotient[17],quotient,fractional[9:0]};2b01:splice_q10_temp{~quotient,fractional};2b10:splice_q10_temp{quotient[17],quotient,fractional[9:0]};2b11:splice_q10_temp{quotient[17],quotient-1b1,fractional[9:0]};endcase end end//将符号位1位、整数位18位、小数位10位转换为符号位1位、整数位7位、小数位10位assign splice_q10{splice_q10_temp[28],splice_q10_temp[16:0]};//产生仿真数据写入文件标志always (posedge aclk)begin write_sim_flagdiv_dout_tvalid;end//dout_tdata dividend_tdata/divisor_tdatadiv_gen_i18_i18_f11tb_div_gen_i18_i18_f11_inst0(.aclk(aclk),// input wire aclk.s_axis_divisor_tvalid(divisor_tvalid),// input wire s_axis_divisor_tvalid.s_axis_divisor_tdata(divisor_tdata),// input wire [23 : 0] s_axis_divisor_tdata.s_axis_dividend_tvalid(dividend_tvalid),// input wire s_axis_dividend_tvalid.s_axis_dividend_tdata(dividend_tdata),// input wire [23 : 0] s_axis_dividend_tdata.m_axis_dout_tvalid(div_dout_tvalid),// output wire m_axis_dout_tvalid.m_axis_dout_tdata(div_dout_tdata)// output wire [31 : 0] m_axis_dout_tdata);integer prtf;//创建仿真输出文件文件路径根据实际情况修改initial begin prtf$fopen(F:/AD9361/02-division/vivado_project/div_out.csv,w);$fwrite(prtf,divisor,dividend,quotient,fractional,add_q10,splice_q10\n);end//存储仿真输出数据always (posedge aclk)beginif(write_sim_flag1b1)$fwrite(prtf,%d,%d,%d,%d,%d,%d\n,dividend_tdata,divisor_tdata,quotient,fractional,add_q10,splice_q10);end//仿真结束关闭文件always (posedge aclk)beginif(sim_done_flag1b1)$fclose(prtf);end endmodule运行仿真仿真波形图如下计算结果验证仿真结束后会得到一个div_out.csv的文件可以通过excel表格验算结果是否正确excel表格计算结果xilinx除法IP核计算结果
RELATED

相关推荐

Anthropic C SDK 实战指南:基于 Claude API 的 .NET 集成、工具调用与高级特性

Anthropic C SDK 实战指南:基于 Claude API 的 .NET 集成、工具调用与高级特性

人工智能AI 技能AI 评测 【免费下载链接】skills Public repository for Agent Skills 项目地址: https://gitcode.com/GitHub_Trending/skills3/skills 点击查看 免费下载 本篇技术指南围绕仓库 skills/claude-api 中 C# SDK 的官方文档 csharp/claude-api/README…

📅 2026/9/30 2:01:36
NestJS GraphQL Federation Schema-First 实战:users-application 子服务完整实现解析

NestJS GraphQL Federation Schema-First 实战:users-application 子服务完整实现解析

后端Web框架 【免费下载链接】nest A progressive Node.js framework for building efficient, scalable, and enterprise-grade server-side applications with TypeScript/JavaScript 🚀 项目地址: https://gitcode.com/GitHub_Trending/ne/nest 点击查…

📅 2026/9/30 2:01:36
旧Mac免费升级指南:用OpenCore Legacy Patcher装上新款macOS

旧Mac免费升级指南:用OpenCore Legacy Patcher装上新款macOS

旧Mac免费升级指南:用OpenCore Legacy Patcher装上新款macOS 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 打开"软件更新"却找不到任…

📅 2026/9/30 2:01:36
MORE NEWS

更多资讯

📰

工作三年,才明白Python技术栈要这样学

工作三年,从写爬虫脚本到负责后端服务,我踩过不少坑。刚入行时总想什么火就学什么,结果样样通样样松。后来才明白,Python技术栈的学习必须有一条主线:基础要牢,工具要熟,框架要精,工…

📰

markdown表格标题渲染判定C

markdown 表格与标题渲染判定 这是一段普通正文,用来判断段落是否撑开。## 二级标题| 列A | 列B || — | — || a1 | b1 || a2 | b2 |### 三级标题- 列表项一- 列表项二javaint a 1;加粗文字 与 行内代码。

📰

前端实用技巧:纯浏览器实现 PDF 转 Word,全程本地零上传

平时办公或者做开发,PDF 转 Word 绝对是超级高频的需求。不管是改文档、复制文案、二次编辑内容,PDF 都是只读的,根本没法直接修改,必须转成 Word 格式才方便操作。相信大家之前都用过各种转换工具,不是要开会员、满屏…

📰

闭式冷却塔优质厂家发展全景:用户力荐的靠谱生厂商推荐

基础科普:闭式冷却塔核心常识与应用边界 想要选到适配工况的闭式冷却塔,首先要搞懂这类设备的核心属性与应用范围,新手也能快速建立基础认知。 闭式冷却塔也叫密闭式冷水塔,属于工业循环冷却系统的核心换热设备,和传统…

📰

李宏毅生成式人工智能导论笔记 2024(五)

学习率:影响模型学习速度。调得过大,生成的人脸会更像目标人物,但可能丢失模型原有的文本理解能力(例如,提示“白T恤”却生成黑西装)。 训练步数:决定训练时长。步数越多,训练时间越…

📰

Python 正则表达式(十四):文本匹配、查找与替换

相信大家平时都见过这样的内容,内容里明明有我们需要的信息,但它们都混杂在一大段文字里。比如日志中的时间和 IP,聊天记录里的手机号和邮箱,没法像 JSON 或 CSV 那样直接按字段读取。 思维导图这种时候,正则表达式就很…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬