03-Verilog语法
Verilog语法
1 Register
组合逻辑-->寄存器-->组合逻辑-->寄存器
Register是一个变量,用于存储值,并不代表一个真正的硬件DFF。
reg A,C;
// assignments are always done inside a procedure
A = 1;
C = A; //C gets the logical value 1
A = 0; //C is still 1
C = 0; //C is now 0
2 Vectors--矢量
- Represent buses
wire [3:0] busA;
reg [1:4] busB;
reg [1:0] busC;
- Left number is MS bit--左侧的数值是最高位
- Slice management
/*
busA位宽为4,表示4根线0,1,2,3
busA[2:1] 表示选择其中的第2和第3根,分别为1,2
busC=busA[2,1] 相当于 [1:0]连接到[1,2] 1与0相连,2与1相连
*/
busC = busA[2:1]
- Vector assignment (by position!)
busB = busA
/*
1 最高位 3
2 2
3 1
4 最低位 0
最高位连最高位
最低位连最低位
*/
3 Integer & Real Data Types
integer i,k;
real r;
- Use as a register(in procedure)
i = 1; // assignments occur inside procedure
r = 2.9;
k = r; // k is rounded to 3
- Integers are not initialized!--Integer是没有初始值的
- Reals are initialized to 0,0!--Real初始值为0,0
4 Time Date Type
- Special data type for simulation time measuring
- Declaration
time my_time;
- use inside procedure
//使用一个内置的系统函数
my_time=$time // get current sim time 返回当前仿真的时间
- Simulation runs at simulation time,not real time
5 Arrays
- Syntax
//类型 数组名[start:end]
integer count[1:5];// 5 integers
reg var[-15:16]; // 32 1-bit regs
reg [7:0] mem[0:1023]; //1024 8-bit regs //memory 有1024个位置,每个位置放8位数据
- Accessing array elements
- Entire element:
//mem[index] 索引
mem[10]= 8‘b10101010
- Element subfield(needs temp storage)
reg [7:0] temp;
..
temp = mem[10];
var[6] = temp[2]; //mem[10][2]
- Limitation:Cannot access array subfield or entire array at once
var[2:9] = ??? //wrong 数组的2-9,不能进行切片赋值
- 数组是不允许进行切片赋值的
- vector是可以进行切片赋值的
- 没有多维数组,前面只是类似多维数组
reg ver[1:10] [1:100]; // wrong
- Arrays don't work for the Real data type
real r[1:10]; //wrong 不能用于Real类型
6 String
- Implemented with regs:
//一般8位存储一个字符
reg [8*13:1] string_val;// can hold up to 13 chars..
string_val = "Hello World";
string_val = "Hello"; //MS Bytes are filled with 0
string_val = "I am overflowed"; //超过存储空间会被截断,显示不全,存储的时候从低位开始存储,I显示不出来
- Escaped chars:
- \n--换行
- \t--tab键
- \--\
- \'--\'
- %%--%
7 Logical Operators--逻辑运算符
- &&--AND
- ||--OR
- !-NOF
- Result is one bit value:0,1 or x
A = 6; //非零数字表示真,1
B = 0;
C = x;
A && B //0
A || B //1
C || B //x
C && B //0
8 Bitwise Operators
按位操作
- &--按位与
- |--按位或
- ~--按位取反
- ^--按位异或
- ~^ or ^~ --按位同或
a = 4'b1010
b = 4'b1100
c = a ^ b = 0110
d = ~a = 0101
9 Reduction Operator
递减操作符(Reduction Operators)为一目运算符,后面跟一变量,如“&C”表示将C的第一位与第二位相与,再将结果与第三位相与,再与第四位.......一直到最后一位。
| 递减操作运算符 | 含义 |
|---|---|
| & | AND |
| ^ | XOR |
| ~& | NAND |
| ~ | |
| ~^ or^~ | XNOR |
- 单目运算符,满足多位输入,单位输出
对异或(^)运算的补充
异或运算符满足交换律与结合律
- 一组二进制数据进行异或操作,有奇数个1时,结果为1,有偶数个1时,结果为0。
一个无规律的二进制数据异或:
A = 1001010001110......0101001。
^A则可表示为: ^1001010001110......0101001 = 1^0^0^1^0......0^1^1^1^0
=(1^1^1...^1^1)^(0^0^0...^0^0)
= (1^1^1...^1^1)^0
- 当有奇数个1时,上式等价为1^0=1,当有偶数个1时,上式等价为0^0=0。
10 Shift Operator
--shift right
- <<--shift left
在移位过程中如果位数不够,用0进行填充
a = 4‘b1010
d = a >> 2 //d=0010
c = a << 1 //c=0100
03-Verilog语法的更多相关文章
- Verilog语法基础讲解之参数化设计
Verilog语法基础讲解之参数化设计 在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...
- verilog语法实例学习(4)
Verilog模块 Verilog中代码描述的电路叫模块,模块具有以下的结构: module module_name[ (portname {, portname})]; //端口列表 [parame ...
- verilog语法实例学习(1)
本文档中通过verilog实例来学习verilog语法.Verilog是一种硬件描述语言,它具有并发性和时序性.并发性是指不同硬件模块的同时操作,时序性是指信号的赋值或操作在时钟的边沿进行.由于作者本 ...
- verilog语法学习目录
verilog语法实例学习(1) Verilog中的注释 Verilog中的信号 标识符 信号的值 Verilog中的数字 Verilog中的参数 verilog语法实例学习(2) 线网类型 变量类型 ...
- 跟着我从零开始入门FPGA(一周入门XXOO系列)-1、Verilog语法
(本连载共七部分,这是第一部分) 作者:McuPlayer2013 (EETOP FPGA版块版主) 原帖地址:http://bbs.eetop.cn/thread-385362-1-1.html ...
- [Markdown] 03 进阶语法 第一弹
目录 1. YMAL 题头 2. 缩写 3. 强调 4. 自定义 <div> 标签 5. <cite> 标签 5. <code> 与 <br> 标签 6 ...
- verilog语法实例学习(12)
verilog中的综合和不可综合总结 Verilog中综合的概念 综合就是EDA工具或者说综合工具把我们编写的verilog代码转化成具体电路的过程.Verilog中有很多语法,结构,过程,语句,有些 ...
- verilog语法实例学习(6)
函数和任务 函数 https://wenku.baidu.com/view/d31d1ba8dd3383c4bb4cd283.html verilog中函数的目的是允许代码写成模块的方式而不是定义独立 ...
- verilog语法实例学习(5)
子电路模块 子电路模块的使用 一个verilog模块能够作为一个子电路包含在另一个模块中.采用这种方式,所有的模块都必须定义在一个文件中,那么verilog编译器就必须被告知每个模块的所属.模块例化的 ...
- verilog语法实例学习(2)
Verilog中的信号类型 线网类型 线网类型表示一个或多个门或者其它类型的信号源驱动的硬件连线.如果没有驱动源,则线网的默认值为z.verilog中定义的线网类型有以下几种: wire,tr ...
随机推荐
- sql语法巧用之not取反
数据库的重要性和通用性都不用说了,什么sql的通用性,sql优化之类的也不必说了,咱们今天来聊聊另一个有意思的话题:如何取一个筛选的反面案例. 1. 举几个正反案例的例子 为了让大家理解我们的假设场景 ...
- python实现鼠标手动截图(类似于QQ截图)
由于在网上找了很久,只找到按像素位置截图和全屏截图的,所以决定自己写一个. 本程序实现原理是现用PIL里的ImageGrab进行全屏截图,然后通过模拟鼠标操作,进行截图,最后删除全屏截图,只留下鼠标截 ...
- AngouriMath: 用于C#和F#的开源跨平台符号代数库
AngouriMath是一个MIT协议开源符号代数库.也就是说,通过AngouriMath,您可以自动求解方程.方程组.微分.从字符串解析.编译表达式.处理矩阵.查找极限.将表达式转换为LaTeX,以 ...
- Windows7下驱动开发与调试体系构建——4.在x64下使用汇编代码(x86下的_asm)
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html asm文件设置 在vs x64中无法使用_asm关键字,需要使用.asm文件. 按第 ...
- 空链接的作用以及<a href="#"></a>和<a href="javascript:;"></a>的区别
空链接的作用以及<a href="#"></a>和<a href="javascript:;"></a>的区别在 ...
- YC-Framework版本更新:V1.0.10
分布式微服务框架:YC-Framework版本更新V1.0.10!!! 本文主要内容: 1.V1.0.10版本更新主要内容2.YC-Framework相关系列文章分享 一.V1.0.10版本更新主要内 ...
- Goland环境中Go module配置
[现象] 从go vendor切换到go module之后,import包解析有问题.如下所示: 对应的go modules也没解析出来 [原因] 有两点原因: goland中go module配置存 ...
- tomcat下载安装&配置教程
tomcat下载安装&配置教程 1 安装jdk 1.1 安装jdk 1.2 安装JDK后设置环境变量 1.3 使环境变量生效 1.4 查看java版本 2 安装tomcat 2.1 在/usr ...
- 使用vite + vue3 + ant-design-vue + vue-router + vuex 创建一个后台管理应用
使用vite + vue3 + ant-design-vue + vue-router + vuex 创建一个管理应用的记录 使用vite 创建项目 我创建的node 版本是 v16.17.1 使用N ...
- java File类与文件输入/输出流:FileInputStream与FileOutputStream
java File类与文件输入/输出流 File类 File类是java.io包中唯一代表磁盘文件本身的类,该类主要用于文件和目录的创建.文件的查找和文件的删除等. 文件的创建与删除 1.File(S ...