阶段2 菜鸟阶段 FPGA基本设计方法_第1页
阶段2 菜鸟阶段 FPGA基本设计方法_第2页
阶段2 菜鸟阶段 FPGA基本设计方法_第3页
阶段2 菜鸟阶段 FPGA基本设计方法_第4页
阶段2 菜鸟阶段 FPGA基本设计方法_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一口吃不成一个胖子 FPGA 学习之 目录目录 1 杂记 3 1 1 FPGA 中未赋初值寄存器的值 3 1 2 关于 initial 在仿真中的应用 3 1 3 仿真程序控制的变量 3 1 4 错误汇总 3 1 5 Inout 口的编写办法 3 1 6 Component 相当于 assign 不能用在什么 always 模块中 7 1 7 If else 不完全配套时 7 1 8 X 实际上是 0 7 1 9 关于 BRAM BLOCK RAM 7 1 10 一个 FPGA 设计最大能工作的频率 7 1 11 DCM 不能直接接管脚 输出一般要先过一个 buf 再输出 8 1 12 FPGA 中不同 BANK 区别 DSP 概念 BUFG 8 1 13 全局时钟只能跑一半 DCM 输出时钟一般能跑 1 4 整芯片 8 1 14 把 F68013 PC FPGA 程序最大工作频率提高 方法 8 1 15 单词翻译 9 1 16 时序报告解读及解决 9 1 17 关于 FPGA Editor 10 1 18 未用管脚电平设置 11 2 关于 Chip Scop 11 2 1 简介 11 2 2 关于常用核 12 2 3 重要操作 13 2 4 缺点 13 2 5 使用说明 13 3 Modesim 与 ISE 联合仿真 13 一口吃不成一个胖子 3 1 安装方法 照下面操作即可实现联合仿真 13 3 1 1 安装注意事项 14 3 2 主要的优点 14 3 2 1 关于波形比较 14 3 2 2 数据流窗口调试 15 3 2 3 代码覆盖率 这功能不错 15 4 BUFG IBUFG BUFGP IBUFGDS 等含义以及使用 16 4 1 全局时钟资源的使用方法 五种 17 4 2 全局时钟资源的例化方法 18 4 3 详解 IBUFG IBUFGDS BUFG 用法 18 5 I2C 网上程序精读 尽快抽空 18 5 1 关于上复位 18 一口吃不成一个胖子 FPGA 设计 1 杂记 杂记 1 1 FPGA 中未赋初值寄存器的值中未赋初值寄存器的值 在硬件平台中 当系统上电后 信号电平不是 1 就是 0 不会存在 X 因此 设计中用到的寄存 器如果在没有初始化的情况下 在不同的平台上 其初始状态是不一定的 存在两种可能全 0 或者 全 1 而在 XILINx 公司的 FPGA CPLD 上 默认为 0 1 2 关于关于 initial 在仿真中的应用在仿真中的应用 在实验中发现 硬件输出分频器已经获得了成功 但是仿真的结果却始终不对 老是输出 X 原因如下 在不同的平台中 未赋于初值的寄存器的初始值不一样 一般情况下有人加一个复位信 号 这个信号用来对未赋值的信号进行下初始等初始操作 但是 有时不用 这时 我们就必须要 加个 initial 语句 虽然它是不可综合的 但是 在仿真操作时会对未赋值变量赋于一个初值 这时 仿真才可以正确的运行 1 3 仿真程序控制的变量仿真程序控制的变量 还要注意一点在仿真程序中 只能控制的是输入变量 而原程序中的中间变量和输出变量都不 是受人工控制的 1 4 错误汇总错误汇总 Cannot mix blocking and non blocking assignments on signal i 这种错误一般是因为程序中变量 i 阻塞和非阻塞一起使用了 解决的办法不要只看报错的那一行 而 是要把这个变量的上下文全找一下 是否有混合使用的地方 Always 程序块能够直接在 符号后面放置字符 在这种情况下 模拟器创建一个隐含的灵敏度列表 它包含了所有可能会影响到过程语句产生结果的那些信号 而同时 一个不完全灵敏度列表的 组 合逻辑 其行为将具有时序特性 就是把所有的输入的变量全列进去 就是把所有的输入的变量全列进去 1 5 Inout 口的编写办法口的编写办法 一口吃不成一个胖子 下面是在网上找的一篇资料 是一个关于 IO 口的程序及测试程序的书写的完整例子 不错 先谈下自己的体会 首先 IO 口要做为输出口时 此时一定要用 assign 语句让 IO 口输出高阻态 在做测试程序时 也要 用到 assign 但是 assign 里面的判断语句的符号要反过来 其中 inner port 与芯片内部其他逻辑相连 outer port 为芯片外部管脚 out en 用于控制双向端口的方 向 out en 为 1 时 端口为输出方向 out en 为 0 时 端口为输入方向 assign a s 2 0 4 ibus 8 bz 如上原程序中 s 为 4 时输出高阻 同时 IO 口为输入 不为 4 时 为输出 则对应测试程序为 assign a s 2 0 4 a t 8 bz 可以发现 s 为 4 时 a 口数据为 a t 也就是假定的外界的输入 此时 a 口为输入口 S 不为 4 时 为 高阻态 与原程序中比较不难发现其实相当于 Z input out en inout 7 0 inner port inout 7 0 outer port assign outer port out en 1 inner port 8 hzz assign inner port out en 0 outer port 8 hzz endmodule 用 VHDL 语言描述双向端口如下 library ieee use IEEE STD LOGIC 1164 ALL entity bidirection io is port inner port inout std logic vector 7 downto 0 out en in std logic outer port inout std logic vector 7 downto 0 end bidirection io architecture behavioral of bidirection io is begin 一口吃不成一个胖子 outer port Z inner port Z end behavioral 仿真仿真时需要验证双向端口能正确输出数据 以及正确读入数据 因此需要驱动 out en 端口 当 out e n 端口为 1 时 testbench 驱动 inner port 端口 然后检查 outer port 端口输出的数据是否正确 当 out en 端口为 0 时 testbench 驱动 outer port 端口 然后检查 inner port 端口读入的数据是否正确 由于 inner p ort 和 outer port 端口都是双向端口 在 VHDL 和 Verilog 语言中都用 inout 定义 因此驱动方法与单向端 口有所不同 这是一个 self checking testbench 可以自动检查仿真仿真结果是否正确 并在 Modelsim 控制台上打印出 提示信息 图中 Monitor 完成信号采样 结果自动比较的功能 testbench 的工作过程为 1 out en 1 时 双向端口处于输出状态 testbench 给 inner port tb reg 信号赋值 然后读取 outer po rt tb wire 的值 如果两者一致 双向端口工作正常 2 out en 0 时 双向端口处于输如状态 testbench 给 outer port tb reg 信号赋值 然后读取 inner po rt tb wire 的值 如果两者一致 双向端口工作正常 用 Verilog 代码编写的 testbench 如下 其中使用了自动结果比较 随机化激励产生等技术 timescale 1ns 10ps module tb reg 7 0 inner port tb reg wire 7 0 inner port tb wire reg 7 0 outer port tb reg wire 7 0 outer port tb wire reg out en tb integer i initial begin out en tb 0 inner port tb reg 0 outer port tb reg 0 i 0 repeat 20 begin 50 i random out en tb i 0 randomize out en tb inner port tb reg random randomize data outer port tb reg random end end drive the ports connecting to bidirction io 一口吃不成一个胖子 assign inner port tb wire out en tb 1 inne r port tb reg 8 hzz assign outer port tb wire out en tb 0 oute r port tb reg 8 hzz instatiate the bidirction io module bidirection io bidirection io inst inner port in ner port tb wire out en out en tb outer port outer port tb wire monitor always out en tb inner port tb wire outer po rt tb wire begin 1 if outer port tb wire inner port tb wire begin display n time t time display OK out en d out en tb display OK outer port tb wire d inner po rt tb wire d outer port tb wire inner port tb wire end else begin display n time t time display ERROR out en d out en tb display ERROR outer port tb wire inne r port tb wire display ERROR outer port tb wire d in ner port tb wire d outer port tb wire inner port tb wire end end endmodule Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 1 6 Component 相当于相当于 assign 不能用在什么不能用在什么 always 模块中模块中 1 7 If else 不完全配套时不完全配套时 有时会生成一个锁存器 以便 在 always 模块的所有逻辑路径都没有给出赋值的情况下 用来保 存前一个级联输出 由于这种情况不会发生 所以你可能认为没有什么损坏 但是扮演出锁存器会 增加最后综合出来的电路规模和延迟 尽管你不需要这个锁存器 1 8 X 实际上是实际上是 0 对某种情况的输出不关心时 就把把对应的输出设置为 x 而实际上 Xilinx HDL 编译器似乎把 X 输 出当成 0 所以也不会提高设计电路的性能 1 9 关于关于 BRAM BLOCK RAM 大多数 FPGA 都具有内嵌的块 RAM 这大大的拓展了 FPGA 的应用范围和灵活 性 块 RAM 可被配置为单端口 RAM 双端口 RAM 内容地址存储器 CAM 以及 FIFO 等常用存储结构 单片块 RAM 的容量为 18Kbit 即位宽为 18bit 深度为 1024 可以根据需要改变 其位宽和深度 但是要记住两个原则 首先 修改后的容量 位宽 深度 不能大于 18Kbit 其次 位宽最大不能超过 36bit 当然可以将多片 RAM 级联起来形成更大的 RAM 此时只受限于芯片内块 RAM 的数量 而不受上面的两条原则的约束 1 10 一个一个 FPGA 设计最大能工作的频率设计最大能工作的频率 当添加时序约束后 用 constraints editor 给时钟添加约束 然后布局布线 然后在报 告文件中的 Timing constraint 中就可以直接看到你的设计是否能达到你的要求 以及最高 能跑到多大的频率 而同时 报告中还会给出不满足条件的线路中的延时情况 它主要是由最大延时路径来控制 而在 PlaneAhead 中可以直接看到最大延时路径的网 络是哪些 也可以由条状图输出大部分网络的延时信息 从而你可以通过 Pblock 限定其布 局布线的位置来进行约束后再布线 可能最后最大工作频率会有所提高 Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 1 11 DCM 不能直接接管脚 输出一般要先过一个不能直接接管脚 输出一般要先过一个 buf 再输出 再输出 1 12 FPGA 中不同中不同 BANK 区别 区别 DSP 概念 概念 BUFG 1 13 全局时钟只能跑一半 全局时钟只能跑一半 DCM 输出时钟一般能跑输出时钟一般能跑 1 4 整芯片 整芯片 1 14 把把 F68013 PC FPGA 程序最大工作频率提高 方法 程序最大工作频率提高 方法 1 给时钟添加约束 这样它跑的时候会对时钟相关线路特别对待 这样有利于提高最大 工作时钟频率 实现完成后 在 design summary report static timing 中会给出不满足 时钟约束要求的线路是哪些 同时会给出该设计支持的最大工作频率 2 在此基础上还有可能提高设计最大工作频率 打开 Plane ahead file new project specify synthesized edif or ngc netlist 导入 ISE 中设计的经过综合后的网表文件 并新 建一个工程 3 进入 Plane ahead 后 可以 tools creat multip runs 然后在根据提示一步步的创建该项 目文件的多种实现方式 然后 implement 4 完成上面操作后 就可以对上面设定的多种实现的结果的每一种的实现情况进行查询 了 从其报告文件中也可以发现其最大延时路径情况 同时还有它的最大能工作的频 率 但是 如果上面的各种方案都不能满足你的要求的话 5 找到最大延时路径 可以通过 slack histogram 打开延时条状图条状图中最高的那一条也就是本设计 中的延时最长的关键路径了 选中对应路径 也可以通过 Timing result 直接看到未满足条件的结果 也是选中未满足条件的 路径 你可以选中该路径或者网络 右击选择 schematic 就会在打开这条去路的原理图 从而可以方便分析造成延时过大的原因 然后就可以在 Device 中看到你选中的那些路径了 这时 你可以通过画一个 pblock 把对应这些关键路径的布局布线位置合理的分配 然后就再实现一次看看是否 有所提高 针对这里我说下我的感受 TMD 试了 N 次 最后结果各不一样 时好时 坏的 反正 这个 Pblock 的位置不好搞的很哪 这里要说明的是 好的设计是设计出来的 比如我本次程序的设计中就设计的很 Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 差劲 在分频产生 19200 的时钟售的时候 用到了一个 integer 型的 计数达 6000 多 的计数器 而计数器在实现的时候我感觉它是通过一个串行加法器来实现的 而这样 做直接的结果就是经过了一大串的组合逻辑 最后才输出 而这样带来的组合逻辑延 时 以及布线延时就很大了 要从根本上提高设计的工作频率应该从设计上下手 比如上个设计中我使用 200M 的主时钟 经 DCM 后 时序报告中没有时序的警告或者不满足的地方 也即 让系统达到了 200M 的工作频率 1 15 单词翻译单词翻译 Slack 裕量 Skew 偏移 时钟偏移时常用到这个词 LVDS Low votage Differential Signaling 1 16 时序报告解读及解决时序报告解读及解决 时序原因一般三类 布局较差 逻辑级数过多 信号扇出过多 解决方法 解决方法 布局较差布局较差 1 高速布线工具的努力程序 2 利用布局布线工具的特别努力程序 3 利用区域约束 4 自用 FPGA EDITOR 优化布线 尽可能小地降低走线延迟 逻辑级数过多逻辑级数过多 修改代码 1 流水线技术 在组合逻辑中插入寄存器 简化原有的逻辑结构 2 好的编码习惯 不要嵌套使用 IF 或者 IF case 尽量使用 CASE 信号扇出信号扇出 1 通过逻辑复制的方法来降低信号的高扇出 可以 HDL 代码中手动复制 或者通过在综合工具中设置来达到目的 2 利用区域约束 把相关逻辑放在一起 当然本方法限于高级用户 结论 结论 时序约束只是一个提高设计时序的辅助手段 有一定效果 但最终仍需设计人员通过 Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 时序分析器的反馈结果来反复优化代码才能实现预期的目标 实验中我加入了一个 DCM 然后呢 每一级输入为 200M DIV16 输出第一级 DCM 然后 DIV8 以及 FX11 54 输出 得到的静态报告如下 从上面可以看出 输入为 200M 且第一次 16 分步 时序要求都要求了条件 可以从上图看出 第一级 DCM 分步后最大频率能达到 50M 其中下面这边支路满足时 钟条件 而且时钟裕量非常大 77 87 可以看出 该线路的扇出并不大 才 1 总延时为 1 417 其中逻辑延时较大 布线延 时较小 如果有问题 应该集中搞搞逻辑延时 其逻辑级数应该比较深 1 17 关于关于 FPGA Editor ISE 中的实现工具提供了功能强大的自动布线功能 但在一些高级设计中 仍然需要 对某些关键路径采用手动布线才能达到设计要求 FPGA editor 就是手动的底层布线功能 工具 可以设计人员提供丰富的 FPGA 底层编辑器 现在用的上的 就是 1 可以用来修改 CHIP scope 的 ILA 核的连线 而不用经过重新的编译以及布局布线 只需要在 FPGA editor 中重新配置即可 Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 Tools ILA 进行修改 2 可以用来添加探针 使设计人员快速鉴别和发送内部信号给未被占用的 IO 引脚 一旦信号发送给了引脚 通过外部测试设备就可以观察该内部信号的实时活动情 况 Tools probs add 1 18 未用管脚电平设置未用管脚电平设置 在 ISE 中选中工程顶层文件后 在 genrate programming file 上点击鼠标右键 然后 点击 properties 打开属性配置窗口 在窗口的左侧选择 configurate opinions 里面有一 项 unused IOB pins 通过它右侧的下拉选项就可以选择对未使用的管脚进行处理了 2 关于 关于 Chip Scop 2 1 简介简介 教材在这里 它可以将逻辑分析仪 总线分析器和虚拟 IO 等逻辑直接插入设计中 可查看任何内 部信号 包括嵌入式软或硬件以及高速串行 IO 模块 PC 和芯片之间的 JTAG 通信电缆有一定的要求 目前支持 1 Platform Cable Usb 2 Parallel Cable IV 3 MultiPRO JTAG Mode only Chipscope 是 XILINX 推出的一款在线调试软件 价格便宜 通过它完全可以脱离传统 逻辑分析仪 太贵 来调时序 观察 FPGA 内部的任何信号 触发条件 数据宽度和深度等 的设置也非常方便 但是肯定也存在不足 比如速度和数据量方面 Chipscope 本身是一个 逻辑分析仪 主要用于在上板测试过程中采集并观察芯片内部信号 以便于调试 它的原理是 在你综合完的网表里插入用于采集数据的 core 包括 ILA 和 ICON 插 入的方式可以用 core inserter 也可以用 core generator 只不过后者需要在源代码中实例化 用 core inserter 更为快捷 基本上就是选择你要观察的信号以及触发源 时钟等 然后运行 Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 之后会自动生成一个新的网表文件 再用这个网表在 ISE 里面进行布局布线 生成下载文 件 通过 JTAG 方式下载到芯片里运行 在芯片运行的过程中 如果你选择的触发源发生 跳变 或满足触发条件时 芯片里的 core 会将你要观察的信号采集并存储在芯片内的 RAM 也可以是 FF 中 然后通过 JTAG 口将采集到的信号上载到 PC 最后在 PC 的 chipscope analyzer 的界面中以波形的方式显示出来 因此你就能看到芯片里的信号波形 我们平时都是使用 Chipscope 的 core inserter 方式来往我们的工程里面植入 Chipscope 核 凡事都是利弊相生的 XILINX 的 Chipscope core inserter 工具帮你便捷地把 core 植入 到你的工程里面 那么存在一定的弊端 那就是编译时间被延长得很长 而且每次编译过 程中 都会根据你的 cdc 工程文件重新生成一次 ICON ILA 内核网表 再重新编译整个工 程 那么编译时间就不可避免地被延长了 所以 如果要采集到你所要的信号波形 首先是你的触发条件被满足 chipscope 不会 去改变你的原始设计中的信号 只对他们作采集 总结来说 chipscope 是利用植入 FPGA 的两个 core ILA 和 ICON 利用 JTAG 数据 线传回数据的方式来观察 调试设计的 2 2 关于常用核关于常用核 CHIPSCOPEPRO 提供了 7 类不同的核资源 其中 ICON 核 ILA 核 VIO 核及 ATC2 核获得了广泛应用 ICON 核 核 Integrated controller 所有的核都需要通过 JTAG 电缆完成计算机和芯片的通信 在 CHIPSCOP PRO 中 只 有 ICON 核具备和 JTAG 边界扫描端口通信的能力 因此它是必不可少的核 ILA 核 核 Integrated logic analyzer ILA 核提供触发和跟踪功能 根据用户设置的触发条件捕获数据 然后在 ICON 控制 下 通过边界扫描口将数据传输到 PC 机上 最后在 ANALYZER 中显示波形 VIO 核 核 Vitual input output 虚拟输入 输出核用于实时监控和驱动 FPGA 内部的信号 可以观测 FPGA 设计中任 意信号的输出结果 以及添加虚拟输入 如 DIP 开关 按键等 且不战胜块 RAM ATC2 核 核 Angilent Trace 它由 xilinx 公司和 Aglient 合作开发 适配于 Agilent 最新一代的逻辑分析器 联合完 成调试捕获 允许逻辑分析仪访问 FPGA 内部设计中任何一点人网表 提供更深的捕获深 Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 度 更复杂的捕获设置 它可以为每个信号提供 2MB 的捕获深度 是 ILA 深度的 60 倍 此外最多允许在 FPGA 内部添加 64 个观测信号组 和逻辑分析仪链接数据最多达 128 管 脚 大的捕获深度以及多的观测信号对于查找设计故障原因是非常有用的 2 3 重要操作重要操作 综合工程后在 ISE 工程中右键 Add New Souce 选择 chipscope definition connection file Chipscope pro 只能分析 FPGA 设计的内部信号 因此不能直接连接输入信号的网表 所以输入信号网表全部以灰色表示 如果要采样输入信号 则可通过连接其输入缓冲 信号来实现 时钟信号选择相应的 BUFGP 普通信号选择相应的 IBUF 2 4 缺点缺点 经过使用后我觉得 其深度太浅 只能记录那么点数据 16384 还好 触发条件是 可以自己控制的 2 5 使用说明使用说明 Add new source ChipScope definition and connection File 输入文件名 在工程中添加 Chipscope 双击打开该文件 配置 chipscope 配置完后 编译 布局布线 打开 Chipscope device config 双击 trigger setup 运行就 OK 了 3 Modesim 与与 ISE 联合仿真联合仿真 3 1 安装方法 照下面操作即可实现联合仿真安装方法 照下面操作即可实现联合仿真 在生成 modesim ini 文件之前最好先把 EDITER PREFERENCE INTEGRATED TOOL 里面的综合工具的路径先修改了 1 直接找到 E Xilinx 11 1 ISE bin nt compxlib exe 根据自己的安装路径来找 打 开 compxlib exe 一路默认确定即可 这个很漫长 一开始一直是 0 我还以为没有运 行 后来等了好久 突然之间变成 9 确信这个没有问题了 好像大概运行了半个多小 时吧 才完事 没看 无线通信 FPGA 设计 这本书的时候我还以为这样就好了呢 调用 Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 了一下发现还是找不到库 接下来是那本书上说的第二步 2 在 Xilinx 本地库编译成功之后 在相应的目录下会自动生成 modelsim ini 文件 用任何一个文本编辑器将该文件中 Library 目录下 除 others 以外 的内容添加到硬盘上 相应的另外的 Modelsim 安装目录下同名 modelsim ini 文件中的相应 Library 位置 我找了 一下 发现 modelsim ini 中没有 others 就直接把刚才生成的 modelsim ini 直接复制到 Modelsim 安装目录下了 将原来的 modelsim ini 覆盖掉了 为了安全起见 你可以先把 Modelsim 安装目录下的 modelsim ini 复制到另外的位置 然后再 ISE 中调用了一下 Modelsim 就好使了 注意 网上的那些新建库 然后编译库的那些方法 我都试了 可就是不好使 不知 道为什么 有兴趣的话你可以试一下 说不定就好使了 反正我没有整好使 之后 的话就简单了 像在 ISE 中进行仿真一样 编好测试文件后 进入 simulatin 面 板 你会惊喜的发现 突然低下不是 ISE 自己的仿真器了 而是 MODOLESIM 另外右边 还多了几个仿真的选项前仿真 后仿真 或者其它 3 1 1 安装注意事项安装注意事项 不知道为什么 我把 ISE12 1 中生成的 MODESIM INI 直接覆盖或者修改到 MODESIM 安装目录下时 12 1 总是不能正确的仿真 而 11 4 可以 更奇怪的是 我用 11 4 生成的 MODESIM INI 修改 MODESIM 安装目录下的该文件后 12 1 也可以用了 3 2 主要的优点主要的优点 晕了 ISE 自带的仿真工具和 MODSIM 中的仿真工具在仿真的速度上根本就不是一个 等级 快了 N 倍 反正就是快多了 在较小的设计中或许 ISE 还能满足要求 如果设计复 杂的话 MODESIM 的优点就太明显了 MODESIM 可能对仿真的处理更准确些 在针对 FPGA 68013 这个项目的仿真中 ISE 的仿真中 START T 信号是一串固定的 快速变化的信号 但是呢 在 MODESIM 中它就 是一根红线 表示不确定 而实际用示波器进行测试时其实也是不确定的 它的值可能多 种变化 上面的结论都是从一个项目中得出的 不一定准确 3 2 1 关于波形比较关于波形比较 Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 按照 1 中把波形产生后 首先 对综合后波形进行存储为 WLF 文件 方法如下 FILE DATASET 选中当前仿真文件 SIM Vsim wlf 点击 save as 命名并保存 之后布局 布线 之后再打开 MODESIM 进行比较 方法如下 Tools wave compare compare wizard 设置完成后 TOOLS Wave form compare start comparison 就可以看到其结果了 在结果中 相比较的两个波形不同的地方会用红色表示 3 2 2 数据流窗口调试数据流窗口调试 其实我觉得没什么用 因为 看其数据图也看不出到底是哪的代码出了问题 先记录如下 以后再来深究 数据流窗口的最大用途是用来进行信号跟踪 方便查找错误的根源所在 这在布局布 线后仿真作用中非常明显 方法如下 1 通过 ISE 进入 MODESIM 仿真 2IEW dataflow 打开数据流窗口后 3还是要全速进行仿真 发现你感兴趣的信号后 双击 会在 dataflow 窗口中出现一堆 逻辑符号 之后你就可以 trace chase x 一直查找到导制你的信号变成 X 的根源为止 3 2 3 代码覆盖率 这功能不错代码覆盖率 这功能不错 所谓的代码覆盖率 指的是 Modesim 能得到 statement 语句 branch 分支 condition 条件 expression 表达式 toggle 信号翻转 fsm 有限状态机 等多种条件下的 覆盖率 1通过 ISE 进入 MODESIM 仿真 2编译目标代码 在命令行输入以下命令 Vlog cover bcsxf file1 v file2 v file3 v test v 其中 cover bcsxf 代表 modesim 执行 branck condition toggle fsm 的覆盖统计操作 3加载该程序 在命令行输入以下命令 Vsim voptargs acc coverage file1 file2 test Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 之后运行代码就可以看到哪些代码运行了 哪些代码没有运行 而运行了的代码运行 了多少次 4view object 查看翻转统计 4 BUFG IBUFG BUFGP IBUFGDS 等含义以及使用等含义以及使用 目前 大型设计一般推荐使用同步时序电路 同步时序电路基于时钟触发沿设计 对 时钟的周期 占空比 延时和抖动提出了更高的要求 为了满足同步时序设计的要求 一 般在 FPGA 设计中采用全局时钟资源驱动设计的主时钟 以达到最低的时钟抖动和延迟 FPGA 全局时钟资源一般使用全铜层工艺实现 并设计了专用时钟缓冲与驱动结构 从而 使全局时钟到达芯片内部的所有可配置单元 CLB I O 单元 IOB 和选择性块 RAM Block Select RAM 的时延和抖动都为最小 为了适应复杂设计的需要 Xilinx 的 FPGA 中集成的 专用时钟资源与数字延迟锁相环 DLL 的数目不断增加 最新的 Virtex II 器件最多可以提 供 16 个全局时钟输入端口和 8 个数字时钟管理模块 DCM 与全局时钟资源相关的原语常用的与全局时钟资源相关的 Xilinx 器件原语包括 BUFG IBUFGDS BUFG BUFGP BUFGCE BUFGMUX BUFGDLL 和 DCM 等 1 IBUFG 即输入全局缓冲 是与专用全局时钟输入管脚相连接的首级全局缓冲 所有 从全局时钟管脚输入的信号必须经过 IBUF 元 否则在布局布线时会报错 IBUFG 支持 AGP CTT GTL GTLP HSTL LVCMOS LVDCI LVDS LVPECL LVTTL PCI PCIX 和 SSTL 等多种格式的 IO 标准 2 IBUFGDS 是 IBUFG 的差分形式 当信号从一对差分全局时钟管脚输入时 必须使 用 IBUFGDS 作为全局时钟输入缓冲 IBUFG 支持 BLVDS LDT LVDSEXT LVDS LVPECL 和 ULVDS 等多种格式的 IO 标准 3 BUFG 是全局缓冲 它的输入是 IBUFG 的输出 BUFG 的输出到达 FPGA 内部的 IOB CLB 选择性块 RAM 的时钟延迟和抖动最小 4 BUFGCE 是带有时钟使能端的全局缓冲 它有一个输入 I 一个使能端 CE 和一个 输出端 O 只有当 BUFGCE 的使能端 CE 有效 高电平 时 BUFGCE 才有输出 5 BUFGMUX 是全局时钟选择缓冲 它有 I0 和 I1 两个输入 一个控制端 S 一个输 Yihua computer hound liwang 68013 pc FPGA 做事 要踏实 独立 工作 要努力 自信 出端 O 当 S 为低电平时输出时钟为 I0 反之为 I1 需要指出的是 BUFGMUX 的应用十 分灵活 I0 和 I1 两个输入时钟甚至可以为异步关系 6 BUFGP 相当于 IBUG 加上 BUFG 7 BUFGDLL 是全局缓冲延迟锁相环 相当于 BUFG 与 DLL 的结合 BUFGDLL 在早 期设计中经常使用 用以完成全局时钟的同步和驱动等功能 随着数字时钟管理单元 DCM 的日益完善 目前 BUFGDLL 的应用已经逐渐被 DCM 所取代 8 DCM 即数字时钟管理单元 主要完成时钟的同步 移相 分频 倍频和去抖动等 DCM 与全局时钟有着密不可分的联系 为了达到最小的延迟和抖动 几乎所有的 DCM 应 用都要使用全局缓冲资源 DCM 可以用 Xilinx ISE 软件中的 Architecture Wizard 直接生成 4 1 全局时钟资源的使用方法全局时钟资源的使用方法 五种五种 1 IBUFG BUFG 的使用方法 IBUFG 后面连接 BUFG 的方法是最基本的全局时钟资源使用方法 由于 IBUFG 组合 BUFG 相当于 BUFGP 所以在这种使用方法也称为 BUFGP 方法 2 IBUFGDS BUFG 的使用方法 当输入时钟信号为差分信号时 需要使用 IBUFGDS 代替 IBUFG 3 IBUFG DCM BUFG 的使用方法 这种使用方法最灵活 对全局时钟的控制更加有效 通过 DCM 模块不仅仅能对时钟 进行同步 移相 分频和倍频等变换 而且可以使全局时钟的输出达到无抖动延迟 4 Logic BUFG 的使用方法 BUFG 不但可以驱动 IBUFG 的输出 还可以驱动其它普通信号的输出 当某个信号 时钟 使能 快速路径 的扇出非常大 并且要求抖动延迟最小时 可以使用 BUFG 驱动 该信号 使该信号利用全局时钟资源 但需要注意的是 普通 IO 的输入或普通片内信号 进入全局时钟布线层需要一个固有的延时 一般在 10ns 左右 即普通 IO 和普通片内信号 Yihua com

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论