- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于FPGA的数字系统设计6b
* * * * * 仿真结果: * 6.15 设计划分 设计划分是高效逻辑综合的重要因素。划 分的不同方式会在很大程度上影响逻辑综合工 具的输出。 模块划分原则: (1)应沿功能线分割成较小的功能单元,每 个功能单元都有一个公共的时钟域,并 且每个功能单元都能独立地进行验证。 * 6.15 设计划分 模块划分原则: (2)功能相关的逻辑应组合在一起。 (3)不同时钟域的逻辑应封装在不同的划分块 中。用同步器使信号穿越不同的时钟域。 (4)不应把组合逻辑分配在模块之间,应保留 模块的边界。 * 划分技术 水平划分:使用位划分方式为逻辑综合工具提 供更小的模块进行优化。 垂直划分:把模块按功能划分成更小的模块。 并行化设计:用更多资源构成速度更快的设计。 * 逻辑综合建模技巧 完全同步设计,禁用门控时钟。 禁用计数器分频后的信号做其他模块的时钟。 一个模块只用一个时钟。 禁止采用混合上升沿与下降沿的设计。 进入FPGA的信号必须先同步,所有模块的输出都要寄存器化,提高系统的工作频率。 * 逻辑综合建模技巧 避免高层的循环结构– 综合工具可能无法产生优化的结果。 避免嵌套使用if-then-else语句– 大多数工具能够用并行的方式实现这个语句,但是,多重嵌套 的if-then-else语句可能导致优先级编码逻辑。 对较大的译码器设计,使用case语句– 不要使用if-then-else。 * 逻辑综合建模技巧 为算术和逻辑操作排序或分组。 避免未经注意产生的latch。 尽量在底层模块上做逻辑,在高层模块做例化,顶层模块只能做例化。 给设计加上时序约束。 设计要参数化。 信号命名要规范化。 * 6.12.3 表达式替代 例6.36 * * * * 6.13 循环的综合 Verilog的循环语句: for、 forever、 repeat、 while * 静态循环: 循环的迭代次数在仿真前能由编译器确定(即迭代次数是固定的并且与数据无关)。 非静态循环: 循环的迭代次数是由运算中的某个变量决定的。与数据相关。 * * 6.13.1 不带内嵌定时控制的 静态循环 例6.38 求数据中1的个数。 单个时钟周期内完成。 循环不包含内部定时控制,是一个静 态循环,即循环次数与输入数据无关。 循环计算生成组合逻辑电路,采用寄 存类型输出 * * 仿真结果: * 6.13.2 带内嵌定时控制的 静态循环 如果一个静态循环具有一个内嵌 边沿敏感事件控制表达式,该循环的 计算可以被同步并且分布在一个或多 个时钟周期上。 * 例6.39 求数据中1的位数的等效描述一 * * 例6.39 求数据中1的位数的等效描述二 * * 例6.39 求数据中1的位数的等效描述三 * 三种描述的仿真结果: * 6.13.3 不带内嵌定时控制的 非静态循环 对于仿真前不能确定循环次数的非静 态循环,如果该循环没有内嵌定时控制, 则其行为能够被仿真,但不能综合。 因为循环次数依赖于数据,此种循环 不能静态地展开。 * 例6.40 * 仿真结果: * 6.13.4 带内嵌定时控制的 非静态循环 带内嵌定时控制的非静态循环可以实现多周期运算。 数据依赖性并不是综合的障碍,可将循环的动作分布到多个时钟周期上实现。 * 例6.41 采用while循环内部的边沿敏感 定时控制 * * 仿真结果: * 消除数据依赖性的描述方式: * * * 仿真结果: * 6.13.5 用状态机替代 不可综合的循环 综合工具不支持没有内嵌定时 控制的非静态循环。 其循环结构可由等效的可综合 时序行为替代。 * 例6.42 对数据字中的1计数的ASMD图 * * 6.8 状态编码 状态分配、状态编码: 将一个码值分配给机器各个状态的任务。 状态编码决定了用以保持状态所需的触发 器的数量,并且影响着实现状态机下一状态和 输出逻辑的复杂度。
文档评论(0)