其实在FPGA的开发中理想情况下FPGA之间的数据要通过寄存器输入、输出,这样才能使得延时最小,从而更容易满足建立时间要求。我们在FPGA内部硬件结构中得知,IOB内是有寄存器的,且IOB内的寄存器比FPGA内部的寄存器更靠近外部的输出管脚,这样就能够得到更小的延时,从而使时序更好。我们可以看到在没有指定的情况下寄存器的映射都是随机的,那么问题来了,如何才能指定寄存器映射到IOB中呢?我们依然用异步复位D触发器的例子来给大家演示。

如图1所示,我们回到工程界面点击“Assignment Editor”图标来约束寄存器映射的位置。

图 1

如图2所示,在打开的“Assignment Editor”界面中点击“To”下面的“<<new>>”添加要约束的项。

图 2

点击如图3所示的望远镜图标,打开“Node Finder”。

图 3

在打开的“Node Finder”界面中我们找到信号的输入key_in,如图4所示,根据序号顺序,在①处的“Named :”选项框中输入“*”,点击 ②处的“List”,在③处的“Node Found :”列表中就会列出名为key_in 的信号,双击③处的key_in 信号或点击图标④,key_in 信号就被添加到⑤处的“Selected Nodes:”中了。如果我们想取消⑤处选择的信号则在“Selected Nodes:”选中该信号后点击图标⑥即可。设置完毕后点击“OK”退出。

图 4

如图5所示,设置“Assignment Name”,下拉列表找到“Fast Input Register(Accepts wildcards/groups)”,这是设置将寄存器映射在输入IOB中的约束,如果设置将寄存器映射在输出IOB中则选择“Fast Output Register(Accepts wildcards/groups)”。

图 5

如图7所示,设置“Value”的值为“on”。

图 6

全部设置完成后的结果如图 22-90所示。

图 7

点击“Start Compilation”图标全编译进行布局布线,否则无法重新映射资源。此时会弹出如图8所示的对话框,提示是否要保存更改,选择“Yes”后会执行布局布线。

图 8

当布局布线重新完成映射后我们再来看看Chip Planner视图,如图9所示,我们发现整个视图都没有什么明显的变化,难道是映射失败了?

图 9

如图10所示,既然不能用肉眼直接看到,那我们可以在Chip Planner界面右上角红色框处的“Find what”处搜索定位信号在版图模型中的位置,如果没有找到“Find what”搜索框,按住键盘“Ctrl + F”就会自动出现。

图 10

在图11中红色区域中的“Find what”搜索RTL代码中的信号名“key_in”,然后点击“List”。

图 11

点击图12所示的“key_in”可以看到在版图模型的对应位置高亮显示,这个位置就是FPGA的IOB区域。

图 12

如图13所示,将映射的IOB区域放大,其中①为我们key_in的输入端,而②则是寄存器所映射的新位置。

图 13

如图14所示,我们双击②处的寄存器,观察其内部结构,发现IOB中的寄存器已经高亮显示了,说明真的映射上了,实现了我们的要求。

图 14

欢迎加入FPGA技术学习交流群,本群致力于为广大FPGAer提供良好的学习交流环境,不定期提供各种本行业相关资料!QQ交流群号:450843130

Verilog代码和FPGA硬件的映射关系(四)的更多相关文章

  1. Verilog代码和FPGA硬件的映射关系(三)

    组合逻辑和FPGA之间的映射关系我们知道了,那时序逻辑和FPGA之间又是一种怎样的映射关系呢?我们就以前面寄存器章节的例子来向大家说明,也一同把当时为什么用异步复位更节约资源的原因告诉大家.我们先来看 ...

  2. Verilog代码和FPGA硬件的映射关系(一)

    代码和硬件之间的映射关系是一个很奇妙的过程,也展现出人类的智慧.单片机内部的硬件结构都是固定的,无法改变,我们通过代码操作着寄存器的读写,来执行各种复杂的任务.FPGA的硬件结构并不像单片机一样是固定 ...

  3. Verilog代码和FPGA硬件的映射关系(二)

    大家可能会有这样的疑问,我们编写的Verilog代码最终会在FPGA上以怎样的映射关系来实现功能呢?我们以一个最简单的组合逻辑与门为例来向大家说明.RTL代码如下所示: //------------- ...

  4. Verilog代码和FPGA硬件的映射关系(五)

    既然我们可以指定寄存器放在IOB内,那我们同样也可以指定PLL的位置.首先要确保我们有多个PLL才行.如图1所示,我们所使用的EP4CE10F17C8芯片刚好有两个. 图 1 为了演示这个例子,我们使 ...

  5.  FPGA边沿检测Verilog代码

    FPGA边沿检测Verilog代码(上升沿,下降沿,双边沿) 实现思路:用两个一位寄存器直接异或可以实现 代码实现: ​ module edge_detect( input clk, input rs ...

  6. 学会使用Hdlbits网页版Verilog代码仿真验证平台

    给大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过“https://hdlbits.01xz.net/wiki/Main_Page” 地址链接进 ...

  7. ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系

    ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...

  8. hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系

    前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hi ...

  9. hibernate笔记--单(双)向的多对多映射关系

    在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...

随机推荐

  1. 剑指offer---05---用栈实现队列

    题意 给了两个栈去实现队列   分析 两个栈如下情况       1       2 4    3 这个时候就不能够把4插入到第二个弹出栈了否则弹出顺序出错. 所以这个时候就应该等第二个栈空了的时候再 ...

  2. OSChina 周一乱弹 —— 为什么人类和人工智能定要一战

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2018)请戳(这里) [今日歌曲] @小小编辑:推荐歌曲,又失恋了 - 花粥 <又失恋了>- 花 ...

  3. 演示:配置日志发送到syslog日志服务器

    演示目标:配置网络环境中的交换机和路由器将日志发送到syslog日志服务器. 演示环境:如下图10.54所示的演示环境. 演示背景:要求部署网络中的syslog服务器,集中的收集交换机S1和路由器R1 ...

  4. JavaScript实现折半查找(二分查找)

    一.问题描述: 在一个升序数组中,使用折半查找得到要查询的值的索引位置.如: var a=[1,2,3,4,5,6,7,8,9]; search(a,3);//返回2 search(a,1);//左边 ...

  5. SpringBoot集成Quartz实现定时任务

    1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考 ...

  6. php接口开发经验总结

    接口开发采用jwt方式验证: 接口开发最好留多几个返回方式,方便本地调用: 待更新.............

  7. [js进阶1]-数据类型

    基本数据类型 js 总的有7中数据类型,包括基本类型和引用类型 基本类型 6 种 number boolean string null undefiend symbol 前5种类型统称为原始类型 sy ...

  8. Qt 操作sql server数据库

    添加qtsql的库 连接数据库 QSqlDatabase_db = QSqlDatabase::addDatabase("QODBC"); _db.setHostName(); _ ...

  9. [hdu4513]常规dp

    题意:给一个长度为m的序列,从里面选出一些数,相对位置不发生变化,并满足a[i]=a[n-i],a[1]<a[2]<...<a[(n+1)/2],n是数的个数,求最大的n 思路:dp ...

  10. [codeforces-542-C]YY?

    链接:http://codeforces.com/problemset/problem/542/C 题意:对一个函数f(x),定义域[1,n], 令f(k,x) = f(f(f(f...f(x)))) ...