基于的平台是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. 023、MySQL取文本长度取字符串长度

    #取文本长度,一个文字算1长度 SELECT CHAR_LENGTH('田攀520'); #UTF-8的数据库,值为5 #取文本长度,汉字算多个字符,数字和英文算一个字符 SELECT LENGTH( ...

  2. java List 去重方式及效率对比

    01 实现思路:使用两个for循环遍历集合所有元素,然后进行判断是否有相同元素,如果有,则去除.这种方式是大部分最先想到的,也是最简单的实现方式.其中,这种方式可以保证List集合原来的顺序不变. 代 ...

  3. 指定盘符获取u盘PID、VID、序列号等信息

    最近学习scsi和DeviceIoControl,下载了微软WDK一些例子,以下代码精简自Windows-driver-samples-master\storage\tools\spti\src\sp ...

  4. <老古董>线性支持向量机中的硬间隔(hard margin)和软间隔(soft margin)是什么

    _________________________________________________________________________________________________ Th ...

  5. 二十六、SAP中通过FORMAT COLOR来设置文字背景颜色

    一.代码如下 二.效果如下

  6. Elasticsearch Query DSL(查询语言)

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  7. PHP操作MYSQL数据库(10.11 第十九天)

    一.连接及断开数据库 1.使用mysqli 扩展(推荐),只针对mysql数据库 面向对象的方式 $con = new mysqli(ip,user,password); if($con->co ...

  8. UVA - 10003 Cutting Sticks(切木棍)(dp)

    题意:有一根长度为L(L<1000)的棍子,还有n(n < 50)个切割点的位置(按照从小到大排列).你的任务是在这些切割点的位置处把棍子切成n+1部分,使得总切割费用最小.每次切割的费用 ...

  9. Day3-T3

    原题目 Describe:又是这种最大子矩阵捆绑一堆条件的题 code: #pragma GCC optimize(2) #include<bits/stdc++.h> #define j ...

  10. sql server 日期时间数据类型

    1.日期和时间数据类型 (1)在sqlserver 2008之前,SQL Server 支持datetime 和 smalldatetime 两种日期时间数据类型.这两种数据类型日期和时间是不可分割的 ...