关于verilog综合

2023-11-10

一:基本
Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器。

二:verilog语句结构到门级的映射
1、连续性赋值:assign
连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因些连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。Assign语句中的延时综合时都将忽视。

2、过程性赋值:
过程性赋值只出现在always语句中。

阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。

建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。

过程性赋值的赋值对象有可能综合成wire,latch,和flip-flop,取决于具体状况。如,时钟控制下的非阻塞赋值综合成flip-flop。

过程性赋值语句中的任何延时在综合时都将忽略。

建议同一个变量单一地使用阻塞或者非阻塞赋值。

3、逻辑操作符:
逻辑操作符对应于硬件中已有的逻辑门

4、算术操作符:
Verilog中将reg视为有符号数,而integer视为有符号数。因此,进行有符号操作时使用integer,使用无符号操作时使用reg。

5、进位:
通常会将进行运算操作的结果比原操作数扩展一位,用来存放进位或者借位。如:
Wire [3:0] A,B;
Wire [4:0] C;
Assign C=A+B;
C的最高位用来存放进位。

6、关系运算符:
关系运算符:<,>,<=,>=
和算术操作符一样,可以进行有符号和无符号运算,取决于数据类型是reg ,net还是integer。

7、相等运算符:==,!=
注意:===和!==是不可综合的。
可以进行有符号或无符号操作,取决于数据类型

8、移位运算符:
左移,右移,右边操作数可以是常数或者是变量,二者综合出来的结果不同。

9、部分选择:
部分选择索引必须是常量。

10、BIT选择:
BIT选择中的索引可以用变量,这样将综合成多路(复用)器。
11、敏感表:
Always过程中,所有被读取的数据,即等号右边的变量都要应放在敏感表中,不然,综合时不能正确地映射到所用的门。

12、IF:
如果变量没有在IF语句的每个分支中进行赋值,将会产生latch。如果IF语句中产生了latch,则IF的条件中最好不要用到算术操作。Case语句类似。Case的条款可以是变量。

如果一个变量在同一个IF条件分支中先赎值然后读取,则不会产生latch。如果先读取,后赎值,则会产生latch。

13、循环:
只有for-loop语句是可以综合的。

14、设计时序电路时,建议变量在always语句中赋值,而在该always语句外使用,使综合时能准确地匹配。建议不要使用局部变量。

15、不能在多个always块中对同一个变量赎值

16、函数
函数代表一个组合逻辑,所有内部定义的变量都是临时的,这些变量综合后为wire。

17、任务:
任务可能是组合逻辑或者时序逻辑,取决于何种情况下调用任务。

18、Z:
Z会综合成一个三态门,必须在条件语句中赋值

19、参数化设计:
优点:参数可重载,不需要多次定义模块

四:模块优化
1、资源共享:
当进程涉及到共用ALU时,要考虑资源分配问题。可以共享的操作符主要有:关系操作符、加减乘除操作符。通常乘和加不共用ALU,乘除通常在其内部共用。

2、共用表达式:
如:C=A+B;
    D=G+(A+B);
两者虽然有共用的A+B,但是有些综合工具不能识别.可以将第二句改为:D=G+C;这样只需两个加法器.

3、转移代码:
如循环语句中没有发生变化的语句移出循环.

4、避免latch:
两种方法:1、在每一个IF分支中对变量赋值。2、在每一个IF语句中都对变量赋初值。

5:模块:
综合生成的存储器如ROM或RAM不是一种好方法。最好用库自带的存储器模块。

五、验证:
1、敏感表:
在always语句中,如果敏感表不含时钟,最好将所有的被读取的信号都放在敏感表中。

2、异步复位:
建议不要在异步时对变量读取,即异步复位时,对信号赎以常数值。

 

