数据流建模使用的连续赋值语句由关键词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. 面霸的自我修养:JMM与锁的理论

    王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 今天是<面霸的自我修养>的第二弹,内容是 Java 并发编程中关于 Java 内存模型(Ja ...

  2. jenkins打包报错的排查思路与解决

    背景 废话少说, 在新建一个jenkins流水线时, 碰到了打包死活无法成功的问题, 相关配置如下图 运行后最后的日志如图 定位问题 通过查看日志, 发现报错的模块是构建后执行shell的时候, 但是 ...

  3. 青少年CTF平台 Web签到

    题目说明 Web一星简单题,Web签到. 直接启动环境,等待30秒左右访问题目链接. 做题过程 进入后,题目好像没有告诉我们什么有用的信息, F12,看遍了题目源码,也没有发现flag,正当我怀疑这个 ...

  4. 洛谷 P1387 最大正方形 题解

    方法1 二分+暴力+前缀和Check 注意细节 通过二维前缀和判定矩形内是否全为1,计算和等于长度的平方就判断为是 复杂度\(\Theta (n^2\log{n})\) #include <bi ...

  5. linux设置信号量系统参数

    前言 信号量是IPC(进程间通信)机制的一种,用于协调多个进程或线程对共享数据的读写操作,本质上是一个计数器.类似于锁,主要用于保护共享资源,控制同时访问资源的进程数. 信号量只允许调用者对它进行等待 ...

  6. 详细讲解原生js拖拽

    场景描述 今天遇见一个问题,那就是产品希望在弹出来的窗口. 可以移动这个弹窗的位置 增加用户体验,我们直接使用的element-ui中的 Dialog 对话框 我们现在需要拖拽标题,移动元素位置 元素 ...

  7. 聊透 GPU 通信技术——GPU Direct、NVLink、RDMA 审核中

    最近人工智能大火,AI 应用所涉及的技术能力包括语音.图像.视频.NLP 等多方面,而这些都需要强大的计算资源支持.AI 技术对算力的需求是非常庞大的,虽然 GPU 的计算能力在持续提升,但是对于 A ...

  8. defined('BASEPATH') OR exit('No direct script access allowed'); 的作用

    起到保护.php文件的作用, 如果直接访问此php文件会得到"不允许直接访问脚本"的错误提示 如果你是用ci框架或者其他的什么, 就建议加上, 如果你怕别人恶意攻击你的话

  9. 云上的甜蜜早安:腾讯云云函数助力PHP打造女友专属每日推送

    用腾讯云的云函数做一个微信公众号早安,每天定时发送早安给你的女朋友! 1.首先我们登录腾讯云,在搜索栏搜索云函数,或直接用这个链接进入curl.qcloud.com/Td0IkpmD 2.进入云函数, ...

  10. Note -「Polynomial」

    Part. 1 FFT Part. 1-1 Main 对于一个 \(n\) 次多项式 \(F(x)=\sum_{i=0}^{n}a_{i}x^{i}\),在平面直角坐标系中可以由 \(n+1\) 个点 ...