verilog 不可综合语句

2023-10-29

础知识:verilog 不可综合语句

 (1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。
    (2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。
    (3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。 


建立可综合模型的原则
    要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:
    (1)不使用initial。
    (2)不使用#10。
    (3)不使用循环次数不确定的循环语句,如forever、while等。
    (4)不使用用户自定义原语(UDP元件)。
    (5)尽量使用同步方式设计电路。
    (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。
    (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。
    (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。
    (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。
    (10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。
    (11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。
    (12)避免混合使用上升沿和下降沿触发的触发器。
    (13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。
    (14)避免在case语句的分支项中使用x值或z值。

不可综合verilog语句2009-04-14 19:33

1、initial                     只能在test bench中使用,不能综合。(我用ISE9.1综合时,有的简单的initial也可以综合,不知道为什么)2、events                      event在同步test bench时更有用,不能综合。3、real                        
    不支持real数据类型的综合。
4、time                            
    不支持time数据类型的综合。
5、force 和release       
    不支持force和release的综合。
6、assign 和deassign       
   不支持对reg 数据类型的assign或deassign进行综合,支持对wire数据类型的assign或deassign进行综合。
7、fork join                 
    不可综合,可以使用非块语句达到同样的效果。
8、primitives                 
    支持门级原语的综合,不支持非门级原语的综合。
9、table                     
    不支持UDP 和table的综合。
10、敏感列表里同时带有posedge和negedge
    如:always @(posedge clk or negedge clk) begin...end
    这个always块不可综合。
11、同一个reg变量被多个always块驱动
12、延时
    以#开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。
    如:a=#10 b;
    这里的#10是用于仿真时的延时,在综合的时候综合工具会忽略它。也就是说,在综合的时候上式等同于a=b;
13、与X、Z的比较
    可能会有人喜欢在条件表达式中把数据和X(或Z)进行比较,殊不知这是不可综合的,综合工具同样会忽略。所以要确保信号只有两个状态:0或1。
    如:
1 module synthesis_compare_xz (a,b);
2 output a;
3 input b;
4 reg a;
5   
6 always @ (b)
7 begin
8   if ((b == 1'bz) || (b == 1'bx)) begin
9     a = 1;
10   end else begin
11     a = 0;
12   end
13 end 
14   
15 endmodule

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

verilog 不可综合语句 的相关文章

  • linux内存初始化时内核CPU使用率高

    在服务器上引导我的 java 应用程序时 我遇到了 Linux 内核 CPU 消耗高的问题 此问题仅发生在生产中 在开发服务器上一切都是光速 upd9 关于这个问题 有两个疑问 如何修复它 名义动物建议同步并删除所有内容 这确实有帮助 su
  • 使用javascript检测设备CPU/GPU性能?

    这个问题并不特定于 Three js 但我会用它作为例子 我最近一直在使用 Three js 开发 Web 应用程序界面 并在 WebGL 和 Canvas 渲染器 针对桌面浏览器 之间编写了一些不错的后备程序 但现在的问题变成了如何正确检
  • Linux下无root权限如何获取CPU序列号

    在没有root权限的Linux Ubuntu 下如何获取CPU序列号 我尝试了 cpuid 命令 它无需 root 权限即可工作 但似乎返回全零 我相信是因为需要在 BIOS 中更改某些内容 您能否建议我另一种从程序中检索 CPU 序列号的
  • Android Studio 和 Ryzen CPU?

    我知道它可能会被标记为重复 但没有一个线程对我有帮助 所以我决定自己做一个 I m a Java后端开发人员我决定学习一些 Android 的东西 几年前我在 Android Studio 工作过i5 4570处理器 然后我放弃了 现在我发
  • 如何通过.NET Core查找物理CPU核心数(不是逻辑SMT超线程)?

    我想检测实际物理核心的数量 而不是逻辑核心的数量 因为当更多线程竞争私有每核心缓存时 工作负载会出现负扩展 和 或具有足够高的 IPC 每个核心运行多个逻辑线程不会吞吐量的增加超过线程开销的增加 特别是对于无法完美扩展到大量内核的问题 或者
  • 我如何访问 Intel CPU 计数器

    是否有任何小工具可以让我访问 Intel CPU 计数器收集的数据 例如 L1 L2 缓存未命中 分支预测失败 您知道现代 Core2 CPU 上有数百个此类数据 它必须在 Windows 上运行 同时能够在 Solaris FreeBSD
  • 如何在Python中模拟CPU和内存压力

    我想知道是否有人用 python 编写了模拟 cpu 和内存压力的代码 我看到一段加载 cpu 的代码 但如何强制它们在 90 的使用率下工作 一个节点主要有 4 种经常使用的资源 有效内存 中央处理器周期 储存空间 网络负载 上传和下载
  • OpenACC 是否会影响正常的 GPU 渲染?

    我试图弄清楚是否可以使用 OpenACC 代替正常的 CPU 串行执行调用 通常我的编程都是关于 3D 编程 或者以某种方式正常使用 GPU IE 图像处理或其他需要使用着色器的渲染类型 我想弄清楚这个图书馆是否对我有利 我问这个问题的原因
  • 为什么每个逻辑 CPU 在多线程情况下都有自己的 CR3 寄存器?

    当我们有一个支持某种形式的多线程的 CPU 时 每个逻辑 CPU 都有它自己的一组寄存器 至少 包括 CR3 寄存器 由于我们在执行不同线程时正在处理同一进程的虚拟地址空间 并且永远不会发生上下文切换 切换同一进程的线程时TLB缓存也不会失
  • C# 程序占用太多CPU?

    我有一个程序 它在启动时不断地在 3 个独立的计时器之间切换 我的应用程序的主线程有一个 while 循环 它不断检查全局变量是否已设置为 true 如果设置为 true 它将停止一个计时器并启动另外两个计时器 一个连续 另一个自动停止 如
  • 将 CPU 频率指定为 Linux 启动时的内核 CMD_LINE 参数?

    我将笔记本电脑的i5 CPU更换为i7 CPU 这样它可以运行得更快 但由于i7的功率更大 温度也比以前更高 所以我的笔记本经常死机 所以 我使用cpupower来指定CPU的最大频率 它起作用了 现在 我的问题是 有没有办法在启动时将CP
  • Linux:如何对系统内存施加负载?

    我正在开发一个小功能 它可以让我的用户了解 CPU 的占用情况 我在用着cat proc loadavg 它返回众所周知的 3 个数字 我的问题是 当我正在开发时 CPU 目前没有做任何事情 有没有一种好方法可以在CPU上产生一些负载 我在
  • 如何根据CPU能力实现渲染器

    我想知道在 JavaScript 中实现渲染器的最佳方法是什么 这里真正重要的并不是渲染的内容部分 我更想知道何时以及如何有效地运行渲染器代码 目前 我有window setInterval renderFunc 1000 20 每 50
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne
  • NodeJS CPU 一次飙升至 100%

    我有一个用 NodeJS 编写的 SOCKS5 代理服务器 我正在使用原生net and dgram打开 TCP 和 UDP 套接字的库 它可以正常工作大约 2 天 所有 CPU 的最大利用率约为 30 两天没有重新启动后 一个 CPU 峰
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 将代码保存在 L1 缓存中

    我一直在阅读维基百科关于 K 编程语言的文章 http en wikipedia org wiki K programming language Performance characteristics这就是我所看到的 解释器的小尺寸和语言的
  • 找出 CPU 时钟频率(每个内核、每个处理器)

    像 CPUz 这样的程序非常擅长提供有关系统的深入信息 总线速度 内存时序等 但是 是否有一种编程方法可以计算每个核心 以及每个处理器 在每个 CPU 具有多个核心的多处理器系统中 频率 而无需处理 CPU 特定信息 我正在尝试开发一个反作
  • 访问三个静态数组比访问一个包含 3 倍数据的静态数组更快?

    我有 700 个项目 我循环遍历这 700 个项目 为每个项目获取项目的三个属性并执行一些基本计算 我使用两种技术实现了这一点 1 三个 700 元素的数组 三个属性各一个数组 所以 item0 a array1 0 item0 b arr
  • FLOPS Intel 核心并使用 C 语言对其进行测试(内积)

    我对测量触发器有一些误解 在英特尔架构上 触发器是一次加法和一次乘法吗 我在网上的某个地方读到过这一点 没有任何辩论可以拒绝这一点 我知道FLOP在不同类型的cpu上有不同的含义 如何计算理论峰值 FLOPS 我使用的是 Intel R C

随机推荐

  • 概率图模型&概率模型 及其应用

    文章目录 概率图模型 有向 vs 无向 概率模型 参数估计 隐变量估计 变分推断 应用例子1 BM RBM 应用示例2 概率图模型中网络结构估计 概率图模型 有向 vs 无向 概率图模型用图刻画一组随机变量之间的相关关系 有向 无环 图刻画
  • STM32移植mbedtls实现AES加解密

    前言 在实际的物联网项目开发中 经常需要将设备采集到的数据远程传输到服务器端 设备也会接收远程服务器端下发过来的数据 这便是数据交互 如果这些数据只是通过明文方式 进行交互 那么是不安全的 那么就需要将数据进行加密和解密了 本文讲基于mbe
  • GLSurfaceView 的onDrawFrame()频繁调用

    可用GlSurfaceView setRenderMode GLSurfaceView RENDERMODE WHEN DIRTY 和 GlSurfaceView setRenderMode GLSurfaceView RENDERMODE
  • Netty UDP 使用采坑

    使用Netty搭建UDP服务收集日志 使用过程中发现 部分日志接收不到 排查发现 都是大日志记录不到 后查询相关文档进行如下修改 EventLoopGroup workerGroup new NioEventLoopGroup 20 try
  • 创建随机点使用支持向量机进行分类(Arcgis+Envi)

    独自摸索是比较痛苦的 每周末两天才能碰巧挖出一个点 希望这篇文章能对你有所帮助 话不多说直接进入正题 首先在arcgis中导入图片 可能遇到此类情况 解决办法如下 双击图片 symbology RGB三通道选择波带 stretch选择拉伸方
  • Java自带排序函数sort()的使用方法

    import java util Arrays class Solution public int sortedSquares int nums int nums1 new int nums length for int i 0 i lt
  • git命令创建,合并,删除分支代码

    创建分支 1 git branch test 创建一个test的分支 2 git checkout test 切换到test分支 3 git add 4 git commit m 提交代码的说明 5 git remote add origi
  • 645.错误的集合(力扣leetcode) 博主可答疑该问题

    一 笔记部分 思路 1 可以用排序 先排序后连续两个相同 还有那个位置上缺了就是那个 2 转化为负数 先遍历一次先将每个元素所对应位置的树转化为负数 然后再遍历一次看那个是负数 就是出现了两次 再看索引的数字是否为负数 因为出现了的都是为负
  • go_命令行参数Args、flag

    Args os Args是一个string的切片 可以存储所有的命令行参数 在终端运行才行 func main args os Args for i v range args fmt Println 索引 i t数据 v 既然是切片 那就可
  • 2022年iOS上架及证书最新申请流程

    最近的15年 手机行业无论怎么变 ios系统依然还是占据着行业的榜首位置 而打包一个苹果的app 门槛则比较高 主要的原因在于苹果app的开发 打包时需要p12格式的证书文件和描述文件profile文件 在hbuilder和apicloud
  • 关于串口助手接收到数据,但显示的数据(16进制)为00的解决方法

    只需要把波特率调低就行
  • 直流电机控制 pwm 和 pid 算法

    下面的文章是我转载的 所以作者若是看到不允许转载 请给我留言或给我邮件 lushiliangcsdn 163 com 我会立即删除 转载原因 这篇文章把pid 算法解释的很详细 我担心以后这篇文章无故删除 才转载到我这边的 谢谢 转载来源于
  • 错误代码57049处理

    DB2 SQLSTATE 57049 处理过程 错误代码57049 修改 etc services 修改实例参数db2inst1参数 错误代码57049 db2 connect to 数据库 后报 SQLSTATE 57049 错误 SQL
  • Ubuntu18.04 搭建ros环境

    目录 一 查询版本 二 配置Ubuntu软件库 三 安装 1 设置安装源和密钥 2 更新可用软件包列表 问题 问题 3 安装 4 初始化 问题 5 更新 6 添加环境变量 7 安装rosinstall 8 安装catkin编译器 9 实例测
  • U3D客户端框架之小堆顶高性能定时器测试10W计时器耗时1.9ms

    1 小顶堆计时器概要 小根堆定时器的优点如下 a 添加时间复杂度为O 1 b 删除时间复杂度为O 1 c 执行一个定时器的时间复杂度为O 1 2 代码设计 之前写的服务器定时器是全部轮询更新 这种计时器性能太差 每一帧都要全部迭代一次 客户
  • 全网最全的最通俗易懂的-jmeter调试错误全集

    一 前言 在使用jmeter做接口测试的过程中大家是不是经常会遇到很多问题 但是无从下手 不知道从哪里开始找起 对于初学者而言这是一个非常头痛的事情 这里结合笔者的经验 总结出以下方法 二 通过查看运行日志调试问题 写好脚本后 可以先试着运
  • 强化学习入门笔记

    学习情况 先后听了两门课程 分别是David Silver的RL和Sergey Levin的DRL 各耗时一周左右 后者更难一些 对RL基本概念 常用算法原理及其伪代码有了大致了解 但是因为时间有点赶 没有敲完整的算法代码 由于已经有写得比
  • vue每个生命周期的作用,以及在哪个阶段发请求,详解

    1 什么是vue生命周期 有什么作用 每个 Vue 实例在被创建时都要经过一系列的初始化过程 例如 需要设置数据监听 编译模板 将实例挂载到 DOM 并在数据变化时更新 DOM 等 同时在这个过程中也会运行一些叫做 生命周期钩子 的函数 这
  • C++文件 I/O操作

    文件流类和文件流对象 输入输出是以系统指定的标准设备 标准设备 输入设备为键盘 输出设备为显示器 为对象 在实际的开发中 不可避免会以磁盘文件作为对象 即从磁盘文件读取数据 将数据输出到磁盘文件 与文件输入输出有关的类主要定义在fstrea
  • verilog 不可综合语句

    础知识 verilog 不可综合语句 1 所有综合工具都支持的结构 always assign begin end case wire tri aupply0 supply1 reg integer default for function