文章

简介

本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者在FPGA开发方面的能力,每一个章节中都有针对性的代码书写以及代码的讲解,可作为读者参考。

第七章:判断语句

同一个变量可以在不同的情况下获得不同的值,不同的情况需要判断语句来描述。Verilog HDL 中经常使用的判断语句有 if else 语句和 case endcase 语句,两 种判断语句必须写在 always 或者 initial 语句中,不能写在 assign 中。

if else 语句是一条语句,if 和 else 后面又可以分别带不同语句。if 后面需要有 小括号,小括号内写明 if 的条件,若 if 的条件满足,则执行 if 后面的语句,不然则执行 else 的语句,示例如下所示。

代码示例 1:

代码解析 1:

①第 1 行描述了一个 always 块,always 内的语句根据 clk 的上升沿作为触发条件;

②第 2 行描述了 if 的条件为 a==1;

③第 3 行为 if (a==1)的语句;

④第 4 行为 else,表明除去 a==1 的条件,即 a!=1 的情况下 else 满足;

⑤第 5 行为 else 条件成立的结果语句。

if else 后面可以继续叠加 if else,如下所示。

代码示例 2:

代码解析 2:

①第 1、2、3 行同第一个代码示例一样;

②第 4 行此处在 else 后面再次加入了 if 条件,这条语句表明在除去 a==1 的 情况下并且 a==2 时,b=2;

③后面的语句同第 4、5 行类似。最后没有else,表明当满足所有列出的条件以外的条件时,b 的值保持最后被赋值时刻的值,例如 a==3 时,b=3,a 变成 9 时,b 的值保持不变,仍然为 3。

④if else 叠加不易过多,不然可能造成线路的延时过多。如图 1 所示,每一 个 if else 语句都会生成一个选择器,当 if else 过多时,选择器链路就会很长,而每两级选择器之间都会有线路的延时,当链路过多时,造成的延时就会很多,这样对于描述的电路的时序影响会很大,时序出问题时,就算是功能仿真正确,下板后电路也是不正确的。

图 1 if else 延时

代码示例 3:

代码解析 3:

①第 1 行同代码示例 1 一致;

②第 2、3 行此处判断当 a 大于 1 时,b 被赋值为 1;

③第 4、5 行判断当 a 等于 2 时,b 被赋值为 2。

我们会发现按照这样处理, b 的值会一直等于 1,原因就是因为第一个判断条件为 a 大于 1,包含了 a 等于 2,if else 的特点是会从上往下判断对应的条件,当上面的条件满足时,不会再继续判断下面的条件,因此为了更好地描述我们的电路,我们使用 if else 时需要考虑清楚优先级,优先执行的,把条件放到上面,后面执行的,把条件放到下面。

在组合逻辑中,if else 的最后一级尽量以 else 结尾,避免生成锁存器,时序逻辑中无需考虑。

在 if else 级数过多的情况下,可以选择 case 语句,case 语句可以生成多路选择器,结构图如下图 2 所示。

图 2 多路选择器结构图

在 Verilog HDL 中,case 语句必须写在 always 或 initial 块中,不能写入到 assign 中,case 语句必须以 endcase 结束,具体代码示例如下所示。

代码示例 4:

代码解析 4:

①第 1 行描述了一个 always 块,该 always 块以 clk 的上升沿作为触发条件;

②第 2 行描述了一个 case 语句,该 case 语句的条件为 a;

③第 3、4、5 行表述了在 a 的不同状态下,b 将会被赋予不同的值;

④第 6 行描述了除去列举出来的状态,当 a 处于其他状态时,b 被赋予 0 值。在使用组合逻辑,并且没有列出所有 a 的状态时,若此处不使用 default,则可能被综合成锁存器,因此尽量在没有列出所有状态的情况下,后面加上 default 语 句;

⑤第 7 行以 endcase 结束 case 语句。

练习:

输入:时钟 clk;复位 rst_n,低电平有效;输出:计数器 po_cnt。

功能:在 clk 上升沿驱动的情况,当 rst_n 有效时,po_cnt 输出 0, 不然输出 po_cnt 每个 clk 的上升沿加 1,当加到最大值 15,po_cnt 归 0,并继 续计数。具体代码如下所示。

代码解析:

①第 4 行定义输出变量 po_cnt,po_cnt 所能表达的最大值为 15,所以 po_cnt 最小的位宽需要定义为 4 位宽;

②第 8 行的 always 块根据描述具体功能要求。

在第八章中将对Verilog HDL 中的时钟分频进行讲解。

FPGA入门系列1--模块书写&电路综合

FPGA入门系列2--仿真验证

FPGA入门系列3--wire与reg

FPGA入门系列4--赋值语句

FPGA入门系列5--运算符号

