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 语句更适合于多分支且各分支平等的场景,如根据指令操作码选择执行不同的指令操作。

相关推荐
望获linux4 分钟前
望获实时Linux:亚微秒级时间控制
linux·运维·服务器·计算机·fpga开发·嵌入式软件·飞腾
axban5 分钟前
QT M/V架构开发实战:QAbstractItemModel介绍
java·数据库·qt
GIS开发特训营7 分钟前
【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(4):智矿中国
学习·gis·智慧城市·gis开发·webgis
朗迹 - 张伟29 分钟前
Gin-Vue-Admin学习笔记
vue.js·学习·gin
GilgameshJSS1 小时前
【学习K230-例程21】GT6700-UDP-Client
网络·python·单片机·网络协议·学习·udp
草丛中的蝈蝈1 小时前
qt中给QListWidget添加上下文菜单(快捷菜单)
开发语言·qt
楼田莉子1 小时前
C++动态规划算法:斐波那契数列模型
c++·学习·算法·动态规划
江流月照1 小时前
IP验证学习之agent编写
学习·硬件架构·硬件工程
DisonTangor3 小时前
【阿里拥抱开源】Qwen团队开源新一代深度思考模型——Qwen3-Next-80B-A3B-Thinking
人工智能·学习·语言模型·开源·aigc