目录

1 、Verilog HDL基本结构

2 、数据类型

(1)寄存器型

(2)线型

(3)符号常量

(4)寄存器数组

3 、 运算符

(1)算术运算符

(2)逻辑运算符

(3)按位运算符

(4)关系运算符

(5)等式运算符

(6)移位运算符

(7)条件运算符

(8)拼位运算符

4 、语句

(1)赋值语句

(2)结构说明语句(always+initial)

(3)if语句

(4)case语句

(5)循环语句(repeat+forever+while+for)


1 、Verilog HDL基本结构

1. Verilog HDL程序是由模块构成的。每个模块嵌套在module和endmodule声明语句中。

2 每个Verilog HDL源文件中只有一个顶层模块,其他为子模块。可以每个模块写一个文件。

3.每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行行为逻辑描述。

4.模块中的时序逻辑部分在always块的内部,在always块中只能对寄存器变量赋值。

5.模块中对端口或其他wire型变量的赋值,必须在always块的外部使用assign语句,通常是将寄存器的值送出

6.程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。

7. 除了endmodule语句、begin_end语句和fork_join语句外,每个语句和数据定义的最后都要加分号

8.可用/*.....*/和//...对程序的任何部分作注释。加上必要的注释,可以增强程序的可读性

2 、数据类型

首先对数的表示方式进行讲解,Verilog只能表示二进制的逻辑值,可以为0,1,高阻,未知

如下图所示, 数在Verilog里面有3种表示

Verilog的数据类型分为 寄存器型(reg) 线型(wire) 符号常量(parameter) 寄存器数组

(1)寄存器型

之所以reg叫做寄存器型,是因为数字电路中的触发器只在时钟有效边沿到来的时候,保存的值才能够发生改变。

reg型信号的定义格式如下:
定义一个n位的寄存器变量 : reg [n-1:0]变量名;
定义m个n位的寄存器变量 : reg [n-1:0]变量名1,变量名2,....变量名m;

下面给出2个例子:
reg [7:0] a, b, c;    //a, b, c都是位宽为8位的寄存器
reg d;   //1位的寄存器d

(2)线型

wire型信号的定义格式如下:

定义一个n位的wire变量 : wire [n-1:0]变量名;

定义m个n位的wire变量 : wire [n-1:0]变量名1,变量名2,.变量名m;

下面给出2个例子:

wire [7:0] a, b, c;   // a, b, c都是位宽为8位的wire

wire d;    //d是1位的wire

(3)符号常量

如果用关键词parameter来定义一个标识符,代表一个常量,这个常量就被称为符号常量。

例如: parameter width=3;//符号常量width的值是3,如果未进行重定义,当在程序中出现width时就用3代替。

同样的,可以一次性定义多个符号常量,parameter idle=1,one=2,two=3,stop=4;//定义了4个符号常量。如果未进行重定义,当代码中出现idle就用1代替,出现one就用2代替,出现tow就用3代替,出现stop就用4代替。

但是符号常量可以被重定义,使用#即可

如下图,一开始time_delay=5  time_count=10,重定义之后time_delay=4  time_count=8

(4)寄存器数组

存储器实际上是一个寄存器数组。

存储器使用如下方式定义reg [ msb: lsb] memory1 [ upper: lower]

(upper:lower)代表寄存器个数,(msb是最高有效位,lsb是最低有效位)代表每个寄存器的位数

例如:

reg[3:0] mymem1[63:0];       //mymem1为64个4位寄存器的数组。

reg dog [1:5];         //dog为5个1位寄存器的数组。

dog[4]= 1;            //合法赋值语句,对其中一个1位寄存器赋值。

dog[1:51]= 0;      //合法赋值语句,对存储器大范围赋值。

3 、 运算符

(1)算术运算符

算术运算符 说明
+
-
*
/
% 取模(余数)

在进行整数的除法运算时,结果要略去小数部分,只取整数部分;

进行取模运算时( %) 结果的符号位采用模运算符中第一个操作数的符号。例如,-10%3结果-1,11%-3 结果为2。

在进行算术运算时,如果某一个操作数有不确定的值x,则整个结果也为不确定值x。

