网络知识 娱乐 verilog中的可综合和不可综合语句总结

verilog中的可综合和不可综合语句总结

Verilog是描述硬件电路的,它是建立在硬件电路的基础上的。有些语法结构是不能与实际硬件电路对应起来的,也就是说我们在把一个语言描述的程序映射成实际硬件电路中的结构时是不能实现的。

  • taskfunction都是可综合的,不过综合出来的都是组合逻辑电路。要想可综合,task和function内部必须是组合逻辑。
  • 循环语句(repeatwhilefor也可以用于可综合电路设计,当采用循环语句进行计算赋值操作时,可以综合得到逻辑电路。

 verilog中可综合语句:

input、output、parameter、reg、wire、always、assign、begin..end、case、posedge、negedge、or、and、default、if、functiongenerateinteger`definewhilerepeatfor (while、repeat循环可综合时,要具有明确的循环表达式和循环条件,for可综合时也要有具体的循环范围)

不可综合语句:

initial、fork.. join、wait、time、real、display、forever

保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:

  1. 不能使用initial,initial一般使用在测试程序,做初始化;
  2. 不建议使用延时,#1,这种只是模拟数字电路中因为布线产生的信号延时,不可综合,但也不会报错;
  3. 不能使用循环次数不确定的函数,但forever在综合设计中禁止使用,只能使用在仿真测试程序中;
  4. 尽量使用同步电路设计方式;
  5. 除非关键电路设计,一般不建议调用门级元件进行设计,一般使用行为级进行设计;
  6. 当使用always进行组合逻辑设计时,敏感列表里面的要列出所有输入信号。
  7. 在进行时序电路进行编写时,采样非阻塞赋值。组合逻辑设计时,采样阻塞赋值,但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。。
  8. 为避免产生锁存器,if、case要进行完整的语句赋值,且case语句中避免使用X值、Z值。
  9. 避免混合使用上升沿和下降沿触发的触发器:

        如:always @(posedge clk or negedge clk) begin...end,这个always块不可综合。

关于除法运算的可综合性参考以下小米数字IC笔试题:

12、哪些Verilog的写法是不能综合的()

A、输入为变量的除法

B、循环边界未指定的for循环

C、含有时序电路的function函数

D、输入为变量的乘法

解析:ABC。除法不可综合。

除法器在FPGA里怎么实现呢?当然不是让用“/”和“%”实现。在Verilog HDL语言中虽然有除的运算指令,但是除运算符中的除数必须是2的幂,因此无法实现除数为任意整数的除法,很大程度上限制了它的使用领域。并且多数综合工具对于除运算指令不能综合出令人满意的结果,有些甚至不能给予综合。即使可以综合,也需要比较多的资源。对于这种情况,一般使用相应的算法来实现除法,分为两类,基于减法操作和基于乘法操作的算法。