0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习系列:if-else与case

FPGA学习交流 2018-06-01 16:59 次阅读

设计背景:

不管是在什么软件和硬件语言,我们在我们的代码中都或多或少的用到这两条语句,if..else与case语句,今天我们将学习verilog中的这两条语句,其实不管在什么语言中这两个语句都是一样的逻辑。

设计原理:

if...else 条件语句的作用是根据指定的端盘条件是否满足来确定下一步要执行的操作他们的书写格式如下

(1)if (条件语句) (2)if(条件语句) (3)if(条件语句)

语句 语句 语句

else else if(条件语句)

语句 语句

else

语句

(1)语句是if(条件语句)满足则条件成立,也就是这个逻辑执行结果为1,则执行条件语句成立执行的语句,如果不满足,就执行else给出的条件语块,然后才推出这个条件语句。


(2)语句是if(条件语句)满足则条件成立,也就是这个逻辑执行结果为1,则执行条件语句成立执行的语句,如果不满足则直接推出条件语句。


(3)语句是if(条件语句)满足则条件成立,也就是这个逻辑执行结果为1,则执行条件语句成立执行的语句,如果不满足,就判断else if(语句块)是否满足,如果满足就就执行else if 条件给出的语句,如果也不满足这个条件就执行else 给出的语句,然后执行完就退出条件语句。

if ... else 条件语句也允许语句的嵌套也就是

if(...)

..

else

if()

...

else

等语句块

代码演示

module led_run (a, b, c);

input a, b; //定义输入输出

output reg c;

always @ (*)

if(a) //判断a是否为1

c = b; //如果是1的话,就是b的值给c

else

c = ~b; //如果不是1的话,就把b的反值给c

endmodule

仿真图:

仿真中我们可以看到和我们写的分析逻辑一样,a = 1 的时候。b = 0, c = 0 ,a = 0的时候, b = 0,c = 1 ........

case 语句是另一种可以实现多路分支控制的分支语句,和使用if - else 相比,采用case 语句实现多路控制看起来代码逻辑看起来更加清楚明了。

case (控制表达式)

<分支表达式1> : 语句块 1

<分支表达式2> : 语句块 2

<分支表达式3> : 语句块 3

...............

default : 语句块;

endcase

控制表达式代表着对程序流向进行控制的控制信号,各个分支语句表达式代表着控制表达式的状态取值,通常分支表达式都是一些常量表达式,各个语句在分支表达式满足的情况下执行相应的语句块语句,最后有一个关键字default 分支项,这个项可以缺失,在case语句中分支语句的值各不相同,如果相同就会出现矛盾的现象,这应该不是我们想要的。

代码演示

0moduleled_run (a,b,sel,c);

1

2 inputa,b; //定义输入输出

3 input[1:0]sel;//输入选择位

4 outputregc;

5

6 always@(*)

7 case(sel)

8 2'b00 :c =a;//选择位为0,把a值给c

9 2'b01:c =b; //选择位为1,把b值给c

10 2'b10:c =~a;//选择位为2,把a反值给c

11 2'b11:c =~b;//选择位为3,把a反值给c

12 default:c =0;//否则c =0

13 endcase

14

15endmodule

仿真图:


仿真中我们可以看到和我们写的分析逻辑一样,a = 1 的时候。b = 0,sel = 1;c = 0 ,a = 1的时候, b = 0,sel = 0,c = 1 ........


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Case
    +关注

    关注

    0

    文章

    24

    浏览量

    13304
