基于的平台是Vivado 2018.2

本文主要以一个简单的半加器加器(组合逻辑为例)学习vivado的综合,I/O配置的一些内容。

本人小白,记一些自己的理解。

任务:

  1. 分析Log文件。
  2. 布局I/O管脚
  3. 分析两个视图
  4. 分析约束.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

运行仿真结果如下:

显然这和我们的真值表是对应的。

以上部分属于基本操作,下面我们正式进入我们的任务:

  1. 分析综合后的Log文件:

    1. 首先我们run synthesis
    2. 综合结束后我们取消,先不进行下一步实现。
    3. Xilinx官方推荐我们在综合后,实现前进行IO布置和时钟约束。
    4. 下面我们来看生成的Log文件都写了些什么。
    5. 我们在① 的位置看到了我们的license文件的使用,当我们需要实现综合操作时,首先软件会检查我们是否获取了license。
      1. 从②我们可以看到,此时我们还没有添加约束文件(先不要管约束文件是干嘛的,这个约束文件就是.xdc文件)
      1. 从3可以看到,我们的是两输入,一个异或逻辑。
      2. 从3.1看到我们有(的DSP和BRAM资源的个数),这个并不是我们使用的个数。
        1. Block RAM是PL部分的存储器阵列,为了与DRAM(分布式RAM)区分开,所以叫块RAM。ZYNQ的每一个BRAM 36KB,7020的BRAM有140个(4.9M),7030有265个(9.3M),7045有545个(19.2M)。每一个BRAM都有两个共享数据的独立端口,当然是可以配置的,可用于片内数据缓存、FIFO缓冲。
        2. 原文:https://blog.csdn.net/u014485485/article/details/78882027
        3. 常见资源介绍
        4. :http://www.elecfans.com/dianzichangshi/20170517517040.html
      1. 从④我们可以看到,该模块使用了2个LUT,2个输入缓冲区(Input-Buff)A一个,B一个,和两个输出缓冲区(Output-Buff)S一个,C一个。
      1. 从5我们看到未使用black box。
      2. 通俗点讲输入LUT实现表达式X。就是推测EEPROM中的值,你可以画出X的对应真值表,应该不难。如图所示:
      3. 如果A=1,B=1,C=0,D=0那么X=1,以此类推,A,B,C,D控制门控开关,让其选通相应的函数值到X端。
      4. https://www.cnblogs.com/Dinging006/p/9512506.html

