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

本文详细解读Verilog语言中可综合与不可综合的特性,包括task和function的可综合性,循环语句的应用,以及赋值语句的注意事项。重点讲解了哪些Verilog语句在实际设计中不可直接综合,如initial、forever等,并探讨了除法运算的可综合实现策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的幂,因此无法实现除数为任意整数的除法,很大程度上限制了它的使用领域。并且多数综合工具对于除运算指令不能综合出令人满意的结果,有些甚至不能给予综合。即使可以综合,也需要比较多的资源。对于这种情况,一般使用相应的算法来实现除法,分为两类,基于减法操作和基于乘法操作的算法。

Verilog是一种硬件描述语言(HDL),用于设计描述数字电路系统的行为。它的可综合语法主要包括模块化、结构化以及数据流事件驱动的概念。以下是Verilog的基本组成部分可综合的关键点: 1. **模块(Module)**:模块是基本的构建块,用于封装功能并指定输入端口(input)、输出端口(output) 内部信号。例如: ``` module adder(a, b, c); input [7:0] a, b; output [7:0] c; // 端口声明内部逻辑实现 endmodule ``` 2. **端口(Port)**:定义了模块与其他模块交互的方式,包括输入、输出、输入/输出等。 3. **赋值语(Assignment)**:用于设置信号的初始值或响应某些条件改变信号值。 4. **任务(Task)**:比函数更适用于顺序控制流程的函数,可以包含多次过程体。 5. **函数(Function)**:返回值的纯计算过程,通常用于组合逻辑。 6. **进程(Process)**:事件驱动的结构,基于条件或定时器,执行特定操作。 7. **同步异步信号处理**:Verilog支持同步异步时序逻辑,`posedge``negedge`等关键词用于触发动作。 8. **条件语(If-Else, Case)**:允许程序根据条件选择执行路径。 9. **循环(For, While)**:对重复性的任务提供控制结构。 为了将Verilog代码实际转化为硬件电路,需要经过以下步骤: - **编写设计文件**:使用上述语法描述电路结构。 - **仿真验证**:使用Verilog模拟器检查代码是否按照预期工作。 - **综合(Synthesis)**:工具如Quartus II、Xilinx ISE等将Verilog转换成目标技术的门级描述。 - **布局布线(Place and Route)**:生成最终的网表文件,用于制造芯片。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小wang的IC自习室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值