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

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

3天内不再提示

Verilog逻辑设计中的循环语句和运算符

FPGA之家 来源:时沿科技 作者:Nemo_Yxc 2022-03-15 11:41 次阅读

“本文主要分享了在Verilog设计过程中一些经验与知识点,主要包括循环语句(forever、repeat、while和for)、运算符。”

01

循环语句

在Verilog中存在着4种类型的循环语句(forever、repeat、while和for),其中“while”与“for”的使用方法与C语言中的基本类似。

“forever”语句

语句格式如下: forever begin //add codes end

forever语句经常用于仿真时产生周期性的波形,但是必须写在initial块中。示例代码如下
rega;  initial begin    a = 0;    forever      begin        #5 a = ~a;      end  end
仿真效果如下:

fb1b5090-9197-11ec-952b-dac502259ad0.png

可以看出,clk每5ns实现一次电平翻转。
  • “repeat”语句

语句格式如下: repeat(重复次数) begin // add codes end示意代码如下:
  parameter      times = 3;reg[7:0]b_1,b_2;  initial    begin      b_1 = 0;      #10;      b_1 = 8'b0000_0100;      #10;end  always@(b_1)    begin      b_2 = b_1;        repeat(times)        begin          b_2 = b_2 << 1;        end    end
仿真结果如下:

fb2e4cc2-9197-11ec-952b-dac502259ad0.png

在10ns的时候,b_1赋值为8’b0000_0100,这时候repeat语句触发,b_2变成了8’b0010_0000,可见b_2右移了三位,也就是repeat内的语句重复执行了3次。

  • “while”语句

语句格式如下: while(表达式) begin end while后面的表达式为真时,while将会一直执行,直到表达式为假时,才结束执行while语句。示例代码如下

reg[7:0]c_1,c_2;  initial    begin      c_1 = 0;      #10;      c_1 = 1;      c_2 = 8'b0000_0001;      while(c_1)        begin          c_2 = c_2 << 1;          #10;          if(c_2 == 8'b0001_0000)            c_1 = 0;          else            c_1 = 1;        end    end
仿真结果如下:

fb40361c-9197-11ec-952b-dac502259ad0.png

可以看出,当c_1==1的时候,while中的语句在不停的执行,当c_1==0时,程序跳出while,不在执行。
  • “for”语句

for语句的语句形式:for(表达式1;表达式2;表达式3)beginend 它的执行过程如下:
  1. 先求表达式1;

  2. 求解表达式2。若其值为真,则执行 for 语句中指定的内嵌语句,然后执行第3步;若表达式2值为假,则结束循环,转到第5步;

  3. 求解表达式3;

  4. 转回上面第2步继续执行;

  5. 循环结束,执行 for 语句下面的语句。

    示例代码如下:

  reg    [7:0]    d_1,d_2;  initial    begin      d_2 = 10;      #10;      for(d_1=1;d_1<5;d_1=d_1+1)        begin          d_2 = d_2 + 3;          #5;        end    end

fb4fb506-9197-11ec-952b-dac502259ad0.png

02

运算符

  • 基本算术运算符

  1. + (加法运算符);

  2. - (减法运算符);

  3. * (加法运算符);

  4. / (除法运算符);

  5. % (模运算符或者求余运算符,要求%两侧均为整型数据,结果取第一个操作数的符号位,-10%3的结果是-1,11%-3的结果是2);

  • 赋值运算符

  1. =;

  2. <=;

  • 关系运算符

  1. > (大于);

  2. >= (大于等于);

  3. <        (小于);

  4. <=      (小于等于);

  5. == (等于);

  6. != (不等于);

  7. === (等于,可以比较含有X和Z的操作数,在仿真中用的比较多);

  8. !== (不等于,可以比较含有X和Z的操作数,在仿真中用的比较多)。

  • 逻辑运算符

  1. && (逻辑与);

  2. || (逻辑或);

  3. ! (逻辑非)。

  • 条件运算符

?:

例子:y=x?a:b(当x为真时,y=a,当x为假时,y=b)。

  • 位运算符

位运算符的操作数是几位,结果也是几位。

  1. ~ (取反);

  2. & (按位与);

  3. | (按位或);

  4. ^ (按位异或,XOR,相同为0,不同为1);

  5. ^~ (按位同或,相同为1,不同为0);

  6. ~& (与非,先按与的操作,然后结果取反);

  7. ~| (或非,先按或的操作,然后结果取反)。

  • 移位运算符

  1. <<     (左移,左移一位相当于乘2);

  2. >> (右移,右移一位相当于除以2)。

  • 拼接运算符

