首页 > 其他分享 >Verilog HDL数据流建模与运算符

Verilog HDL数据流建模与运算符

时间:2023-07-02 11:33:07浏览次数:52  
标签:操作数 En 符号 assign 运算符 Verilog HDL reg

数据流建模使用的连续赋值语句由关键词assign开始,一般用法如下:

wire [位宽说明]变量名1, 变量名2, ..., 变量名n;
assign 变量名 = 表达式;

只要等号右边的值发生变化,则立即更新等号左边的值。

注意,连续赋值语句只能对wire型变量进行赋值,所以等号左边必须是wire型。

把2线-4线译码器用数据流描述风格的代码写出来就是:

module Decoder2x4_gates(
    input [1:0]A, 
    input En, 
    output [3:0]Y);

    assign Y[0] = ~(~A[1] & ~A[0] & En);
    assign Y[1] = ~(~A[1] & A[0] & En);
    assign Y[2] = ~(A[1] & ~A[0] & En);
    assign Y[3] = ~(A[1] & A[0] & En);
endmodule

然后就是介绍数据流风格中设计的运算符了。

1.算数运算符+ - * / %(取余) **(指数)
(1)进行算数运算符时,如果某个操作数中某一位是x或者z,那么整个表达式运算结果也是x,例如`b101x + `b0111 = `bxxxx。
(2)取余后,余数的符号与第一个操作数的符号相同。例如:-7%2 = -17%-2=+18%4=0

2.关系运算符< > <= >=
(1)结果为真1或者假0。
(2)如果操作数中有一个为x或者z,那么结果为x
(3)两个有符号数进行比较时,如果操作数位宽不同,那么用符号位将位数较小操作数的位数补齐。例如:

4'sb1011 <= 8'sh1A //等价于8'sb1111_1011 <= 8'sh1A = 8'sb0001_1010,结果为1.

(4)如果表达式有一个操作数为无符号数,则该表达式的其余操作数均被当作无符号处理。例如:

(4'sd9 * 4'd2) < 4 //18 < 4, 结果为假0。
(4'sd9 * 2) < 4 //-7 * 2 < 4,结果为真1.

3.相等运算符==(逻辑相等), !=(逻辑不等), ===(条件全等), !==(条件不全等)
(1)对于==!=,会逐位比较两个操作数相应位的值是否相等,如果都相等则相等关系成立,如果有一位是xz,那么结果为x
(2)而===!==,允许操作数某些位为xz,例如:

0 === x为0
0 === z为0

1 === x为0
1 === z为0

x === x为0
x === z为0

z === z为0
z === x为0

4.逻辑运算符!, &&, ||
需要注意的是,如果操作数中有一位是x或者z,那么运算结果为x,而仿真器一般将其作为假处理。其他都与C语言一样。

5.按位运算符~, &, |, ^, ^~(同或)
(1)如果两个操作数位宽不相等,仿真软件自动将短操作数的左端高位部分以0补足,如果最高位为x,那么补x。
(2)如果操作数中的某一位是x或者z,那么结果的那一位为x

6.缩位运算符&, ~&(缩位与非), |, ~|(缩位或非), ^, ^~
都只有一个操作数,操作数从右边位一次往左边每一位运算,例如reg [3:0]A,那么运算规则为A[1]与A[0],然后这个结果再与A[2],然后再与A[3]运算,最后得到的结果为1位。

7.移位运算符<<(左移), >>(右移), <<<(算数左移), >>>(算数右移)
(1)逻辑移位,当移位后,所产生的空余位总是0填充。
(2)算数移位,向左移动时,空余位用0补充;向右移动时,如果是无符号数,那么用0补充,否则用符号位补充。

8.条件运算符,用法如下:

condition_expr ? true_expr : false_expr;

9.拼接和复制运算符
拼接运算符{},要求每个操作数必须有确定位宽。

reg A;
reg [1:0]B, C;
A=1'b1, B=2'b00, C=2'b10;

Y={B,C}; 
Y={A,B[0],C[1],1'b1}; 
Z={A,B,5}; //非法,5的位宽不确定。

如果需要多次拼接,直接再{}前加一个数,就是拼接几次。

reg A;
reg [1:0]B, C;
A=1'b1, B=2'b00, C=2'b10;

Y={4{A}}; //把A复制4次
Y={2{A},2{B},C}; //把A复制2次,把B复制2次,然后与C拼接一起

重复的次数可以参数化,例如:

parameter LENGTH=8;
Y = {LENGTH{1'B0}};

10.运算符优先级
感觉没太有必要记,加括号就完事了。。。

标签:操作数,En,符号,assign,运算符,Verilog,HDL,reg
From: https://www.cnblogs.com/ZhengLijie/p/17520481.html

相关文章

  • JavaScript逻辑运算符AND和OR之间的区别
    AND&&和OR||是JavaScript中的逻辑运算符,可用于执行不同的逻辑表达式。在这篇文章中,我将解释它们之间的区别。本文的目标是让您了解这些运算符的工作原理以及它们的不同之处。要理解这些运算符,了解JavaScript中真值和假值的概念非常重要。(更|多优质内|容:java567点c0m) ......
  • TS时常忘记的运算符
    1、可选链运算符?.可选链运算符,对null和undefined及时停止运算,解放es5的繁琐逻辑判断//tsconstval=a?.b//es5varval=a===null||a.b支持的语法如下:obj?.prop//尝试访问可能不存在的属性obj?.[exp]//同上,计算属性写法arr?.[index]//尝试访问可能不存在......
  • Verilog HDL门级建模
    VerilogHDL内部定义了12个基本门级元件可以直接用,用这些门级原件直接对逻辑图进行描述,称为门级建模。每个门输入可能是逻辑0,逻辑1,不确定态x和高阻态z四个值之一。多输入门主要有与门(and),与非门(nand),或门(or),或非门(nor),异或门(xor),同或门(xnor)。符号都知道,为了省事我选择直接拍照。......
  • 与用户交互- 格式化输出 - 基本运算符
    1、与用户交互'''python3'''与"python2"的区别:'''python3'''将获取到的用户输入赋值给变量名resres=input("请输入您的用户名")print(res,type(res))#id返回一串数字(可以看成是内存地址)type返回变量值的数据类型'''inpu......
  • 一份EtherCAT主站的FPGA Verilog代码 ethercat 主站 FPGA verilog 代码
    一份EtherCAT主站的FPGAVerilog代码ethercat主站FPGAverilog代码涉及到的知识点和领域范围是:EtherCAT通信协议、FPGA(现场可编程门阵列)和Verilog(硬件描述语言)。原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/652098268519.html首先,让我们来介绍一下EtherCAT通信协议。E......
  • 3.运算符和表达式
    算术运算符:假设变量A的值为10,变量B的值为20,则:关于自增和自减运算符在前,先计算,表达式的值为递增后的值运算符在后,取原变量值使用,表达式的值为递增前的值++注意:加分号(结束符)就是语句,不加就是表达式。++Exammple:#include<stdio.h>#include<stdlib.h>int......
  • m基于FPGA的交织解交织系统verilog实现,包含testbench
    1.算法仿真效果其中Vivado2019.2仿真结果如下:   2.算法涉及理论知识概要        交织解交织系统是一种数据传输技术,广泛应用于通信系统中,以提高数据传输的可靠性和抗干扰能力。该系统通过将数据在发送端进行交织处理,然后在接收端进行解交织处理,使数据的各个位......
  • 各进制和逻辑运算符
    对于&&和&区别&&对于短路与而言如果第一个条件为false,后面的条件不会在进行判断&对于逻辑与而言如果第一个条件为fasle,后面的条件还会进行判断对于||和|区别||对于短路或而言如果第一个条件为ture,后面的条件不会进行判断|对于逻辑或而言如果第一个条件为tr......
  • Linux扩展篇-shell编程(三)-shell运算符
    基本语法:格式一expr+、-、\*、/、%(加、减、乘、除、求余)格式二"$((运算式))"或者"$[运算式]"基本运算符Shell和其他编程语言一样,支持多种运算符,包括:算术运算符关系运算符布尔运算符字符串运算符文件测试运算符赋值运算符逻辑运算符(1)算术运算符运算符......
  • m基于FPGA的数据串并并串转换系统verilog实现,包含testbench,可以配置并行数量
    1.算法仿真效果 本系统进行了两个平台的开发,分别是: Vivado2019.2 Quartusii18.0+ModelSim-Altera6.6d StarterEdition 其中Vivado2019.2仿真结果如下: 分别进行2路,4路,8路,16路并行串行转换      Quartusii18.0+ModelSim-Altera6.6d Starter......