FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录

基本概念

  • RTL(Register - Transfer - Level)视图:是一种硬件描述语言的抽象层次,用于描述数字电路中寄存器之间的数据传输和操作。在这个层次上,可以看到电路的基本结构,如寄存器、组合逻辑、多路复用器等。
  • if - else 语句:是一种条件语句,根据给定的条件表达式的值来选择执行不同的语句块。在 Verilog 中,它用于实现具有优先级的条件判断逻辑。
  • case 语句:也是一种条件语句,用于根据表达式的值从多个分支中选择一个执行。它通常用于实现多分支的平等选择逻辑

当使用 if - else 语句时,RTL 视图通常会生成具有优先级的逻辑电路。

if-else语句代码和RTL视图示例如下(梅哥):

基于下列代码进行后续分析:

复制代码
always @(*) begin
    if (condition1) begin
        output_signal = value1;
    end else if (condition2) begin
        output_signal = value2;
    end else begin
        output_signal = value3;
    end
end
  • 在 RTL 视图中,这会生成一个优先级编码器类型的电路 。每次两种条件进行判断,多个二选一选择器逐级连接;首先判断condition1,如果为真,则输出value1;如果condition1为假,则判断condition2,依此类推。这种电路结构可能会导致较长的组合逻辑延迟 ,尤其是当条件较多且复杂时,因为信号需要依次通过多个条件判断逻辑门。
  • 硬件资源利 用角度看,如果条件之间有包含关系或者部分重叠,可能会导致一些逻辑资源的浪费,因为需要为每个可能的优先级情况生成相应的逻辑。

当使用case语句时:

case语句代码和RTL视图如下(梅哥:

基于一下代码进行下列分析:

复制代码
always @(*) begin
    case (input_expression)
        value_a: output_signal = result_a;
        value_b: output_signal = result_b;
        default: output_signal = result_c;
    endcase
end
  • 在 RTL 视图中,它通常会生成一个多路复用器(MUX)电路input_expression的值决定了选择哪一个分支的结果输出。这种电路结构相对简洁,组合逻辑延迟比较固定,不依赖于条件的顺序。因为所有的分支是平等的,在硬件实现上,会根据input_expression的所有可能值构建一个多路复用器,使得每个分支的选择延迟相对一致。
  • 从硬件资源利用角度看,case 语句在实现多分支且各分支平等的情况下,资源利用效率可能更高,因为它直接构建了一个合适的多路复用器,避免了像 if - else 语句那样可能由于优先级产生的额外资源浪费。

对比:

  • 逻辑延迟

if - else 语句的组合逻辑延迟可能因条件的优先级而变化,条件判断是顺序进行的;

case 语句的组合逻辑延迟相对固定,因为它类似于一个多路复用器的并行选择机制。

  • 硬件资源利用
  • if - else 语句在条件有包含或重叠关系时可能浪费资源;
  • case 语句在多分支平等选择时资源利用效率可能更高,直接构建多路复用器结构。
  • 适用场景

if - else 语句适合于具有优先级的条件判断场景,例如根据不同的状态优先级进行状态机的状态转移;

case 语句更适合于多分支且各分支平等的场景,如根据指令操作码选择执行不同的指令操作。

相关推荐
子兮曰3 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
阿蒙Amon5 小时前
TypeScript学习-第10章:模块与命名空间
学习·ubuntu·typescript
AI绘画哇哒哒5 小时前
【干货收藏】深度解析AI Agent框架:设计原理+主流选型+项目实操,一站式学习指南
人工智能·学习·ai·程序员·大模型·产品经理·转行
BackCatK Chen5 小时前
第 8 篇:TMC2240 电机正反转实现|DIR 引脚控制 + 代码优化(稳定不抖动)
stm32·单片机·嵌入式硬件·保姆级教程·电机正反转·tmc2240·dir引脚控制
黄埔数据分析6 小时前
QDMA把描述符当数据搬移, 不用desc engine
fpga开发
戌中横6 小时前
JavaScript——预解析
前端·javascript·学习
星马梦缘6 小时前
EDA彩灯电路绘制
单片机·嵌入式硬件·物联网·pcb·eda·嘉立创
●VON6 小时前
React Native for OpenHarmony:2048 小游戏的开发与跨平台适配实践
javascript·学习·react native·react.js·von
ZH15455891317 小时前
Flutter for OpenHarmony Python学习助手实战:自动化脚本开发的实现
python·学习·flutter
xcLeigh7 小时前
Python入门:Python3 requests模块全面学习教程
开发语言·python·学习·模块·python3·requests