{s1,s2,s3,s4}:将两个或者多个信号拼接起来。

  • 缩减运算符(一元简约运算符)

缩减运算符对单个操作数进行与、或、非递推运算,最后的结果是1位的二进制数。具体过程如下:

  1. 先将操作数的第1位和第2位进行与、或、非运算;

  2. 运算的结果与第3位进行与、或、非运算;

  3. 一次类推,知道最后一位。

例子:
reg    [3:0]     a;reg              b;b = &a;   等同于   b = ((a[0]&a[1])&a[2])&a[3]。
审核编辑:郭婷


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

    关注

    28

    文章

    1325

    浏览量

    109297
  • C语言
    +关注

    关注

    180

    文章

    7528

    浏览量

    128340

原文标题:Verilog基础知识学习笔记(三)

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言单片机第七课 运算符和表达式(关系运算符)

    址,如在程序前用#define ROM 0xB012 这样的 语句,在程序中就能用上面的方法用 ROM 对绝对地址 0xB012 进行存取操作了。运算符的优先级说明表格能在笔者的 本教程附录 查看。
    发表于 10-21 09:38

    Verilog generate if语句如何用systemc实现?

    1.Verilog generate if语句如何用systemc实现?例如:generateif (SIZE < 8)assign y = a & b & c;else
    发表于 08-29 16:11

    炼狱传奇-移位和位拼运算符之战

    运算符,就会使程序编写起来变得简单了。代码的意思就是,每次把最低位放到最高位,让前三位放到后面,这样逻辑“1”就实现了移位,形成了循环
    发表于 04-30 09:43

    求一道MATLAB编程题。要求: 使用循环语句编程,但不能使用数组运算符和sum

    求求求~~~要求: 使用循环语句编程,但不能使用数组运算符和sum; 使用数组运算符和sum编程,不能使用循环结构。
    发表于 06-03 17:22

    C语言运算符的优先级和结合性

    ,很明显先进行乘法运算,计算3*5,结果为15,再进行加法运算,计算12+15,结果为27。也就是说,乘法的优先级比加法高,要先计算,这与数学的规则是一样的。 所谓优先级,就是当有多个
    发表于 07-06 06:46

    【梦翼师兄今日分享】 常见的关系运算符(移位运算符)

    Verilog HDL 中有两种移位运算符:(逻辑右移)。梦翼师兄编写实例如下:[table][tr][td=568
    发表于 12-17 10:45

    Java基础之Java运算符

    = 5.0f; long l = 5;f==l; 结果为true,浮点数与整数进行比较,只要值相等就返回true。关系运算符主要用于条件语句循环语句中的判断条件。而条件结构就是根据
    发表于 05-18 15:39

    逻辑运算符是什么

    逻辑运算符:与或非条件结构if -else及其嵌套循环结构whilefordo-while
    发表于 07-14 07:50

    逻辑电路与逻辑运算符

    一、逻辑电路与逻辑运算逻辑运算符:(1)按变量整体值进行运算逻辑与(&&)逻辑或(||)
    发表于 07-16 10:51

    运算符的相关资料推荐

    运算符1、算数操作运算符+、-、*、/、%加法:A+B, AB最好是同类型乘除:乘法在很多CPU并不支持,乘除法能不用就不用,可能会使执行变差求模/求余数:n%m=res[0~(m-1)]求模
    发表于 12-24 06:13

    2.7 python运算符

    2.7 python运算符0. 什么是运算符?本章节主要说明Python的运算符。举个简单的例子 4 +5 = 9 。 例子,4和5被称为操作数,“+”号为
    发表于 02-21 16:43

    Bitwise 逻辑运算符进行设计

    锁定。  AND Bitwise 运算符  摄像头滑块的主要位运算符是 AND。该运算器使用 C 语言编程的安培 (&) 符号,使用图 1
    发表于 04-02 17:39

    C语言总结_语句运算符

    当前文章复盘C语言的: 位运算运算符、基本运算符、数据类型、变量、for语句、while语句、goto
    的头像 发表于 08-14 09:39 757次阅读

    Verilog常用的循环语句及用途

    本文主要介绍verilog常用的循环语句循环语句的用途,主要是可以多次执行相同的代码或逻辑
    的头像 发表于 05-12 18:26 1238次阅读

    verilog逻辑运算符

    写在前面 之前曾经整理过verilog的各类运算符的表达方式,但是在学习的过程中并未深入研究关于逻辑运算符的相关知识,导致在实际使用过程中错误频出,下面是我从网络上整理的相关verilog
    的头像 发表于 09-21 10:07 920次阅读
    <b class='flag-5'>verilog</b>的<b class='flag-5'>逻辑运算符</b>