收藏 人收藏

    评论

    相关推荐

    fpga学习需要具备哪些课程

    FPGA(Field Programmable Gate Array)学习需要具备一系列的课程知识和实践技能
    的头像 发表于 03-14 15:51 263次阅读

    oracle case when 语法介绍

    ... ELSE resultN END 其中,CASE是关键字,condition是一个逻辑条件,result是一个表达式或值。 整个CASE WHEN语句可以包括多个WHEN子句,每个WHEN子句都可以带有一个条件和一个结
    的头像 发表于 12-06 10:21 590次阅读

    java switch case的语法规则

    在Java中,switch case语句是一种用于多分支选择的控制流语句。它允许根据某个表达式的值来执行不同的代码块。下面是关于switch case语法规则的详细解释。 基本语法 switch语句
    的头像 发表于 11-30 14:40 332次阅读

    Verilog代码:if-elsecase的电路结构和区别

    每个if-else就是一个2选1mux器。当信号有明显优先级时,首先要考虑if-else,但是if嵌套过多也会导致速度变慢;if语句结构较慢,但占用面积小。 嵌套的if语句如果使用不当,就会
    的头像 发表于 11-29 15:10 699次阅读

    Switch case中的case顺序

    Switch case中的case顺序 Switch 可能转化成多种不同算法的代码。其中最常见的是跳转表和比较链/树。当switch用比较链的方式转化时,编译器会产生if-else-if的嵌套代码
    的头像 发表于 11-20 18:16 379次阅读

    嵌入式软件架构表驱动方法介绍

    表驱动方法是一种使你可以在表中查找信息,而不必用逻辑语句(if-else或switch-case)来把他们找出来的方法。事实上,任何信息都可以通过表来挑选。在简单的情况下,逻辑语句往往更简单而且更直接。
    发表于 11-17 09:21 231次阅读

    如何通过策略模式简化if-else

    相信大家日常开发中会经常写各种分支判断语句,比如 if-else ,当分支较多时,代码看着会比较臃肿,那么如何优化呢? 1、什么是策略模式? Define a family
    的头像 发表于 10-08 16:08 262次阅读
    如何通过策略模式简化<b class='flag-5'>if-else</b>

    如何解决冗长的if...else条件判断(上)

    if...else...条件语句我相信学习python的童鞋们都喜欢用,例如下一面这一段 def func ( param ): if param == "cat" : print ( "这是一只
    的头像 发表于 09-12 17:03 400次阅读

    C语言中if语句、if-else语句和switch语句详解

    在C语言中,有三种条件判断结构:if语句、if-else语句和switch语句。
    发表于 08-18 16:36 1003次阅读
    C语言中if语句、<b class='flag-5'>if-else</b>语句和switch语句详解

    【verilog每日一练】if_else语句优先级

    利用if_else语句中多个条件的优先级关系实现:将变量a[5:0]的十进制中的十位对应的数字提取出来,并且将十位对应的数字赋值给变量b[3:0],要求每个if-else语句中每个条件表达式只允许使用一个关系运算符
    发表于 08-10 09:53

    CASE:创建多路分支

    比较。如果表达式(变量)的值等于某个常数的值,则满足条件且将执行紧跟在该常数后编写的指令。常数可以为不同值: 可按如下方式声明此指令: CASE OF : ; : ; : ; // X >= 3 ELSE ; END_CASE;
    的头像 发表于 06-27 11:46 441次阅读
    <b class='flag-5'>CASE</b>:创建多路分支

    在RTL编码书写中如何考虑时延与布线的问题呢?

    if-else,case 的各种情况分开讨论,主要目的是将分支支路中 晚到的信号放到离输出最近的一级中
    的头像 发表于 06-27 10:36 506次阅读
    在RTL编码书写中如何考虑时延与布线的问题呢?

    代码如何优化掉多余的if/else?

    的if/else? 1. 提前 return 这是判断条件取反的做法,代码在逻辑表达上会更清晰,看下面代码: if (condition) { // do something} else { return xxx
    的头像 发表于 06-22 10:01 466次阅读
    代码如何优化掉多余的if/<b class='flag-5'>else</b>?

    高质量VerilogHDL描述方法

    VerilogHDL可综合的四大法宝:always、if-elsecase、assign,本文将围绕这四大法宝来讲述。
    的头像 发表于 06-05 15:38 532次阅读
    高质量VerilogHDL描述方法

    FPGA说起的深度学习:数据并行性

    这是新的系列教程,在本教程中,我们将介绍使用 FPGA 实现深度学习的技术,深度学习是近年来人工智能领域的热门话题。
    的头像 发表于 05-04 11:22 790次阅读
    从<b class='flag-5'>FPGA</b>说起的深度<b class='flag-5'>学习</b>:数据并行性