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

news2024/11/15 17:37:59

目录

  • 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相关源码:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM虚拟机的组成

一、为什么要学习 JVM &#xff1f; 1. “ ⾯试造⽕箭&#xff0c;⼯作拧螺丝” &#xff0c; JVM 属于⾯试官特别喜欢提问的知识点&#xff1b; 2. 未来在⼯作场景中&#xff0c;也许你会遇到以下场景&#xff1a; 线上系统突然宕机&#xff0c;系统⽆法访问&#xff0c;甚⾄直…

IDS Gaia-X Catena-X Manufacturing-X的关系

来源&#xff1a;小盟科普丨Catena-X数据空间在汽车领域落地https://mp.weixin.qq.com/s/Ftp0UGAohsh4ltLn3DylAw

苹果电脑清理垃圾怎么清理 macbook怎么清理电脑垃圾文件 macos优化软件 cleanmymac怎么使用

在选择电脑时&#xff0c;不少人都会选择拥有高性能和轻薄机身的mac。一开始&#xff0c;它确实如我们所期待的那样健步如飞&#xff0c;然而&#xff0c;随着时间的流逝&#xff0c;有没有觉得您的Mac有时候像是需要一个好的春季大扫除一样&#xff1f;随着我们不断使用电脑&a…

IMU应用于颈部健康监测

随着电脑成为日常工作的必备工具&#xff0c;长时间使用电脑导致的颈部疼痛问题日益受到关注。近日&#xff0c;一项创新研究利用IMU开发了一种新型监测系统&#xff0c;用来监测电脑使用者的颈部姿势和疼痛情况。 在为期两天的实验中&#xff0c;8名办公室工作者分别在静态和…

2024年世界移动大会(MWC Shanghai)——飞睿智能诚邀您,超宽带技术定位测距传输全家桶

超宽带UWB芯片SIP系列&#xff1a; FS100 FS200 超宽带UWB标签系列&#xff1a; FU3620-2 FUP410-1 超宽带UWB应用系列&#xff1a; FMFB200A&#xff08;门锁方案&#xff09; FU2625-2&#xff08;TAG方案&#xff09; FPDB200A&#xff08;音频&#xff09; FSTB200…

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

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

【SQL Server数据库】数据的增删改操作

目录 一、用SQL语句完成下列功能。 1、新开设一门课程&#xff0c;名叫网络安全与防火墙&#xff0c;学时40&#xff0c;编号为“0118”&#xff0c;主要介绍网络的安全与主要的防火墙软件。 2、先建立monitor表&#xff0c;其结构与student表大致一样&#xff0e;…

亚马逊运营专词(一)

许多新入驻亚马逊的大陆卖家&#xff0c;对亚马逊的专业词汇还不太了解&#xff0c;导致在运营店铺的过程出现一些问题&#xff0c;今天就来讲解一下亚马逊常用的运营专词&#xff0c;方便新手卖家深入了解。 1. Listing&#xff1a;亚马逊listing指的是产品的详情页面&#xf…

关于jd-gui启动报This program requires Java 1.8+的错误

问题&#xff1a; 在Mac使用上JD-GUI启动时&#xff0c;报了如下的错误&#xff1a; ERROR launching JD-GUINo suitable Java version found on your system! This program requires Java 1.8 Make sure you install the required Java version. 解决方法&#xff1a; 方法…

使用官方新工具手动升级 Quest 操作系统

Meta 近期推出了一款用于手动升级 Meta Quest 系统的工具&#xff0c;为用户提供了更多选择。本文将详细介绍如何使用这一工具进行系统升级。 优势与劣势 优势&#xff1a; 安装迅速&#xff1a;升级速度相比在线自动升级快&#xff0c;且可实时查看进度 即时升级&#xff1…

公关世界杂志社《公关世界》杂志社2024年第12期目录