以上就完成了任务一的分析。

  1. 我们开始布局I/O

    1. 对I/O进行简单说明
      1. MRCC/SRCC:时钟
      2. User I/O:同样IO
      3. 被占用的 User I/O
      4. 电源(红色):VCCINT VCCBRAM VCCAUX VCCAUX_IO
      5. Config(与做配置相关的管脚)
    2. 我们进入约束界面(点击红色线)
    3. 会提示我们没有约束文件,是否要创建约束文件,我们取消。
    4. 进行I/O配置
      1. 通过①进入Package视图
      2. ②进行选中我们要进行布置的管脚
      3. 3是管脚对应的电平状态
      4. 常见电平标准:https://wenku.baidu.com/view/10365452f01dc281e53af0f6.html
    5. 我们放置在了这几个位置
    6. 放大后可以看到
    7. 我们以B为例,进行具体分析
      1. 接着在DEVICE视图下我们可以看到我们刚才设置的管脚的位置。
      2. 红色圈住的地方就是我们的I/O管脚
        1. 例如我们的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的更多相关文章

  1. SpriteBuilder改变布局后App运行出错代码排查

    原来整个关卡场景放在GameScene.ccb中,后来觉得移到专门的Level.ccb比较好. 移动过后编译运行,只要移动Player的胳膊发射子弹时,Xcode报错: g due to Chipmu ...

  2. 【Qt开发】QScrollArea添加布局后没有出现滚动条的解决方法

    [Qt开发]QScrollArea添加布局后没有出现滚动条的解决方法 标签:[Qt开发] 说明:尝试利用滚动区域显示多张图片,为了能够动态地往滚动区域贴图,为滚动区域设置了布局,然后通过布局来添加wi ...

  3. ios xib和代码的frame布局 iOSXib布局后代码修改约束的值

    如何修改autolayout 约束的值? 1 2 3 4 5 6 目前我已知的方法有5种 1.修改frame(有时候可能会不起作用,但可以做动画) 2.修改约束的float值 3.使用VisualFo ...

  4. iOSXib布局后代码修改约束的值

      如何修改autolayout 约束的值? 目前我已知的方法有5种 1.修改frame(有时候可能会不起作用,但可以做动画) 2.修改约束的float值 3.使用VisualFormat 语言 4. ...

  5. 使用gridlayout布局后,因某些原因又删除,并整理文件夹结构时,Unable to resolve target 'android-7'

    出现的问题 [2013-01-11 10:52:39 - gridlayout_v7] Unable to resolve target 'android-7' 事由:在一次做九宫格时.误使用了gri ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-工作流设计-表单布局

    系列目录 前言:这一节比较有趣.基本纯UI,但是不是很复杂 有了实现表单的打印和更加符合流程表单方式,我们必须自定义布局来适合业务场景打印!我们想要什么效果?看下图 (我们没有布局之前的表单和设置布局 ...

  7. 【HTML5&CSS3进阶学习02】Header的实现·CSS中的布局

    前言 我们在手机上布局一般是这个样子的: 其中头部对整个mobile的设计至关重要,而且坑也很多: ① 一般来说整个header是以fixed布局,fixed这个产物在移动端来说本身坑就非常多 ② 在 ...

  8. 布局包含Image和Title的UIButton

    UIButton中的titleEdgeInsets和imageEdgeInsets可以管理button中image和title的布局. 如果对其理解不够深入,用纯数字进行布局管理,经过不断的调试,还是 ...

  9. 基于淘宝弹性布局方案lib-flexible的问题研究

    上篇文章<淘宝弹性布局方案lib-flexible实践>结合一个简单的实例,说明了lib-flexible的基本用法,但是lib-flexible的这种适配方式在适配的时候会修改viewp ...

随机推荐

  1. 013.Oracle数据库,SUBSTR取子字符串

    /*Oracle数据库查询日期在两者之间*/ SELECT EXPIRE_DATE , SUBSTR(EXPIRE_DATE , , ) FROM ME_EO WHERE ( ISSUE_DATE B ...

  2. linux扩容空间,再扩容文件系统

    Linux磁盘空间进行扩容 参考博客 http://blog.csdn.net/dingchenxixi/article/details/50986472 http://blog.sina.com.c ...

  3. 2的n次幂

    位运算判断2的n次幂: 举个栗子,n = 8:则二进制表示就为1000,n-1则为 0111 取&刚好等于0 嘿嘿,巧妙吧. 再举个栗子,n = 7: 则二进制为 0111,n-1则为0110 ...

  4. HDU - 6195 cable cable cable

    题意:如下图,有K个光源,一个光源可同时照射一个显示屏,问从M个显示屏中任选K个,可以使每个显示屏都被不同光源照亮最少需要多少连接电缆. 分析:画图分析可知 1.选1~K个显示屏和选M-K+1~M个显 ...

  5. Jenkins实现自动打包,MAVEN打包,Shell脚本启动

    1.点击New任务 2.创建任务,输入项目名 3.输入描述等 4.选择Git或SVN 5.自动,定时打包 6.在Build下配置

  6. 自动填充IP地址

    在windows下的DOS窗口中 要利用Netsh命令,进入到DOS下的网络配置状态,就能实现各种网络配置. 进入IP设置模式 在DOS环境中,设置网络参数之前,必须先进入IP设置模式才可以.先打开系 ...

  7. 笔记本如何不按Fn键就能实现F键的功能

    笔记本的F1~F12键的附带功能如何改成 不用按Fn键就能实现F1~F12的功能 本人现在使用的是一款ThinkPad的本本,之前在台式机上愉快的玩耍的时候键盘上的F键直接按一下就可以实现相应的功能, ...

  8. Docker Python 例子

    版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...

  9. Newtonsoft.Json版本冲突

    如果项目中不同第三方类库分别使用了不同版本的Newtonsoft.Json,可以在配置文件中添加以下节点,将0.0.0.0-9.0.0.0此区间的Newtonsoft.Json使用全部强制指向到项目中 ...

  10. HDU - 5695 Gym Class (优先队列+拓扑排序)

    题意:有N个人,每个人的ID为1~N,部分同学A不希望部分同学B排在他之前,排好队之后,每个同学会找出包括自己在内的前方所有同学的最小ID,作为自己评价这堂课的分数.在满足这个前提的情况下,将N个人排 ...