(2)逻辑运算符

逻辑运算符 说明
&& 逻辑与
|| 逻辑或
逻辑非

逻辑运算最常用于条件判断语句。逻辑运算只区分真假,而不管是什么数值。逻辑运算的输入4'ha1和4'h01是没有区别的,都是逻辑真,而0为逻辑假。一般来说,逻辑运算的结果要么为真(1)要么为假(0)

特例是如果有一个输入为未知X,那么结果也是X。

例如,4'ha1&&4h01是1,4'ha1&&4h00是0。

■对于逻辑与或:只有两个输入都是0的时候,逻辑或的结果才是0。
■对于逻辑非:当输入为非0值,输出就是0。

(3)按位运算符

按位运算符 说明
& 按位与
| 按位或
~ 按位取反
^ 按位异或
~^   ^~ 按位同或

按位运算符是对照数据的每一位进行运算, 例如0101&1100=0100,0101|1100=1101

ps:异或是指如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

同或是指如果a、b两个值不相同,则同或结果为0。如果a、b两个值相同,同或结果为1。

(4)关系运算符

关系运算符 说明
< 小于
<= 小于等于
> 大于
>= 大于等于

关系运算符和逻辑运算符一般用于条件判断语句。

关系运算结果为1位的逻辑值1(真)或0(假),但也可能是x(未知)。关系运算符根据关系运算的结果是真还是假,用于条件判断。

关系运算时,若关系为真,则返回值为1;若声明的关系为假,则返回值为0;若某操作数为不定值x,则返回值也一定为x。

(5)等式运算符

等式运算符 说明
== 等于
!= 不等于
=== 全等于
!== 全不等于

"=="和"!="称作逻辑等式运算符,其结果由两个操作数的值决定。由于操作数可能是x或z,其结果可能为x。

"==="和"!=="常用于case表达式的判别,又称作case等式运算符。其结果只能为0和1。如果操作数中存在x和z,那么操作数必须完全相同结果才为1,否则为0。

注意"=="和"="是完全不同的,"="是对寄存器赋值使用的。

(6)移位运算符

移位运算符 说明
<< 左移
>> 右移

a>>n中a代表要进行向右移位的操作数,n代表要移几位。a<<n表示将a逻辑左移n位。

这两种移位运算都用0来填补移出的空位。

例如a是一个5位的寄存器,那么a=4'b1001<<1,a的结果就是5'b10010。但是当a是一个4位的寄存器,那么a=4'b1001<<1,a的结果就是4'b0010。

(7)条件运算符

用法: assign wire类型变量=条件?表达式1:表达式2;

如果满足条件,变量=表达式1,否则,变量=表达式2

(8)拼位运算符

使用拼接运算符可以将变量任意组合后输出或送给另一个变量。

用法:{信号1的某几位,信号2的某几位,......信号n的某几位}

{m,-a,b[3:0],w,3'b101}等同于{a,b[3],b[2],b[1],b[0],w,1b'[1],1'b[0],1'b[1]}

{4{w}}等同于{w,w,w,w}

