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
  1. Entire element:
//mem[index] 索引
mem[10]= 8‘b10101010
  1. 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,不能进行切片赋值
  1. 数组是不允许进行切片赋值的
  2. vector是可以进行切片赋值的
  3. 没有多维数组,前面只是类似多维数组
reg ver[1:10] [1:100]; // wrong
  1. 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:
  1. \n--换行
  2. \t--tab键
  3. \--\
  4. \'--\'
  5. %%--%

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语法的更多相关文章

  1. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

  2. verilog语法实例学习(4)

    Verilog模块 Verilog中代码描述的电路叫模块,模块具有以下的结构: module module_name[ (portname {, portname})]; //端口列表 [parame ...

  3. verilog语法实例学习(1)

    本文档中通过verilog实例来学习verilog语法.Verilog是一种硬件描述语言,它具有并发性和时序性.并发性是指不同硬件模块的同时操作,时序性是指信号的赋值或操作在时钟的边沿进行.由于作者本 ...

  4. verilog语法学习目录

    verilog语法实例学习(1) Verilog中的注释 Verilog中的信号 标识符 信号的值 Verilog中的数字 Verilog中的参数 verilog语法实例学习(2) 线网类型 变量类型 ...

  5. 跟着我从零开始入门FPGA(一周入门XXOO系列)-1、Verilog语法

    (本连载共七部分,这是第一部分) 作者:McuPlayer2013   (EETOP FPGA版块版主) 原帖地址:http://bbs.eetop.cn/thread-385362-1-1.html ...

  6. [Markdown] 03 进阶语法 第一弹

    目录 1. YMAL 题头 2. 缩写 3. 强调 4. 自定义 <div> 标签 5. <cite> 标签 5. <code> 与 <br> 标签 6 ...

  7. verilog语法实例学习(12)

    verilog中的综合和不可综合总结 Verilog中综合的概念 综合就是EDA工具或者说综合工具把我们编写的verilog代码转化成具体电路的过程.Verilog中有很多语法,结构,过程,语句,有些 ...

  8. verilog语法实例学习(6)

    函数和任务 函数 https://wenku.baidu.com/view/d31d1ba8dd3383c4bb4cd283.html verilog中函数的目的是允许代码写成模块的方式而不是定义独立 ...

  9. verilog语法实例学习(5)

    子电路模块 子电路模块的使用 一个verilog模块能够作为一个子电路包含在另一个模块中.采用这种方式,所有的模块都必须定义在一个文件中,那么verilog编译器就必须被告知每个模块的所属.模块例化的 ...

  10. verilog语法实例学习(2)

    Verilog中的信号类型 线网类型 线网类型表示一个或多个门或者其它类型的信号源驱动的硬件连线.如果没有驱动源,则线网的默认值为z.verilog中定义的线网类型有以下几种:     wire,tr ...

随机推荐

  1. 3.pygame快速入门-游戏循环及动画实现

    游戏循环的开始,意味着游戏的正式开始,游戏循环的作用如下 1.保证游戏不会直接退出 2.变化图像的位置--动画效果 3.检测用户交互--按键.鼠标等     游戏时钟 pyagame提供了一个pyga ...

  2. Nacos基本学习

    一.注册中心 1.启动 1.下载nacos 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/ali ...

  3. ES6 学习笔记(九)Set的基本用法

    1 基本用法 set类似于数组,它的成员是唯一的,当有多个相同的值,只会保留一份. 1.1 创建方法 Set本身是一个构造函数,用来生成Set实例,如: const s = new Set() let ...

  4. 类视图函数 VIEW

    常用的视图函数: ListView.DetailView.UpdateView 1 ListView object_list:此属性表示对象的列表 常用场景: 1.展示数据库中信息: 2.在展示信息时 ...

  5. 利用递归的方式在JSON 数据中找到某个节点的多有父节点

    在项目中遇到的问题-- 一个级联题,知道答案id  后将每一级的选项展示出来 例如 级联题的 json 数据是 [ { name: '北京', id: 1, children:[ { name: '朝 ...

  6. js高级之函数高级部分

    基于尚硅谷的尚硅谷JavaScript高级教程提供笔记撰写,加入一些个人理解 github源码 博客下载 原型与原型链 prototype : 显式原型属性,它默认指向一个Object空对象(即称为: ...

  7. Atlassian Confluence 远程代码执行漏洞(CVE-2022-26134)漏洞复现

    目录 免责声明: Atlassian Confluence 远程代码执行漏洞(CVE-2022-26134)漏洞复现 漏洞概述: 影响版本: 漏洞复现: 利用POC: 利用过程: 修复建议: 参考 免 ...

  8. 【Spring系列】- Bean生命周期底层原理

    Bean生命周期底层原理 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 前言 上次学到动 ...

  9. Spring Security(5)

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 经常上网的人都应该有这样的体验:很多网站或者APP只需要第一次登录时输入用户名和密码之后,后面很长一段时间内就不需要再次输入密码了.这确实是一个 ...

  10. MyBatis-Plus 分页插件过时

    引用:https://blog.csdn.net/zyw562123314/article/details/108903456//分页插件老版本过时 旧版本配置 @Bean public Pagina ...