Verilog学习笔记2——可综合设计


前言

2023.4.7


一、verilog可综合设计

1、所有综合工具都支持

  • task、assign里面不包含时序或延迟
  • always、assign、begin/end、generate、module、posedge、negedge
  • 函数:function、for、if、case/default
  • 变量:reg、wire、tri、integer、parameter
  • 输入输出:inout、input、output
  • 逻辑门:and、nand、or、xor、nor、xnor、not

在这里插入图片描述

2、所有综合工具都不支持

  • 变量time(64位)
  • 大多数系统任务,$finish, $fopen, $display
  • initial:用于变量初始化和在仿真平台产生激励信号
  • fork-join:仿真的适合用来描述并行结构
  • 延时语句#
  • 电平触发敏感:wait,多用于仿真信号的检测启动
  • 强制赋值和释放:forcerelease
  • 操作符===!==
  • defparam:当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,defparam adder.LENGTH = 5
  • cmos、nmos、pmos

3、可能支持

  • 变量real,常用于仿真时的精确计算
  • casexcasez
  • disable,终止过程块的执行,大部分综合工具都不支持
  • UDP,用户自定义原语,大多数都支持,古老的不支持
  • repeatwhileforever,循环次数为常量时可能综合
  • wand,triand,wor,trior,当信号有多个驱动源时使用,现在不怎么用了
  • 除法/和取余%也不一定,一般不行

4、建立可综合模型的原则

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

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值