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

相关推荐
WebCandy7 分钟前
Github Copilot:已免费,速回归!!!
编辑器·github·copilot·ai编程
鸿喵小仙女32 分钟前
C# WPF读写STM32/GD32单片机Flash数据
stm32·单片机·c#·wpf
lucy153027510791 小时前
MCU 功耗基准测试
科技·单片机·嵌入式硬件·智能家居·信号处理·工控主板
lw向北.1 小时前
Qt For Android之环境搭建(Qt 5.12.11 Qt下载SDK的处理方案)
android·开发语言·qt
汤姆和佩琦1 小时前
2024-12-25-sklearn学习(20)无监督学习-双聚类 料峭春风吹酒醒,微冷,山头斜照却相迎。
学习·聚类·sklearn
m0_748240912 小时前
OpenMV与STM32通信全面指南
stm32·单片机·嵌入式硬件
好学近乎知o2 小时前
正则表达式(学习Django过程中可能涉及的)
学习·正则表达式·django
雨中奔跑的小孩2 小时前
爬虫学习案例8
爬虫·学习
jieshenai2 小时前
使用 VSCode 学习与实践 LaTeX:从插件安装到排版技巧
ide·vscode·学习
小灰灰搞电子2 小时前
Qt实现Android的图案密码(图形解锁)源码分享
开发语言·qt