原文地址  http://www.2ic.cn/?action_viewthread_tid_308323

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于verilog综合 的相关文章

  • 如何在 JavaScript 中使用自定义 n 长度字符集打印 n 位数字而不使用 toString

    以同样的方式 我们使用字符得到十六进制 数字 123456789abcdef 你可以简单地做integer toString 16 从整数到十六进制 gt 16 toString 16 10 我想改用自定义字符集和自定义基础 所以对于十六进
  • 在 haskell 中将整数列表转换为一个 Int (如 concat)

    和标题说的差不多 我有一个整数列表 如下所示 1 2 3 我想将其更改为整数 123 我的第一个想法是 concat 但这不起作用 因为它的类型错误 我尝试了各种方法 但通常最终只是返回相同的列表 非常感谢任何帮助 另外 我已经找到了一种打
  • 为什么 int[] a = new int[1] 而不是 int a ?

    这段代码中是否有一些我在 java 中看不到的隐藏含义 怎么可能有用呢 int a new int 1 不仅仅是 int a 因为从我的角度来看这是一样的 int a 定义一个原始 int int a new int 1 定义一个有空间容纳
  • 对 3 个数字进行排序而不进行分支

    在 C 或 C 中 如何实现三个 整数 数字的无分支排序 这可能吗 没有条件 仅对 uint 进行强制转换 完美的解决方案 int abs int a int b a b b gt gt sizeof int CHAR BIT 1 1 re
  • Julia:生成唯一的随机整数数组

    我正在尝试创建 10 个唯一随机整数的元素数组 但是我无法创建具有唯一值的数组 Julia 中是否有类似 Python 的东西样本函数 https docs python org 2 library random html random s
  • uint32_t vs uint_fast32_t vs uint_least32_t

    我在中看到了不同类型的整数定义stdint h 我将以无符号 32 位整数为例 uint32 t显然意味着 32 位无符号整数 这是我经常使用的 uint fast32 t and uint least32 t 和有什么区别uint32 t
  • Ruby 中的安全整数解析

    我有一根绳子 比如说 123 我想将它转换为整数123 我知道你可以简单地做some string to i 但这会转换 lolipops to 0 这不是我想要的效果 当我试图用一种美好而痛苦的方式转换一些无效的东西时 我希望它在我脸上爆
  • 转换为 int16、int32、int64 - 您如何知道选择哪一个?

    我经常必须转换检索到的值 通常作为字符串 然后将其转换为 int 但在 C Net 中 您必须选择 int16 int32 或 int64 当您不知道检索到的数字有多大时 您如何知道选择哪一个 这里每个提到声明 Int16 保存 ram 的
  • 鲁比“是吗?”需要类或模块(类型错误)

    我正在使用 Ruby 并尝试创建一个小型银行帐户程序 当我运行在 create account 中运行的这一特定代码行时 unless response is a Integer response to str length 4 puts
  • 整数包装对象仅在值 127 内共享相同的实例? [复制]

    这个问题在这里已经有答案了 这里它们是同一个实例 Integer integer1 127 Integer integer2 127 System out println integer1 integer2 outputs true 但这里
  • 当 python 添加小整数时,幕后会发生什么? [复制]

    这个问题在这里已经有答案了 我正在摆弄id最近意识到 c Python 做了一些非常明智的事情 它确保小整数始终具有相同的值id gt gt gt a b c d e 1 2 3 4 5 gt gt gt f g h i j 1 2 3 4
  • 整数构造变体

    大家好 我遇到了一个有趣的事件 正在寻找解释 在 Java 1 6 中 Integer a new Integer 5 Integer b new Integer 5 System out println a b Integer c 5 I
  • 如何生成满足某些限制的整数?

    任何人都可以帮我提供生成满足某些限制的整数的技术吗 例如 假设我需要生成整数 x 和 y 使得 100 gt x and y lt x 5 我指的并不是这个特定的示例 而是一些生成满足某些条件的整数的通用技术 嗯 这并不难 选择一个整数 可
  • Javascript 是否处理整数上溢和下溢?如果是,怎么办?

    我们知道Java不处理下溢和溢出 https stackoverflow com questions 3001836 how does java handle integer underflows and overflows and how
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • R中整数类和数字类有什么区别

    我想先说我是一个绝对的编程初学者 所以请原谅这个问题是多么基本 我试图更好地理解 R 中的 原子 类 也许这适用于一般编程中的类 我理解字符 逻辑和复杂数据类之间的区别 但我正在努力寻找数字类和整数类之间的根本区别 假设我有一个简单的向量x
  • 是什么导致 Java(冰雹序列)在我的程序中崩溃

    我制作了一个执行 通常称为 冰雹序列的程序 该程序基本上执行以下操作 创建一个int 值 并为其分配一个值 如果 int 是偶数 则将其除以二 如果 int 为奇数 则将其乘以三并加一 继续这个过程 直到 n 等于 1 它似乎适用于大多数数
  • 整数除法性质

    下面的整数算术性质成立吗 m n l m n l 起初我以为我知道答案 不成立 但现在不确定 它适用于所有数字还是仅适用于某些条件 即n gt l 该问题涉及计算机算术 即q n m q m n 忽略溢出 Case1 assume m kn
  • 从数组中输入多个数字,每个数字检查是否为整数

    每个人 我希望有人能帮我弄清楚C语言的一些东西 这是我第一次认真地做IT方面的作业 我没有经验 而且我正在电子学习中学习 所以老师的帮助不是很好 我需要用C语言开发控制台应用程序 用户需要输入10个整数 如果插入的数字不是整数 需要输出错误
  • 在 Swift 中将单个整数值视为一个范围

    我需要验证字符串的长度 字符计数允许的值为 6 9 个字符 12个字符 15 个字符 所有具有不同字符数的字符串均无效 因此 我想创建一个 Swift 函数 它接受多个范围并计算字符串 extension String func evalu

