Verilog HDL语法入门系列(四):Verilog的语言操作符规则(下)

目录

  • 7.移位操作符
  • 8.关系操作符
  • 9.相等操作符
    • 9.1逻辑等与case等
    • 9.2逻辑等与逻辑不等
    • 9.3 case等与case不等
  • 10.条件操作符
  • 11.级联操作符
  • 12.复制

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

7.移位操作符

符号含义
>>逻辑右移
<<逻辑左移
  1. 移位操作符对其左边的操作数进行向左或向右的位移位操作。
  2. 第二个操作数(移位位数)是无符号数
  3. 若第二个操作数是x或z则结果为x
  • << 将左边的操作数左移右边操作数指定的位数
  • >> 将左边的操作数右移右边操作数指定的位数

在赋值语句中,如果右边(RHS)的结果:

  • 位宽大于左边,则把最高位截去
  • 位宽小于左边,则零扩展
  • 建议:表达式左右位数一致

移位操作符

实例:

module shift ();
      reg [9: 0] num, num1;
      reg [7: 0] rega, regb;
   initial      rega = 8'b00001100; 
   initial fork
      #10 num <= rega << 5 ;  // num = 01_1000_0000
      #10 regb  <= rega << 5 ;  // regb =      1000_0000
      #20 num <= rega >> 3;   // num = 00_0000_0001
      #20 regb  <= rega >> 3 ;  // regb =      0000_0001
      #30 num <= 10'b11_1111_0000;
      #40 rega <= num << 2;   //rega =       1100_0000
      #40  num1 <= num << 2;//num1=11_1100_0000
      #50 rega <= num >> 2;   //rega =       1111_1100
      #50  num1 <= num >> 2;//num1=00_1111_1100
      #60 $finish;
   join
endmodule

8.关系操作符

符号含义
>大于
<小于
>=大于等于
<=小于等于

关系操作符的结果可以是1’b1、1’b0或1’bx。

关系操作符

实例:

module relationals ();
      reg [3: 0] rega, regb, regc;
      reg val;
   initial begin
      rega = 4'b0011;
      regb = 4'b1010;
      regc = 4'b0x10;
   end
   initial fork
      #10 val = regc > rega ;   // val = x
      #20 val = regb < rega ;   // val = 0
      #30 val = regb >= rega ; // val = 1
      #40 val = regb > regc ;   // val = 1
      #50 $finish;
   join
endmodule

9.相等操作符

9.1逻辑等与case等

'='赋值操作符,将等式右边表达式的值拷贝到左边。

注意逻辑等与case等的差别:

逻辑等

实例:

a = 2'b1x;
b = 2'b1x;
if (a == b)
    $display(" a is equal to b");
else
    $display(" a is not equal to b");
  • 2‘b1x==2’b0x 值为0,因为不相等
  • 2‘b1x==2’b1x 值为x,因为可能不相等,也可能相等

case等

实例:

a = 2'b1x;
b = 2'b1x;
if (a === b)
    $display(" a is identical to b");
else
    $display(" a is not identical to b");
  • 2‘b1x===2’b0x 值为0,因为不相同
  • 2‘b1x===2’b1x 值为1,因为相同

**特别注意:**Case等只能用于行为描述,不能用于RTL描述。

9.2逻辑等与逻辑不等

符号含义
==逻辑等
! =逻辑不等
  1. 其结果是1’b1、1’b0或1’bx。
  2. 如果左边及右边为确定值并且相等,则结果为1。
  3. 如果左边及右边为确定值并且不相等,则结果为0。
  4. 如果左边及右边有值不能确定的位,但值确定的位相等,则结果为x。
  5. !=的结果与= =相反

值确定是指所有的位为0或1。不确定值是有值为x或z的位。

实例:

module equalities1();
      reg [3: 0] rega, regb, regc;
      reg val;
   initial begin
      rega = 4'b0011;
      regb = 4'b1010;
      regc = 4'b1x10;
   end
   initial fork
      #10 val = rega == regb ;  // val = 0
      #20 val = rega != regc;    // val = 1
      #30 val = regb != regc;    // val = x
      #40 val = regc == regc;   // val = x
      #50 $finish;
   join
endmodule

9.3 case等与case不等

符号含义
===相同(case等)
! ==不相同(case不等)
  1. 其结果是1’b1、1’b0或1’bx。
  2. 如果左边及右边的值相同(包括x、z),则结果为1。
  3. 如果左边及右边的值不相同,则结果为0。
  4. !==的结果与 === 相反

特别注意:综合工具不支持case等与case不等的写法,只能仿真时使用

实例:

module equalities2();
      reg [3: 0] rega, regb, regc;
      reg val;
   initial begin
      rega = 4'b0011;
      regb = 4'b1010;
      regc = 4'b1x10;
   end
   initial fork
      #10 val = rega === regb ; // val = 0
      #20 val = rega !== regc;   // val = 1
      #30 val = regb === regc;  // val = 0
      #40 val = regc === regc;  // val = 1
      #50 $finish;
   join
endmodule

10.条件操作符

符号含义
?:条件

如果条件值为x或z,则结果可能为x或z。

三态门和多路选通器

条件操作符的语法为:

= ? <true_expression>:<false_expression>

其意思是:if condition is TRUE, then LHS=true_expression, else LHS = false_expression

每个条件操作符必须有三个参数,缺少任何一个都会产生错误。
最后一个操作数作为缺省值。

registger = condition ? true_value:false_value;

上式中:

  • 若condition为真则register等于true_value;
  • 若condition为假则register等于false_value。
  • 一个很有意思的地方是,如果条件值不确定,且true_value和false_value不相等,则输出不确定值。

例如:

assign out = (sel == 0) ? a : b;
  • 若sel为0则out =a;
  • 若sel为1则out = b。

如果sel为x或z:

  • 若a = b =0,则out = 0;
  • 若a≠b,则out值不确定。

实例:

module likebufif( in, en, out);
      input in;
      input en;
      output out;
   assign out = (en == 1) ? in : 'bz;
endmodule

module like4to1( a, b, c, d, sel, out);
      input a, b, c, d;
      input [1: 0] sel;
      output out;
   assign out = sel == 2'b00 ? a :
                        sel == 2'b01 ? b :
                        sel == 2'b10 ? c : d;
endmodule

11.级联操作符

符号含义
{}级联

可以从不同的矢量中选择位并用它们组成一个新的矢量。
用于位的重组和矢量构造