公关动态 中国公共关系协会在法国巴黎举行黄河文化展 1-2 专题 以书法谈执法 高林; 3-4 乡村振兴与绿色发展 促进黑龙江省冰雪旅游产业高质量发展的支持政策研究 蔡德发;李可新; 5-7《公关世界》投稿&#xff1a;cnqikantg126.com 乡村振兴视域下青年社会责任感…

【快速入门】Transformer: Attention Is All You Need

Transformer → \to → 【知名应用】BERT (unsupervised trained Transformer) Transformer &#xff1a;seq2Seq model with self-attention, 后续会主要说明 self-attentionTransformer的组成&#xff1a; Self-attention是 Attention变体&#xff0c;擅长捕获数据/特征的内…

diffusion扩散模型参考论文与代码

十分钟读懂Diffusion&#xff1a;图解Diffusion扩散模型 - 知乎在之前的文章中&#xff0c;我们曾经介绍过Diffusion的具体原理&#xff0c;但是讲的还是比较偏理论&#xff0c;为了让大家快速了解Diffusion原理&#xff0c;这篇文章我们通过图解的方式。 绝密伏击&#xff1a;…

重点!业内分享:如何找到自己门店的生鲜经营定位

说到经营生鲜品类 许多商超人士或许都会面临这样一个困境 即品类繁多且复杂&#xff0c;那么如何做到精准施策&#xff1f; 比如说&#xff0c;蔬菜和水果虽都归为生鲜&#xff0c;然而细分起来&#xff0c;价格和消费群体均存在差异。像蔬菜&#xff0c;价格通常较低&#…

Redis集群-计算key的插槽值等命令

文章目录 1、集群方式登录主机63792、计算key应该保存在那个插槽3、计算某个插槽中保存的key的数量4、返回指定槽中的键5、查看redis的版本5.1、Redis集群的自动故障转移5.2、主节点下线&#xff0c;从节点自动升为主节点5.2.1、杀死主节点63795.2.2、登录从机6383&#xff0c;…

如何设计出比小米SU7 还酷炫的中控大屏?

最近&#xff0c;国内新能源汽车的热度是一波又一波&#xff0c;比亚迪大降价、小米SU7横空出世…… 智能驾舱&#xff0c;车载设计也受到越来越多人的关注。作为一名软件产品经理或设计师&#xff0c;你可能正在相关行业工作&#xff0c;或准备进入汽车领域。那你一定想了解车…

Android反编译之dex2jar和JD-GUI

文章目录 简述工具dex2jar目标dex文件操作 JD-GUI 简述 1.dex2jar是将dex文件转换为class文件的jar包&#xff1b; 2.JD-GUI是查看转化后的class对应的jar包&#xff1b; 工具 dex2jar 下载地址&#xff1a;https://github.com/pxb1988/dex2jar 点击红框中的Latest版本信息…

T-Reqs:一款基于语法的HTTP漏洞挖掘工具

关于T-Reqs T-Reqs全称为Two Requests&#xff0c;T-Reqs是一款基于语法的HTTP模糊测试漏洞挖掘工具&#xff0c;该工具可以通过发送版本为1.1或更早版本的变异HTTP请求来对目标HTTP服务器进行模糊测试以及漏洞挖掘。该工具主要通过下列三大步骤实现其功能&#xff1a;&#x…

kubernetes pod 最小可部署计算单元

1 工作负载&#xff08;workloads&#xff09; 工作负载&#xff08;workload&#xff09;是在kubernetes集群中运行的应用程序。无论你的工作负载是单一服务还是多个一同工作的服务构成&#xff0c;在kubernetes中都可以使用pod来运行它。 workloads分为pod与controllers p…

PointCloudLib 3D对象的可视化 C++版本

0.实现效果 显示箭头 vtkOutputWindow::SetGlobalWarningDisplay(0);pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(1, 1, 1);//添加箭头显示pcl::PointXYZ pA(0, 0, 0);pcl:…