FPGA开发:条件语句 × 循环语句

条件语句

1、if_else语句

if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。有如下3种表示方法:

if(表达式)语句;

例如:

cpp 复制代码
if(a>b) out1=int1;

if(表达式)

语句1;

else

语句2;

例如:

cpp 复制代码
if(a>b)
    out1=int1;
else
    out1=int2;

if(表达式1) 语句1;

else if(表达式2) 语句2;

else if(表达式3) 语句3;

......

else if(表达式n) 语句n;

else 语句m**;**

【注意】条件语句必须在过程块中使用,所谓过程块是指initial 和always语句所引导的执行语句集合。除了这两种块语句引导的begin end块中可以编写条件语句外,模块中其他地方都不能编写。

**【注意】**表达式为0、x、z时均视为假。


2、case语句

case语句是一种多分支选择语句,有如下3种格式:

  • case(表达式) <case分支项> endcase
  • casex(表达式) <case分支项> endcase
  • casez(表达式) <case分支项> endcase

分支项如下:

cpp 复制代码
分支表达式1: 语句1;

分支表达式2: 语句2;

......

默认项(default项): 语句;

**【注意】**所有表达式位宽必须相同,常犯错误:用'bx,'bz代替n'bx,n'bz,因为x、z的默认宽度是机器的字节宽度(通常32位)。

【注意】对于casez ,不考虑高阻值z的比较过程,默认其与任何表达式比较后均为真。对于casex,不考虑z和x,默认其与任何表达式比较后均为真。


循环语句

1、forever语句

即连续执行语句,格式如下:

cpp 复制代码
格式1:
forevr  语句;

格式2:
forever
    begin
        多条语句;
    end

**【注意】**其必须写在initial语句中。


2、repeat语句

连续执行一条语句n次,格式如下:

cpp 复制代码
格式1:
repeat(表达式)  语句;

格式2:
repeat(表达式)
    begin
        多条语句;
    end

3、while语句

执行某一条语句直到某个条件不满足。如果一开始就不满足条件,则语句一次也不会被执行。格式如下:

cpp 复制代码
格式1:
while(表达式)  语句;

格式2:
while(表达式)
    begin
        多条语句;
    end

4、for语句

cpp 复制代码
for(表达式1;表达式2;表达式3)
    语句;

与C语言中的for循环语句一样,通过以下三个步骤决定语句的循环执行:

  • 1、先给控制循环次数的变量赋初值。
  • 2、判定控制循环的表达式的值,如为假,则跳出循环语句;如为真,则执行指定的语句后,转到第3步。
  • 3、执行一条语句赋值语句来修正控制循环变量次数的变量值,然后返回第二步。

【注意】Verilog HDL中的四种循环,只有for循环能够用于综合电路,其余三种只能用来写TestBench仿真激励文件,综合电路使用更多的还是如下循环结构。

cpp 复制代码
generate
	for(表达式1 ; 表达式2 ; 表达式3)
         begin : 块名
			 循环语句;
		 end
endgenerate

块语句

块语句的作用就是将多条语句合并成一组,使它们像一条语句那样。

1、顺序块(过程块)

通过关键字begin-end 用于将多条语句组成顺序块。顺序块中的语句是一条一条按顺序执行的,只有前面的语句块执行完后才能执行后面的语句。

基本格式:

cpp 复制代码
begin:块名
    语句1;
    语句2;
    ......
    语句n;
end

begin后可加块名,块内声明语句可以是参数声明语句、reg型变量声明语句、integer型声明语句和real型变量声明语句。


2、并行块

并行块由关键字fork-join 声明,且并行块内的语句是同时执行的。

cpp 复制代码
fork:块名
    语句1;
    语句2;
    ......
    语句n;
join

fork后可加块名,语句块内的说明语句可以是参数说明语句、reg型变量声明语句、integer型变量声明语句、real型变量声明语句、time型变量声明语句和事件(event)说明语句。

**【注意】**如果两条语句在同一时刻对同一个变量产生影响,那么将会引起隐含的竞争。

【注意】块可以拥有自己的名字,这种称之为命名块。 特点如下:

|-------------------------|
| 命名块中可以声明局部变量 |
| 命名块中的变量可以通过层次名引用被访问 |
| 命名块可以被禁用(disable 块名;) |


相关推荐
Dream it possible!35 分钟前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊1 小时前
算法之双指针系列(一)
算法·leetcode
十二1 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方2 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi3 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH3 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi4 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
码农小韩4 小时前
FPGA学习(二)——LED闪烁
fpga开发·verilog·fpga·led·组合逻辑·分频设计
東隅已逝,桑榆非晚6 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
Eyfcom6 小时前
〖物联网终端实战 01〗UWB 室内高精度定位:仓储 AGV 与人员的厘米级轨迹追踪
物联网·算法·物流系统·快递系统·跨境物流快递系统·物联网终端实战