发 帖  

[经验] 详细操作 vivado 调用IP核(附图)

2018-5-16 11:42:55  851
收藏 0 收藏 推荐 0 推荐
分享
大家伙,又到了每日学习的时间了,今天咱们来聊一聊vivado 调用IP核。
        首先咱们来了解一下vivado的IP核,IP核(IP Core):Vivado中有很多IP核可以直接使用,例如数学运算(乘法器、除法器、浮点运算器等)、信号处理(FFT、DFT、DDS等)。IP核类似编程中的函数库(例如C语言中的printf()函数),可以直接调用,非常方便,大大加快了开发速度。
        
        


        使用Verilog调用IP核

        这里简单举一个乘法器的IP核使用实例,使用Verilog调用。首先新建工程,新建demo.v顶层模块。
        
        一、添加IP核

        1. 点击Flow Navigator中的IP Catalog。
        

1.png (10.83 KB, 下载次数: 1)

下载附件

昨天 11:35 上传




        

        2. 选择Math Functions下的Multiplier,即乘法器,并双击。
        

2.png (73.1 KB, 下载次数: 1)

下载附件

昨天 11:35 上传




        

        3. 将弹出IP核的参数设置对话框。点击左上角的Documentation,可以打开这个IP核的使用手册查阅。这里直接设置输入信号A和B均为4位无符号型数据,其他均为默认值,点击OK。
        

3.png (62.35 KB, 下载次数: 0)

下载附件

昨天 11:35 上传






        4. 稍后弹出的窗口,点击Generate。
        

4.png (94 KB, 下载次数: 1)

下载附件

昨天 11:35 上传






        二、调用IP核
        
        1. 选择IP Sources,展开并选择mult_gen_0 - Instantiation Template - mult_gen_0.veo,可以打开实例化模板文件。如图,这段代码就是使用Verilog调用这个IP核的示例代码。
        

2.1.png (80.87 KB, 下载次数: 1)

下载附件

昨天 11:35 上传






        2. 将示例代码复制到demo.v文件中,并进行修改,最终如下。代码中声明了无符号型的4位变量a和b,分别赋初值7、8,作为乘数使用;无符号型的8位变量p,用于保存计算结果。clk为Testbench编写的周期20ns的时钟信号;mult_gen_0 mul(...)语句实例化了mult_gen_0类型的模块对象mul,并将clk、a、b、p作为参数传入。
        

2.2.png (20.36 KB, 下载次数: 1)

下载附件

昨天 11:35 上传





        
        三、行为仿真验证

        以demo为顶层模块,启动行为仿真,即可输出波形。设置a、b、p显示为无符号十进制(右击选择Radix - Unsigned Decimal)。如图,可以看到a=7, b=8,第一个时钟上升沿后p = a * b = 56。
        

行为仿真验证.png (11.39 KB, 下载次数: 0)

下载附件

昨天 11:35 上传





        


        框图(Block Design)中调用IP核

        这里举一个简单的例子,通过调用乘法器IP核,产生一个能计算平方的新模块。

        一、创建框图设计文件

        1. 选择Flow Navigator中的Create Block Design,创建一个框图设计文件。
        

3.1.png (10.39 KB, 下载次数: 1)

下载附件

昨天 11:47 上传






        2. 输入文件名并点击OK。
        

3.2.png (69.45 KB, 下载次数: 1)

下载附件

昨天 11:47 上传






        二、添加IP核

        1. 在框图空白处右击,选择Add IP。
        

3.3.png (50.48 KB, 下载次数: 0)

下载附件

昨天 11:47 上传






        2. 可以直接搜索需要的IP核,双击确认。
        

3.4.png (10.31 KB, 下载次数: 1)

下载附件

昨天 11:47 上传






        3. IP核即可被添加进来,可以用导线将其与其他器件连接。
        

3.5.png (19 KB, 下载次数: 1)

下载附件

昨天 11:47 上传






        4. 双击这个IP核符号,可以打开参数设置对话框。点击左上方的Documentation可以查看IP核的手册。这里将输入的A、B均设置为4为无符号型,其他为默认值,点击OK确认。
        

3.6.png (67.4 KB, 下载次数: 0)

下载附件

昨天 11:47 上传





        
        三、绘制电路
        
        1. 右击Diagram窗口空白处,选择Create Port。
        

3.7.png (35.97 KB, 下载次数: 1)

下载附件

昨天 11:47 上传






        2. 弹出窗口中,设置端口a为4位输入信号,并点击OK。
        

3.8.png (94.84 KB, 下载次数: 1)

下载附件

昨天 11:47 上传






        3. 将a与A、B都连接起来。
        

3.9.png (19.1 KB, 下载次数: 1)

下载附件

昨天 11:47 上传





        
        4. 同样的方法,添加一个8位输出端口p,与P连接。
        

3.91.png (96.97 KB, 下载次数: 1)

下载附件

昨天 11:47 上传






        5. 再添加一个clk时钟输入端口,与CLK连接。
        

3.92.png (96.86 KB, 下载次数: 0)

下载附件

昨天 11:47 上传






        6. 最终结果如图。
        

3.93.png (15.86 KB, 下载次数: 1)

下载附件

昨天 11:47 上传





        
        四、仿真测试
        
        1. 右击框图设计文件design_1,选择Create HDL Wrapper。
        

3.931.png (23.5 KB, 下载次数: 1)

下载附件

昨天 11:53 上传






        2. 选择第二项并点击OK。
        

3.94.png (100.94 KB, 下载次数: 1)

下载附件

昨天 11:47 上传






        3. 打开生成的design_1_wrapper.v文件如图,红框中的代码用来调用前面画好的Block Design模块。
        

3.95.png (116.26 KB, 下载次数: 0)

下载附件

昨天 11:47 上传





        
        4. 在design_1_wrapper.v文件中,添加Testbench代码即可进行行为仿真。修改代码如下,给输入信号a赋初值为8,clk连接到Testbench生成的时钟信号c上。
        

3.96.png (9.36 KB, 下载次数: 1)

下载附件

昨天 11:47 上传






        5. 在Simulation Sources文件夹下,设置design_1_wrapper.v为行为仿真的顶层文件(右击,选择Set as Top)。
        

3.97.png (23.43 KB, 下载次数: 0)

下载附件

昨天 11:47 上传






        启动行为仿真,最终输出的波形如下。可以看到,在clk的第一个上升沿后,就有 p = a*a = 64,即实现了平方运算。

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

电路设计论坛

电子元器件论坛

传感技术

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

-

EDA设计论坛

multisim论坛

PCB设计论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

Orcad论坛

-

综合技术与应用

电机控制

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

物联网技术

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

高校联盟

深圳大学电子协会

西藏民族学院电子设计协会

西安电子科技大学西电实验室

桂林电子科技大学机电工程协会

鉴鹰电子科技协会

广东海洋大学科技创新协会

福建农林大学电子科技创新协会

湖北理工学院电子技术协会

深圳职业技术学院电子精英训练营

浙江科技学院Zuster

湘潭大学电子科技协会

青岛理工大学琴岛学院天宏开发团队

河南理工大学大学生电器开发部

广西科技大学电气信息创新协会

浙江机电职业技术学院电子制作协会

郑州大学西亚斯国际学院爱电工作室

新乡学院电子创新工作室

洛阳理工学院SmartTeam

苏州工业职业技术学院创新工作室

浙江工业大学GC315团队

杭电-微芯大学生科技创新孵化器

西安工业大学电信科协

商洛学院科技创新协会

大连民族学院创新工作室

南京信息工程大学帆木工作室

-

供求信息发布

方案交易

供需广告

芯片求购|供应发布区