随机推荐

  • IDEA 卡死的几种解决方案

    idea最为最为流行的Java开发工具其智能化提示对于开发人员非常友好 大大提高开发效率 不过我们在平时开发的时候不可避免的遇到idea卡死的情况 以下是我在平时遇到卡死的情况下的解决方法 1 调大idea内存配置参数 修改完后保存重启 X
  • 常用距离算法 (原理、使用场景、Python实现代码)

    距离度量是有监督和无监督学习算法的基础 包括k近邻 支持向量机和k均值聚类等 距离度量的选择影响我们的机器学习结果 因此考虑哪种度量最适合这个问题是很重要的 因此 我们在决定使用哪种测量方法时应该谨慎 但在做出决定之前 我们需要了解距离测量
  • 天拓分享:关于S7-1200和S7-300之间的通信

    1 S7 1200 的PROFINET 通信口 S7 1200 CPU 本体上集成了一个 PROFINET 通信口 支持以太网和基于 TCP IP 的通信标准 使用这个通信口可以实现 S7 1200 CPU 与编程设备的通信 与hmi触摸屏
  • 如何在 Debian 11 上设置一个静态 IP 地址

    当你在电脑上安装一个新的操作系统时 DHCP服务器会给你分配一个动态IP地址 然而 在各种情况下 你可能需要在你的机器上设置一个静态IP地址 例如 当你正在托管一个网络服务器 或者任何服务需要一个IP地址而不是域名 或者在你即将授予某人远程
  • LayoutParams布局

    AbsoluteLayout LayoutParams可以重新设置坐标 然后调用setLayoutParamsLinearLayout LayoutParams可以调用setMargins 来移动控件位置比如在调用rootLayout ad
  • VSCode的C/C++环境初始化(2022版)

    提前说明 如果中间 VSCode 提示要装插件 直接点击安装推荐的第一个即可 下拉框有 g 编译 gdb 调试 可以盲选 第一步 下载MinGW64 下载地址 https sourceforge net projects mingw w64
  • (十五)Mybatis当中一级二级缓存用法详解

    学习Mybatis一级二级缓存看这一篇足够了 写的非常详细 用法及代码示例都写出来了 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 目录 一级缓存 一级缓存使用示例 一级缓存失效示例 1 sqlSes
  • mariadb之半同步

    补充说明 做的时候楼主没看清楚版本号 10 2以前是my conf 以后是my conf d server conf 楼主本人是写到了server这个文件里 请大家注意 可能不显示模式的原因可能就是写错配置文件了 等我明天重新做一遍 看看有
  • java版4人过桥问题

    夜晚 桥头有 4个人在一起准备过桥 这些人中只有一个人有手电筒 从桥头走到桥尾一次最多只能俩个人同时行进 每个人单独过桥的时间可能不一样 如果两个人在一起走 则这次的花费时间是走的最慢的那个人 假如现在四个人单独过桥的时间分别是 1 2 5
  • 管理员后台页面html代码,HTML5技术实现的管理员后台模板界面

    实例简介 一套采用了CSS3和HTML5技术实现的后台管理界面 不具备具体的管理功能 只是一个界面 但使用了最新的HTML5技术 网页上有超多你见不到的新效果 新形式 包括图表等 是下一个WEB技术的革命创新 有兴趣的可不要错过哦 学习HT
  • 安装某些工具不能用时,可能环境变量出现问题

    安装某些工具不能用时 可能环境变量出现问题 尝试使用 echo PATH 查看在环境中的变量 如果环境中没有该变量 退出重进 还是没有就或者手动添加
  • 事件内核对象 CreateEvent

    事件内核对象是在线程同步时比较常用的内核对象 一个事件内核对象的触发表示一个操作已经完成 有两种类型的事件内核对象 手动重置事件和自动重置事件 当一个手动重置对象被触发的时候 正在等待该事件的所有线程都将变成可调度状态 而当一个自动重置事件
  • 互联网+国家战略-整理

    互联网 国家战略 前言 互联网 普惠经济 跨界 融合 连接一切 互联网 的密码 第一篇 互联网 纳入国家计划 什么是互联网 怎么理解 加什么 互联网 与国家影响力 互联网 融合共识 协同行动 互联网 六大特征 跨界融合 创新驱动 重塑结构
  • 结构体定义struct和typedef struct的区别(重新整理版)

    1 结构体的定义 允许用户自己建立由不同类型数据组成的组合型的数据结构 它称为结构体 实际上应称为 结构体类型 2 struct的用法 下面以一个结构体实例来说明一下 struct os tcb OS STK OSTCBStkPtr OS
  • Xor Sum 2二分/尺取 区间异或和等于区间和的方案数

    题目描述 There is an integer sequence A of length N Find the number of the pairs of integers l and r 1 l r N that satisfy th
  • pandas读写csv excel pinkle 的性能比较

    在数据分析工作中 csv excel pinkle这三种格式的文件经常会被用到 但是pandas读取这3种格式的数据究竟性能如何呢 我准备了13列 17519行的excel数据 测试了一下 结果是这样 csv xls pickle 字节数M
  • 计算机系统基础实验:认识logisim软件、门电路逻辑功能测试(仿真)

    通过logisim对逻辑电路进行分析 文章目录 目录 文章目录 前言 一 使用工具 二 实验过程 1 门电路绘制 2 真值表 总结 前言 计算机系统基础也开了实验课 实验内容是利用logisim软件进行测试门电路和逻辑芯片的逻辑功能 于是在
  • 在百度上搜不到的资源是在哪找的?就在这些强大的资源搜索网站呀

    都说又不懂的问 度娘 最快 但是也有一些东西是在 度娘 哪里也找不到的 那些在百度上搜不到的资源是在哪找的呢 就在这些强大的资源搜索网站呀 1 茶杯狐 茶杯狐 它的资源搜索功能很成熟 这里收集了海量的资源可以免费下载 只需要输入关键词 就可
  • 私网地址与Internet地址

    一 A B C三类地址 可用地址范围 备注 A类 1 0 0 1 126 255 255 254 B类 128 1 0 1 191 255 255 254 C类 192 0 1 1 223 255 255 254 D类 224 0 0 1
  • 关于verilog综合

    一 基本Verilog中的变量有线网类型和寄存器类型 线网型变量综合成wire 而寄存器可能综合成WIRE 锁存器和触发器 二 verilog语句结构到门级的映射1 连续性赋值 assign连续性赋值语句逻辑结构上就是将等式右边的驱动左边的