数据流建模使用的连续赋值语句由关键词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.运算符优先级

感觉没太有必要记,加括号就完事了。。。

Verilog HDL数据流建模与运算符的更多相关文章

  1. 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)

    Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...

  2. 自己动手写处理器之第二阶段(2)——Verilog HDL简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第六篇.我尽量每周四篇 2.3 Verilog HDL简单介绍 本书实现的OpenMIPS处理器是使用Verilog HDL编 ...

  3. 【黑金教程笔记之003】【建模篇】akuei2的Verilog hdl心路

    Verilog hdl不是“编程”是“建模” Verilog hdl语言是一种富有“形状”的语言. 如果着手以“建模”去理解Verilog hdl语言,以“形状”去完成Verilog hdl语言的设计 ...

  4. Verilog的数据流、行为、结构化与RTL级描述

    Verilog语言可以有多种方式来描述硬件,同时,使用这些描述方式,又可以在多个抽象层次上设计硬件,这是Verilog语言的重要特征. 在Verilog语言中,有以下3种最基本的描述方式: 数据流描述 ...

  5. Verilog HDL程序设计——基本要素

    Verilog基本上熟悉了,继续整理一下Verilog的学习笔记吧.前面记载了Verilog的结构,写Verilog的结构有了,但是该怎么写呢?在写之前就得了解一下Verilog的一些基本要素了,也就 ...

  6. 关于初次使用Verilog HDL语言需要懂的基本语法

    关于初次使用Verilog HDL语言需要懂的基本语法 1.常量 数字表达式全面的描述方式为:<位宽><进制><数字> 8’b10101100,表示位宽为8的二进制 ...

  7. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

  8. Verilog HDL的程序结构及其描述

    这篇博文是写给要入门Verilog HDL及其初学者的,也算是我对Verilog  HDL学习的一个总结,主要是Verilog HDL的程序结构及其描述,如果有错,欢迎评论指出. 一.Verilog ...

  9. Verilog HDL数组(存储器)操作

    本文从本人的163博客搬迁至此. 引用了http://blog.sina.com.cn/s/blog_9424755f0101rhrh.html Verilog HDL中常采用数组方式来对存储器进行建 ...

  10. 基于Verilog HDL整数乘法器设计与仿真验证

    基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...

随机推荐

  1. 掌握Spring条件装配的秘密武器

    本文分享自华为云社区<Spring高手之路9--掌握Spring条件装配的秘密武器>,作者:砖业洋__. 在Spring框架中,条件装配是一个强大的功能,可以帮助我们更好地管理和控制Bea ...

  2. 随风迎 jmeter下TPS插件的安装(转)

    1.下载插件http://pan.baidu.com/s/1mioVJni 2.解压下载的安装包: 将 jpgc-graphs-basic-2.0.zip 解压缩后只有一个 lib 目录,该目录下有一 ...

  3. 合并两个不同远程仓库的Git命令

    一.需求场景描述 远程仓库A:http://XXXA.git 远程gitlab,团队协作开发主仓库,新仓库 远程仓库B:http://XXXB.git 旧仓库 从A仓库和B仓库,都对同一个项目进行过开 ...

  4. [prometheus]基于influxdb2实现远端存储

    前言 Prometheus自带的时序数据库胜在使用方便,缺点在于难以维护,如果数据有问题,可能需要删除存储目录.重建目录再重启Prometheus,才能恢复正常.而且Prometheus自带的时序数据 ...

  5. selenium + python自动化环境搭建

    Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firef ...

  6. SRC赏金猎人—笔记二

    以下是如何将速率限制漏洞的影响从低增加到高甚至严重 过程 1.我访问了该网站,然后开始在网站的主文件中手动查找main.js 2.我发现有一个 Web 服务托管在 http:// redacted.c ...

  7. 一文了解 history 和 react-router 的实现原理

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:霜序 前言 在前一篇文章中,我们详细的说了 react-r ...

  8. NOIP 2022 VP游记

    总结:挂大分. HA NOIP没初中生的份,VP. CSP-S 图论专场 NOIP 数数专场. CCF 我服你. T1 看完之后,感觉不难,瞎搞了 40min+,过了大样例. 对拍不会写. T2 猜不 ...

  9. qBittorrent如何运行脚本 BT实现自动改名并方便Jellyfin的搜刮器

    qBittorrent如何运行脚本 BT实现自动改名并方便Jellyfin的搜刮器 很多影视网站下载的视频名字大概是为了规避监测,命名非常奇葩,比如:z灼f流,y骨y等等.如果你使用了Jellyfin ...

  10. 加密 K8s Secrets 的几种方案

    前言 你可能已经听过很多遍这个不算秘密的秘密了--Kubernetes Secrets 不是加密的!Secret 的值是存储在 etcd 中的 base64 encoded(编码) 字符串.这意味着, ...