在级联和复制时,必须指定位数,否则将产生错误。
下面是类似错误的例子:

   a[7:0] = {4{'b10}};
   b[7:0] = {2{5}};
   c[3:0] = {3'b011,'b0};

级联时不限定操作数的数目。在操作符符号{ }中,用逗号将操作数分开。例如:{A, B, C, D}

实例:

module concatenation;
      reg [7: 0] rega, regb, regc, regd;
      reg [7: 0] new;
   initial begin
      rega = 8'b0000_0011;
      regb = 8'b0000_0100;
      regc = 8'b0001_1000;
      regd = 8'b1110_0000;
   end
   initial fork
      #10 new = {regc[ 4: 3], regd[ 7: 5],
                         regb[ 2], rega[ 1: 0]};
      // new = 8'b11111111
      #20 $finish;
   join
endmodule

12.复制

符号含义
{{}}复制

复制一个变量或在{ }中的值,前两个{ 符号之间的正整数指定复制次数。

实例:

module replicate ();
      reg [3: 0] rega;
      reg [1: 0] regb, regc;
      reg [7: 0] bus;
   initial begin
      rega = 4’b1001;
      regb = 2'b11;
      regc = 2'b00;
   end
   initial fork
        #10 bus <= {4{ regb}}; // bus = 11111111
    // regb is replicated 4 times.
        #20 bus <= { {2{ regb}}, {2{ regc}} };
    // bus = 11110000. regc and regb are each
    // replicated, and the resulting vectors
    // are concatenated together
        #30 bus <= { {4{ rega[1]}}, rega };
    // bus = 00001001. rega is sign-extended
        #40 $finish;
   join
endmodule

目录

  • 7.移位操作符
  • 8.关系操作符
  • 9.相等操作符
    • 9.1逻辑等与case等
    • 9.2逻辑等与逻辑不等
    • 9.3 case等与case不等
  • 10.条件操作符
  • 11.级联操作符
  • 12.复制

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/742961.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

达梦(DM8)数据库表空间的备份与还原(联机备份) 四

一、表空间的备份 1、备份表空间的命令操作 backup tablespace main backupset /home/dmdba/dmdata/DAMENG/bak/full_back_01 ; 2、检查表空间的备份文件 select sf_bakset_check(disk,/home/dmdba/dmdata/DAMENG/bak/full_back_01); 二、表空间的还原 1、修改表空间位脱机…

qt pro文件常用配置

概述 记录一下常用的项目pro文件的一些常用配置 常用配置 QT core gui concurrent#添加concurrent并行处理模块 CONFIG windeployqt#打包部署&#xff0c;项目->构建步骤->Make参数 添加windeployqt&#xff0c;编译自动打包greaterThan(QT_MAJOR_VERSION, 4):…

计网入门还没到放弃

TCP报文段格式 源端口&#xff1a;标识报文的返回地址 目的端口&#xff1a;指明计算机上的应用程序接口 序号&#xff1a;通过SYN包传给接收端主机&#xff0c;每传送一次就1&#xff0c;用来解决网络包乱序的问题。 确认号&#xff1a;期望下一次收到的数据的序列号&#xff…

WMS可以为制造企业解决什么问题?

在快速变化、高度竞争的制造业环境中&#xff0c;仓库不仅是储存物料的地方&#xff0c;更是企业运营的“心脏”。然而&#xff0c;随着业务的扩展和产品种类的增多&#xff0c;仓库管理变得越来越复杂&#xff0c;传统的管理方式已经难以满足现代企业的需求。这时&#xff0c;…

舆论中心的《黑神话:悟空》:人们总希望,这只猴子能打破些什么

距离《黑神话&#xff1a;悟空》上线还有60天。外界关于游戏的争议有很多&#xff0c;但游戏科学却很少出来回应什么。 6月9日&#xff0c;博主兲虎发文称&#xff0c;《黑神话&#xff1a;悟空》之所以在发布宣传视频后&#xff0c;一直遭受到所谓性别歧视的攻击与污蔑&#…

Java项目毕业设计:基于springboot+vue的幼儿园管理系统

数据库:MYSQL5.7 **应用服务:Tomcat7/Tomcat8 使用框架springbootvue** 项目介绍 管理员&#xff1b;首页、个人中心、用户管理、教师管理、幼儿信息管理、班级信息管理、工作日志管理、会议记录管理、待办事项管理、职工考核管理、请假信息管理、缴费信息管理、幼儿请假管理…

企业运维六边形战士 质量稳定 效率为王

随着信息化的不断深入和扩展&#xff0c;企业IT系统的复杂性和设备多样性日益增加。为了保障业务的高可用性和连续性&#xff0c;企业需要一个全面、高效、智能的一体化运维管理平台。在用户市场的推动下&#xff0c;LinkSLA智能运维管家展现出【六边形战士】的优质属性&#x…

金融科技在智能投研领域的应用与前景

随着科技的飞速发展&#xff0c;金融科技&#xff08;FinTech&#xff09;正逐步渗透到金融行业的各个细分领域&#xff0c;其中智能投研领域作为金融科技的重要应用之一&#xff0c;正展现出巨大的潜力和广阔的前景。智能投研利用大数据、人工智能&#xff08;AI&#xff09;等…

中学政史地杂志中学政史地杂志社中学政史地编辑部2024年第4期目录

每月时政 时政要闻&#xff08;2024年3月&#xff09; 李伟; 3-4 热点聚焦 全面加强基础设施建设,积极扩大有效投资 刘华; 5-7《中学生政史地》投稿&#xff1a;cn7kantougao163.com 蒙古国努力应对冰雪灾害 张仁杰; 8-10 复习指导 高中政治经济全球化内容复习…

用友 U8 应收科目设置

知识点&#xff1a;应收科目设置 问题描述&#xff1a;应收款管理-设置-科目设置下的基本科目、控制科目、对方科目及结算科目如何使用&#xff1f; 解决方案&#xff1a; 1、 基本科目 在基本科目中可以定义应收系统凭证制单所需要的基本科目&#xff1a;应收科目、预收科…

费控4.0全面解决方案从源头破解企业费用管理痛点

随着企业数字化变革的加速&#xff0c;费控报销正处于最具有发展潜力的细分赛道&#xff0c;且无疑是具有 “长坡厚雪”属性的投资标的。但回归企业管理视角&#xff0c;作为一个用于企业非生产性费用管理的管理工具&#xff0c;费控报销平台的评判标准只有两个&#xff1a;好不…

2024软件设计师笔记之考点版(一考就过):1-10

软件设计师之一考就过:成绩版 考点1:CPU、指令 真题1:CPU 执行算术运算或逻辑运算时,常将源操作数和结果暂存在(累加器(AC))中。 真题2:在程序的执行过程中,Cache与主存的地址映射是由(硬件自动)完成的。 真题3:计算机执行程序时,内存分为静态数据区、代码区、…

GD32 MCU的选项字节是什么?

GD32 MCU的选项字节是什么&#xff0c;有什么功能呢&#xff1f;选项字节被误篡改如何回复&#xff1f; 读者朋友们是否会有以上的疑问&#xff0c;首先我们先为大家介绍选项字节是什么以及选项字节的功能。 以GD32F30X系列MCU为例&#xff0c;其选项字节说明如下表所示&…

数据结构需要每个都具体实现吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「数据结构的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;用c的stl能刷算法题是不…

第3章 小功能大用处-事务与Lua

为了保证多条命令组合的原子性&#xff0c;Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题。 首先简单介绍Redis中事务的使用方法以及它的局限性&#xff0c;之后重点介绍Lua语言的基本使用方法&#xff0c;以及如何将Redis和Lua脚本进行集成&#xff0c;最后给出Red…

HarmonyOS应用开发——Hello World

下载 HUAWEI DevEco Studio: https://developer.harmonyos.com/cn/develop/deveco-studio/#download 同意&#xff0c;进入配置页面&#xff1a; 配置下载源以及本地存放路径&#xff0c;包括nodejs和ohpm: 配置鸿蒙SDK路径&#xff1a; 接受协议&#xff1a; 确认无误后&#…

SpringBoot异常处理

一、自定义错误页面 SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求&#xff0c;然后跳转…

C++11基础

一、C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了 C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞 进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合…

docker常见问题-持续更新

docker 启动的问题解决 解决: 下载更新linux的win子系统, 重启就可以 WSL 2 installation is incomplete. 更加报错提示,猜测可能是我们使用的wsl2版本老了,需要我们自己手动更新一下,我们根据提示去微软官网下载最新版的wsl2安装后即可正常打开。更新包下载链接。 https://ws…

安达发|生产计划排产软件推动制造业的高质量发展

在全球经济一体化的大背景下&#xff0c;制造业正面临着前所未有的挑战与机遇。随着智能化技术的不断进步&#xff0c;生产计划排产软件作为推动制造业高质量发展的重要工具&#xff0c;已经成为行业转型升级的关键。 制造业作为国民经济的重要支柱&#xff0c;其发展水平直接关…