作为HDL语言,有两种基本的用途:系统仿真和设计实现。所有的HDL描述都可用于仿真,但并非所有的HDL描述都可综合。

一般综合工具支持的Verilog HDL结构

Verilog HDL结构 可综合性说明
module,macromodule
wire,reg,integer 数据类型
parameter

端口类型说明

input,output,inout

运算符

+,-,*,%

&,~&,|,~|,^,^~

==,!=,&&,||,!

~,&,|,^,^~

>>,<<,?:,{}

大部分可综合:

全等运算符(===    !==)不支持:

多数工具对除法(/)和求模(%)有限制;

如对除法操作,只有当除数是常数,且是2的指数时才支持;

基本门元件

and,nand,nor,or,xor,xnor,buf,not,

bufif0,bufif1,notif0,notif1,pullup,pulldowm

全部可综合

但某些工具对取值x和z有所限制

持续赋值 assign

过程赋值:        阻塞赋值( = )

非阻塞赋值( <= )

支持,但对同一reg型变量只能采样阻塞和非阻塞赋值的其中一种进行赋值

条件语句:

if-else,case,casex,casez,endcase

一般支持,但有的综合不支持casex,casez
for循环语句

always 过程语句

begin-end 块语句

function,endfunction
task,endtask 一般支持,少数综合器不支持
编译向导: `include,`define,`ifdef,`else,`endif

一般综合工具忽略的Verilog HDL结构

Verilog HDL结构 这些结构和语句在综合时全被忽略
延时控制 #xxx
scalared, vectored
specify
small, large, medium
weak0,weak1,highz0,highz1,pull0,pull1
time
wait

一般综合工具不支持的Verilog HDL结构

Verilog HDL结构 可综合性说明
在assign持续赋值中,等式左边含有变量的位选择

多数综合器对这些结构和语句不支持,这些语句描述的程序代码不能转换为具体的电路网表结构,但这些结构都能够被仿真工具(如ModeSim等)所支持

全等运算符===,!==
cmos,nmos,rcmos,rnmos,pmos,rpmos
deassign,defparam,event
force,release
fork,join
forever,while,repeat
rtran,tran,tranif0,tranif1,rtranif0,rtranif1
initial
table,endtable,primitive,endprimitive

可综合设计的要点

  • 不使用初始化语句。
  • 不使用带有延时的描述。
  • 不使用循环次数不确定的循环语句,如forever、while等。
  • 尽量采用同步方式设计电路
  • 除非是关键路径设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。
  • 用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。
  • 所有的内部寄存器都应该能够被复位,应尽量使用器件的全局复位端作为系统总的复位。
  • 用户自定义原语(UDP元件)是不可综合的,它只能用来建立门级元件的仿真模型。

FPGA学习笔记---Verilog HDL 可综合语句和不可综合语句汇总相关推荐

  1. FPGA学习笔记---Verilog延迟语句分析比较

    在Verilog语言中经常要用到延时语句,延时语句添加的位置不同,输出的结果就会不同.今天就来分析比较一下延时语句在不同位置时,对赋值语句的影响. 一.阻塞式左延时赋值 文件代码: `timescal ...

  2. FPGA学习笔记(1)简单的时序逻辑电路——流水灯

    FPGA学习笔记(1)简单的时序逻辑电路--流水灯 编程语言为Verilog HDL 原理 (1)设计一个计数器,使开发板上的4个LED状态每500ms翻转一次.开发板上的晶振输出时钟频率为50MHz ...

  3. FPGA学习笔记_ROM核调用与调试

    FPGA学习笔记 ROM核调用与调试 1. ROM存储器IP核的使用 2. 创建.mif文件 3. In system memory content editor内存查看工具的使用 4. Signal ...

  4. 小梅哥FPGA学习笔记

    小梅哥FPGA学习笔记 一.38译码器 功能: 译码器其任一时刻的稳态输出,仅仅与该时刻的输入变量的取值有关,它是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等).38 ...

  5. FPGA 学习笔记:Vivado 2018.2 MicroBlaze Uartlite 配置

    前言 Vivado 版本: Vivado 2018.2 + Vivado HLS 2018.2, Vivado HLS 2018.2 用于 SDK 开发,C语言开发 创建基于MicroBlaze的 [ ...

  6. FPGA学习笔记(五)Testbench(测试平台)文件编写进行Modelsim仿真

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  7. FPGA学习笔记(八)同步/异步信号的打拍分析处理及亚稳态分析

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  8. FPGA学习笔记(十二)IP核之FIFO的学习总结

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  9. FPGA学习笔记_UART串口协议_串口接收端设计

    FPGA学习笔记 1. UART串口协议以及串口接收端设计 1 原理图 2 Verilog 代码 3 Modelsim仿真 4. FPGA板级验证 1.1 串口协议接收端设计 目标:FPGA接收其他设 ...

最新文章

  1. oracle删除表中数据_Excel工作表中,删除重复数据的2种方法解读,高效且实用!...
  2. linux lvm uuid绑定,LVM:“找不到具有uuid的设备”但是blkid找到了UUID
  3. AJAX中的跨域问题:什么是跨域?如何解决跨域问题?
  4. win7上安装mysql数据库_mysql-windows系统安装mysql数据库
  5. UOJ #206. 【APIO2016】Gap
  6. Atitit web httphandler的实现 java python node.js c# net php 目录 1.1. Java 过滤器 servelet 1 1.2. Python的
  7. glibc2.31下的新double free手法/字节跳动pwn题gun题解
  8. 非常逆天的六款Photoshop插件!
  9. 达梦数据库SQL语句执行
  10. Excel:带有相关单元格引用的Python xlwings复制粘贴公式
  11. Cortex m0+笔记
  12. 相关系数(Correlation)
  13. biosrecovery什么意思_卡刷和线刷手机什么意思 Recovery使用方法
  14. html炫酷在线,html单页炫酷
  15. Java static关键字与静态块
  16. 霸屏综艺,牵手明星,扩列神器皮皮APP的出圈始末
  17. Palindromic Tree——回文树(回文自动机)
  18. EU Long-term Dataset with Multiple Sensors for Autonomous Driving
  19. 可微可导连续可积的关系
  20. 中兴OLT C300 enable密码

热门文章

  1. 设计模式之----------适配器模式
  2. Grow heap (frag case) to 6.437MB for 1114126-byte allocation
  3. 网络知识和交换机的基本配置知识培训
  4. Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(5)...
  5. 《Django实战系列》
  6. HBase 学习(三) JavaAPI的使用
  7. JavaScript实现继承的方式和各自的优缺点
  8. 递归和对面对象编程初步
  9. csu 最优对称路径(bfs+记忆化搜索)
  10. Today's Progress