当我们进行综合和I/O布局后会发生什么QwQ
基于的平台是Vivado 2018.2
本文主要以一个简单的半加器加器(组合逻辑为例)学习vivado的综合,I/O配置的一些内容。
本人小白,记一些自己的理解。
任务:
- 分析Log文件。
- 布局I/O管脚
- 分析两个视图
- 分析约束.xdc文件
首先介绍半加器:
链接地址:http://www.elecfans.com/dianzichangshi/20170816539743.html
我们尽关注半加器的逻辑结构:
假设输入端子为A,B
输出端子为S
进位端子为C
则我们有 S = A xor B;C = A & B;
那么我们去写我们的verilog代码(vivado的使用会再今后进行简单说明。我们假设已经会了怎么新建工程。)
半加器代码如下:
module half_add(
input A,
input B,
output S,
output C
);
assign S = A ^ B;
assign C = A & B;
endmodule
我们按照这张真值表编写testbench文件:
`timescale 1ns / 1ps
module half_sim();
reg data_1;
reg data_2;
wire S;
wire C;
half_add test(
.A(data_1),
.B(data_2),
.S(S),
.C(C)
);
initial begin
#200;
data_1 = 1'b0;
data_2 = 1'b0;
#200;
data_1 = 1'b0;
data_2 = 1'b1;
#200;
data_1 = 1'b1;
data_2 = 1'b0;
#200;
data_1 = 1'b1;
data_2 = 1'b1;
#200;
$finish;
end
endmodule
运行仿真结果如下:
显然这和我们的真值表是对应的。
以上部分属于基本操作,下面我们正式进入我们的任务:
- 分析综合后的Log文件:
- 首先我们run synthesis
- 综合结束后我们取消,先不进行下一步实现。
- Xilinx官方推荐我们在综合后,实现前进行IO布置和时钟约束。
- 下面我们来看生成的Log文件都写了些什么。
- 我们在① 的位置看到了我们的license文件的使用,当我们需要实现综合操作时,首先软件会检查我们是否获取了license。
-
- 从②我们可以看到,此时我们还没有添加约束文件(先不要管约束文件是干嘛的,这个约束文件就是.xdc文件)
- 从3可以看到,我们的是两输入,一个异或逻辑。
- 从3.1看到我们有(的DSP和BRAM资源的个数),这个并不是我们使用的个数。
- Block RAM是PL部分的存储器阵列,为了与DRAM(分布式RAM)区分开,所以叫块RAM。ZYNQ的每一个BRAM 36KB,7020的BRAM有140个(4.9M),7030有265个(9.3M),7045有545个(19.2M)。每一个BRAM都有两个共享数据的独立端口,当然是可以配置的,可用于片内数据缓存、FIFO缓冲。
- 原文:https://blog.csdn.net/u014485485/article/details/78882027
- 常见资源介绍
- :http://www.elecfans.com/dianzichangshi/20170517517040.html
-
- 从④我们可以看到,该模块使用了2个LUT,2个输入缓冲区(Input-Buff)A一个,B一个,和两个输出缓冲区(Output-Buff)S一个,C一个。
- 从5我们看到未使用black box。
- 通俗点讲输入LUT实现表达式X。就是推测EEPROM中的值,你可以画出X的对应真值表,应该不难。如图所示:
- 如果A=1,B=1,C=0,D=0那么X=1,以此类推,A,B,C,D控制门控开关,让其选通相应的函数值到X端。
- https://www.cnblogs.com/Dinging006/p/9512506.html
以上就完成了任务一的分析。
- 我们开始布局I/O
- 对I/O进行简单说明
-
- MRCC/SRCC:时钟
- User I/O:同样IO
- 被占用的 User I/O
- 电源(红色):VCCINT VCCBRAM VCCAUX VCCAUX_IO
- Config(与做配置相关的管脚)
- 我们进入约束界面(点击红色线)
- 会提示我们没有约束文件,是否要创建约束文件,我们取消。
- 进行I/O配置
-
- 通过①进入Package视图
- ②进行选中我们要进行布置的管脚
- 3是管脚对应的电平状态
- 常见电平标准:https://wenku.baidu.com/view/10365452f01dc281e53af0f6.html
- 我们放置在了这几个位置
- 放大后可以看到
- 我们以B为例,进行具体分析
- 接着在DEVICE视图下我们可以看到我们刚才设置的管脚的位置。
- 红色圈住的地方就是我们的I/O管脚
- 例如我们的S管脚。
下面我们implement 并观察生成的.xdc文件
set_property :设置属性
PROHIBIT :禁止使用(true表示确认禁止使用)
[get_sites B13]:寻找到B13文件。
set_property PROHIBIT true [get_sites B13]
set_property PROHIBIT true [get_sites B3]
set_property PROHIBIT true [get_sites D10]
set_property PROHIBIT true [get_sites D12]
set_property PROHIBIT true [get_sites D2]
set_property PROHIBIT true [get_sites E4]
set_property PROHIBIT true [get_sites F1]
set_property PROHIBIT true [get_sites F11]
set_property PROHIBIT true [get_sites G11]
set_property PROHIBIT true [get_sites G8]
set_property PROHIBIT true [get_sites H7]
set_property PROHIBIT true [get_sites J12]
set_property PROHIBIT true [get_sites J2]
set_property PROHIBIT true [get_sites K4]
set_property PROHIBIT true [get_sites L1]
set_property PROHIBIT true [get_sites L5]
set_property PROHIBIT true [get_sites M13]
set_property PROHIBIT true [get_sites M3]
set_property PROHIBIT true [get_sites N10]
set_property PROHIBIT true [get_sites P5]
set_property IOSTANDARD LVCMOS18 [get_ports C]
set_property IOSTANDARD LVCMOS18 [get_ports B]
set_property IOSTANDARD LVCMOS18 [get_ports S]
set_property PACKAGE_PIN A2 [get_ports A]
set_property PACKAGE_PIN A3 [get_ports B]
set_property PACKAGE_PIN A4 [get_ports C]
set_property PACKAGE_PIN A5 [get_ports S]
set_property IOSTANDARD LVCMOS18 [get_ports A]
我们进行implement操作之后就可以看见电路中的实现
左图我们看到两个LUT2实际上是同一个。
这个坑的内容以后会慢慢完善。
当我们进行综合和I/O布局后会发生什么QwQ的更多相关文章
- SpriteBuilder改变布局后App运行出错代码排查
原来整个关卡场景放在GameScene.ccb中,后来觉得移到专门的Level.ccb比较好. 移动过后编译运行,只要移动Player的胳膊发射子弹时,Xcode报错: g due to Chipmu ...
- 【Qt开发】QScrollArea添加布局后没有出现滚动条的解决方法
[Qt开发]QScrollArea添加布局后没有出现滚动条的解决方法 标签:[Qt开发] 说明:尝试利用滚动区域显示多张图片,为了能够动态地往滚动区域贴图,为滚动区域设置了布局,然后通过布局来添加wi ...
- ios xib和代码的frame布局 iOSXib布局后代码修改约束的值
如何修改autolayout 约束的值? 1 2 3 4 5 6 目前我已知的方法有5种 1.修改frame(有时候可能会不起作用,但可以做动画) 2.修改约束的float值 3.使用VisualFo ...
- iOSXib布局后代码修改约束的值
如何修改autolayout 约束的值? 目前我已知的方法有5种 1.修改frame(有时候可能会不起作用,但可以做动画) 2.修改约束的float值 3.使用VisualFormat 语言 4. ...
- 使用gridlayout布局后,因某些原因又删除,并整理文件夹结构时,Unable to resolve target 'android-7'
出现的问题 [2013-01-11 10:52:39 - gridlayout_v7] Unable to resolve target 'android-7' 事由:在一次做九宫格时.误使用了gri ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-工作流设计-表单布局
系列目录 前言:这一节比较有趣.基本纯UI,但是不是很复杂 有了实现表单的打印和更加符合流程表单方式,我们必须自定义布局来适合业务场景打印!我们想要什么效果?看下图 (我们没有布局之前的表单和设置布局 ...
- 【HTML5&CSS3进阶学习02】Header的实现·CSS中的布局
前言 我们在手机上布局一般是这个样子的: 其中头部对整个mobile的设计至关重要,而且坑也很多: ① 一般来说整个header是以fixed布局,fixed这个产物在移动端来说本身坑就非常多 ② 在 ...
- 布局包含Image和Title的UIButton
UIButton中的titleEdgeInsets和imageEdgeInsets可以管理button中image和title的布局. 如果对其理解不够深入,用纯数字进行布局管理,经过不断的调试,还是 ...
- 基于淘宝弹性布局方案lib-flexible的问题研究
上篇文章<淘宝弹性布局方案lib-flexible实践>结合一个简单的实例,说明了lib-flexible的基本用法,但是lib-flexible的这种适配方式在适配的时候会修改viewp ...
随机推荐
- eshop3-JDK 安装
1. 下载软件:http://learning.happymmall.com/ 2. 清理系统默认的JDK rpm -qa | grep jdk 查看已经安装的JDK,然后卸载 查看的结果:jdk1 ...
- Django(十二)视图--利用jquery从后台发送ajax请求并处理、ajax登录案例
一.Ajax基本概念 [参考]:https://www.runoob.com/jquery/jquery-ajax-intro.html 异步的javascript.在不全部加载某一个页面部的情况下, ...
- 《ES6标准入门》(阮一峰)--11.对象的新增方法
1.Object.is() ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0.J ...
- POJ 1195:Mobile phones 二维树状数组
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 16893 Accepted: 7789 De ...
- WTL之手动编写框架窗口
新版博客已经搭建好了,有问题请访问 htt://www.crazydebug.com 本人是一个实践主义者,不罗嗦上一篇工程搭建好以后,这一篇就开始写代码,写之前再说几句,如果你熟悉MFC分析过MFC ...
- mapper.xml实现oracle的分页语句
当我们用常规方法进行分页查询时,虽然在数据库可以分页查询出来数据, 如下语句 <!-- 分页查询所有 --> <select id="findAllPage" r ...
- 深入浅出KNN算法
概述 K最近邻(kNN,k-NearestNeighbor)分类算法 所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. kNN算法的核心思想是如果一个样本在特征 ...
- skLearn 支持向量机
## 版权所有,转帖注明出处 章节 SciKit-Learn 加载数据集 SciKit-Learn 数据集基本信息 SciKit-Learn 使用matplotlib可视化数据 SciKit-Lear ...
- kafka管理神器-kafkamanager
好久没发过kafka的文章了,今天整理一下kafka-manager神器. java环境要求 jdk8 kafkamanager源码下载 https://github.com/yahoo/kafka- ...
- SpringMVC: Ajax技术
SpringMVC:Ajax技术 简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 是一种在无需重新加载整个网 ...