上升沿判断语句_FPGA入门系列6判断语句
文章
简介
本系列文章主要针对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判断语句相关推荐
- delphi switch语句例子_Python系列之常用语句
之前介绍了基本函数知识,这次我们一起来看下常用的语句,常用语句大概分为条件语句,循环语句,循环控制语句,pass语句这几种,我们一一来看: 1.条件语句 说起条件语句,我想学过编程的人会想到if-el ...
- python语言if语句-Python入门教程之if语句的用法
这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下 OK分享完毕!需要Python资料的可以加QQ群:832339352 进群免费领取下面资料! ...
- python3 for循环怎么用_Python3入门系列之-----循环语句(for/while)
前言 for循环在Python中是用的比较多的一种循环方法,小伙伴需要熟练掌握它的使用 本章节将为大家介绍 Python 循环语句的使用.Python 中的循环语句有 for 和 while for循 ...
- java which语句,java入门之表达式、语句、块
表达式.语句和块是java语言的基础.运算符(Operator)用来计算值,它和变量(Variable)构成了表达式(Expression),表达式是语句(Statement)的核心部分,而语句又构成 ...
- 第八章 Python入门系列之循环
系列文章目录 第一章 Python入门系列之介绍 第二章 Python入门系列之PyCharm 第三章 Python入门系列之注释 第四章 Python入门系列之变量 第五章 Python入门系列之输 ...
- 十二章 Python入门系列之字典
系列文章目录 第一章 Python入门系列之介绍 第二章 Python入门系列之PyCharm 第三章 Python入门系列之注释 第四章 Python入门系列之变量 第五章 Python入门系列之输 ...
- python语言if语句-Python中的if判断语句入门
前言 学习一门语言最好的办法,就是教懂别人.在这里,我会从 Python 最基础的教程写起,慢慢一步步进阶.Python 基础比较好的欢迎在本博客的文章里看看爬虫实战项目,欢迎指教. 人在选择时会做出 ...
- python怎么写判断语句_Python中的if判断语句入门
前言 学习一门语言最好的办法,就是教懂别人.在这里,我会从 Python 最基础的教程写起,慢慢一步步进阶.Python 基础比较好的欢迎在本博客的文章里看看爬虫实战项目,欢迎指教. 人在选择时会做出 ...
- python判断语句入门教程_10_判断(if)语句_Python教程_600集Python从入门到精通教程(懂中文就能学会)...
判断(if)语句 目标 开发中的应用场景 if 语句体验 if 语句进阶 综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?-- 程序 ...
最新文章
- Markdown设置字体大小、颜色...,CSDN博客编写设置字体大小、颜色、粗细。字体,文字背景设置。
- HTML的checkbox和radio的美化
- JVM Attach机制实现
- ecshop api.php,ecshop2.72 api.php 文件鸡肋注入
- 两种参数类型_布尔参数这些缺点不能忍?不如试试枚举吧
- Tensorflow车牌识别完整项目(含完整源代码及训练集)
- 从来没见过这么多的资源~~好好找找吧,一定有你需要的
- ecshop源码分析:会话类cls_session
- 【Magento】magento 1.7.0.2 paypal支付方式,网站标准支付
- SCI之拼图和插图技巧及注意事项
- 如何关闭计算机服务检测,电脑知识:Win7系统如何关闭交互式服务检测窗口?...
- 颗粒归仓水稻总体产量5500吨 国稻种芯-洪江:怀化水稻秋收
- 手动安装EVE-NG模拟器
- 【AI视野·今日CV 计算机视觉论文速览 第231期】Mon, 5 Jul 2021
- Mac系统下TestCafe初体验
- 关于redis的BussinessName取法
- 余弦cos计算相似度
- Qml SwipeView禁用滑动动画
- 寄存器(1)寄存器概念,x86寄存器种类说明及汇编代码详解
- 新版骆驼lPTV小肥米lptv管理系统+全开源源码/可对接EZtv电视直播管理系统
热门文章
- 谷歌AutoML新进展,进化算法加持,仅用数学运算自动找出ML算法
- CVPR 2020 | 给Deepfake 假脸做 X-Ray,新模型把换脸图打回原形
- 打架斗殴烫头酗酒抽烟的小混混,逆袭保送中国科学院,后来怎么样了?
- 一文读懂深度学习中的矩阵微积分
- NLP入门竞赛,搜狗新闻文本分类!拿几十万奖金!
- Scrapy框架的入门使用
- scrapy的几个文件属性
- ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例
- 详解 | SLAM回环检测问题
- C++ Primer英文版(第5版)