{b{3{a,b}}等同于{b,a,b,a,b,a,b}

4 、语句

(1)赋值语句

(2)结构说明语句(always+initial)

ps:

(3)if语句

(4)case语句

(5)循环语句(repeat+forever+while+for)

Verilog HDL语言总结(全)相关推荐

  1. spwm控制算法c语言实现,采用Verilog HDL语言与DDS技术实现SPWM控制算法的FPGA设计

    其部分程序代码如下: case(state1) A: //初始化状态 begin ADDRES1<=addr1; //时分复用第一路地址 READ_EN<=1′b1; //读使能开 NEX ...

  2. Verilog HDL 语言基础

    目录 前言 一.Verilog HDL模块基本结构 1.模块声明&端口定义&数据类型声明 二.数据类型 1.信号状态 2.整数 2.1.标准形式 2.2.补充 3.实数 4.字符串 三 ...

  3. 有限状态机设计实例之空调控制器(Verilog HDL语言描述)(仿真与综合)(附用Edraw(亿图)画状态转移图)

    目录 前言 空调控制器 简介 状态转移图如下: Verilog HDL语言描述 测试文件 仿真图 ISE综合 RTL Schematic Technology Schematic 前言 关于工具的使用 ...

  4. 模24的8421BCD码计数器(Verilog HDL语言描述)(仿真与综合)

    目录 前言 原理 Verilog HDL程序设计 测试代码 仿真波形图 ISE综合后 RTL Schematic Technology Schematic 前言 本博文用Verilog HDL语言描述 ...

  5. 级联模60计数器(Verilog HDL语言描述)(仿真与综合)

    目录 前言 模60计数器 Verilog HDL语言描述 测试文件 仿真波形 RTL Schematic Technology Schematic 前言 看这篇文章前,推荐先看看模10计数器和模6计数 ...

  6. 模6计数器以及模10计数器(Verilog HDL语言设计)(Modelsim仿真与ISE综合)

    目录 前言 模6计数器 Verilog HDL语言描述 测试文件 仿真电路图 RTL Schematic Technology Schematic 模10计数器 Verilog HDL语言描述 测试文 ...

  7. 通过仿真和综合认识T触发器(Verilog HDL语言描述T触发器)

    这个系列的博文已经写过了两篇,分别是通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)和通过仿真和综合认识JK触发器(Verilog HDL语言描述JK触发器),分析的方法是完全并行 ...

  8. 通过仿真和综合认识JK触发器(Verilog HDL语言描述JK触发器)

    上篇博文写了用仿真和综合来认识D触发器(通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)),这篇博文采用完全并行的方式来认识JK触发器. 让我们迅速进入正题吧. J-K触发器的Ve ...

  9. Verilog HDL语言要素

    Verilog HDL语言要素 Verilog HDL的基本要素,包括标识符.空白符.注释.数值和字符串.数据类型及运算符等. 标识符 Verilog HDL中的标识符(identifier)可以是任 ...

  10. Verilog HDL 语言基础语法

    模块的结构 (1)Verilog的基本设计单元是"模块"(block). (2)一个模块由两部分组成,一部分描述接口,另一部分描述逻辑功能. (3)每个Verilog程序包括4个主 ...

最新文章

  1. PYTHON1.day01
  2. mysql 多配置文件实例安装_mysql安装之多实例多配置文件安装
  3. rodbc 连接oracle,在R中加密密码 – 使用RODBC连接到Oracle DB
  4. FineUI 页面跳转
  5. 双机通信c语言程序,上传一个自己编写的I2C双机通信程序
  6. hexo next 主题安装 livere 评论插件
  7. C# 合并多种格式文件为PDF
  8. pycharm怎么做html网页_html下拉菜单怎么做
  9. 毕设题目:Matlab图像重建
  10. 【优化算法】精子群优化算法(SSO)【含Matlab源码 1465期】
  11. 联想android电视软件下载,#联想智能电视普及风暴#绕开“乐商店”,大叔教你一步步在智能电视上安装第三方APK...
  12. 报计算机用几寸照片,在电脑显示的2寸照片的大小是几×几?
  13. 2-2.基金的投资交易与结算
  14. 【VS2015】Win7 X64上面安装VS2015
  15. SPI专题(二)——STM32驱动FLASH(W25Q64)
  16. 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别位于数组的两端。 当第0号栈的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时,该栈为空。
  17. 我们应如何度过自己的大学生活?
  18. 计算机组成原理框架结构图
  19. 智慧社区的现状分析及发展前景
  20. bash: setenv: command not found

热门文章

  1. Centos7 Mysql 一键安装(设置默认密码)、一键卸载脚本
  2. AI为职业病做了啥贡献,了解一下
  3. 宇宙精密调治的再思《基督教与科学》第二十三课
  4. 关于亲现实儿童游戏系统的解释
  5. 我的职业生涯中所获取的职业技能证书
  6. Android 建立自己的手写笔画图案 Gesture Builder
  7. Unity UGUI图文混排源码--优化版
  8. 企业业财一体化落地难?ERP系统推进业财融合,助力成功
  9. android文件管理器u盘,Android U盘文件显示在文件管理器
  10. 【USACO】2017 December Contest, Platinum题解