未完待续

 关注我们了解更多资讯

上升沿判断语句_FPGA入门系列6判断语句相关推荐

  1. delphi switch语句例子_Python系列之常用语句

    之前介绍了基本函数知识,这次我们一起来看下常用的语句,常用语句大概分为条件语句,循环语句,循环控制语句,pass语句这几种,我们一一来看: 1.条件语句 说起条件语句,我想学过编程的人会想到if-el ...

  2. python语言if语句-Python入门教程之if语句的用法

    这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下 OK分享完毕!需要Python资料的可以加QQ群:832339352 进群免费领取下面资料! ...

  3. python3 for循环怎么用_Python3入门系列之-----循环语句(for/while)

    前言 for循环在Python中是用的比较多的一种循环方法,小伙伴需要熟练掌握它的使用 本章节将为大家介绍 Python 循环语句的使用.Python 中的循环语句有 for 和 while for循 ...

  4. java which语句,java入门之表达式、语句、块

    表达式.语句和块是java语言的基础.运算符(Operator)用来计算值,它和变量(Variable)构成了表达式(Expression),表达式是语句(Statement)的核心部分,而语句又构成 ...

  5. 第八章 Python入门系列之循环

    系列文章目录 第一章 Python入门系列之介绍 第二章 Python入门系列之PyCharm 第三章 Python入门系列之注释 第四章 Python入门系列之变量 第五章 Python入门系列之输 ...

  6. 十二章 Python入门系列之字典

    系列文章目录 第一章 Python入门系列之介绍 第二章 Python入门系列之PyCharm 第三章 Python入门系列之注释 第四章 Python入门系列之变量 第五章 Python入门系列之输 ...

  7. python语言if语句-Python中的if判断语句入门

    前言 学习一门语言最好的办法,就是教懂别人.在这里,我会从 Python 最基础的教程写起,慢慢一步步进阶.Python 基础比较好的欢迎在本博客的文章里看看爬虫实战项目,欢迎指教. 人在选择时会做出 ...

  8. python怎么写判断语句_Python中的if判断语句入门

    前言 学习一门语言最好的办法,就是教懂别人.在这里,我会从 Python 最基础的教程写起,慢慢一步步进阶.Python 基础比较好的欢迎在本博客的文章里看看爬虫实战项目,欢迎指教. 人在选择时会做出 ...

  9. python判断语句入门教程_10_判断(if)语句_Python教程_600集Python从入门到精通教程(懂中文就能学会)...

    判断(if)语句 目标 开发中的应用场景 if 语句体验 if 语句进阶 综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?-- 程序 ...

最新文章

  1. Markdown设置字体大小、颜色...,CSDN博客编写设置字体大小、颜色、粗细。字体,文字背景设置。
  2. HTML的checkbox和radio的美化
  3. JVM Attach机制实现
  4. ecshop api.php,ecshop2.72 api.php 文件鸡肋注入
  5. 两种参数类型_布尔参数这些缺点不能忍?不如试试枚举吧
  6. Tensorflow车牌识别完整项目(含完整源代码及训练集)
  7. 从来没见过这么多的资源~~好好找找吧,一定有你需要的
  8. ecshop源码分析:会话类cls_session
  9. 【Magento】magento 1.7.0.2 paypal支付方式,网站标准支付
  10. SCI之拼图和插图技巧及注意事项
  11. 如何关闭计算机服务检测,电脑知识:Win7系统如何关闭交互式服务检测窗口?...
  12. 颗粒归仓水稻总体产量5500吨 国稻种芯-洪江:怀化水稻秋收
  13. 手动安装EVE-NG模拟器
  14. 【AI视野·今日CV 计算机视觉论文速览 第231期】Mon, 5 Jul 2021
  15. Mac系统下TestCafe初体验
  16. 关于redis的BussinessName取法
  17. 余弦cos计算相似度
  18. Qml SwipeView禁用滑动动画
  19. 寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解
  20. 新版骆驼lPTV小肥米lptv管理系统+全开源源码/可对接EZtv电视直播管理系统

热门文章

  1. 谷歌AutoML新进展,进化算法加持,仅用数学运算自动找出ML算法
  2. CVPR 2020 | 给Deepfake 假脸做 X-Ray,新模型把换脸图打回原形
  3. 打架斗殴烫头酗酒抽烟的小混混,逆袭保送中国科学院,后来怎么样了?
  4. 一文读懂深度学习中的矩阵微积分
  5. NLP入门竞赛,搜狗新闻文本分类!拿几十万奖金!
  6. Scrapy框架的入门使用
  7. scrapy的几个文件属性
  8. ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例
  9. 详解 | SLAM回环检测问题
  10. C++ Primer英文版(第5版)