Verilog语法

1基础知识 2数据类型 3运算符

一.基础知识

逻辑值
逻辑0:低电平, 对应电路GND
逻辑1:高电平, 对应电路VCC
逻辑X:未知, 有可能高电平,有可能低电平 肯定是高或者低
逻辑Z:高阻态,外部没有激励信号,悬空状态 他没有输入,可能高可能低可能在中间

数字进制格式
二进制 八进制 十进制 十六进制
b o d h
二进制 4’b0101 4表示位宽 b表示二进制,0101是十进制5 如果是’b0101 就是默认的32’b0101
十进制 4’d2表示四位十进制数字2(二进制0010) 如果是100 就是默认的32’d100
十六进制 4’ha表示四位十六进制数字a (二进制1010)
16’b1001_1010_1010_1001 = 16’h9AA9 下划线编译的时候忽略 是为了增加可读性

标识符
用于定义模块名 端口名 信号名等
任意一组字母 数字 $符号 和下划线 第一个必须是字母或者下划线,区分大小写
不建议大小写混合使用 普通内部信号建议全部小写,信号命名体现信号的含义,简洁清晰易懂

二.数据类型

三大数据类型:1.寄存器数据类型 2.线网数据类型 3.参数数据类型
真正在数据电路中起作用的是寄存器数据类型和线网数据类型

1.寄存器类型
寄存器表示一个抽象的数据存储单元,通过赋值语句可以改变寄存器存储的值 关键字是reg reg类型数据的默认初始值为不定值X
reg [31:0] delay_cnt;
[31:0]31到0表示寄存器的位宽,表示是一个32位的寄存器,高位在前面,低位写在后面 delay_cnt为寄存器名称
reg key_reg;
此时表示定义了一个名字为key_reg的1位的寄存器
reg类型的数据只能在always语句和initial语句中被赋值
如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器
如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线

2.线网类型
线网数据类型表示结构实体(例如门)之间的物理连线
线网类型的变量不能储存值,他的值是由驱动他的元件所决定的
线网数据类型包括wire型和tri型,其中最常用的就是wire类型
wire key__flag表示一个1位的wire类型的变量
驱动线网类型变量的元件有2、连续赋值语句、assign等
如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻的,即其值为Z

3.参数类型
参数其实就是一个常量 在Verilog HDL中用paramrter定义常量
parameter H_SYNC = 11’d41; //行同步 与C语言中的define有点像
可以一次定义多个参数,参数与参数之间需要用逗号隔开 每个参数定义的右边必须是一个常数表达式
参数性数据常用于定义状态机的状态、数据位宽和延迟大小等
采用标识符来代表一个常量可以提高程序的可读性和可维护性
在模块调用时可通过参数传递来改变被调用模块中已定义的参数

三.运算符
1.算术运算符

      • / % /也只能实现整除

2.关系运算符

< <= >= == !=

3.逻辑运算符
非! 与&& 或||

4.条件操作符
?; result=(a>=b)?a : b ;

5.位运算符
~取反 ~a 将a的每一位分别进行取反
& a&b将a的每个位与b相同的位进行相与
| 每个位进行相或
^ 每个位进行异或

6.移位运算符

  <<

4’b1001<<2=6’b100100 两种移位运算都用0来补充空位
4’b1001>>1=4’b0100 左移时位宽增加 右移时位宽不变

  1. 拼接运算符
    {} {a,b} 将a和b拼接起来作为一个新信号
    c = {a,b[3:0] }; 假设a的位宽为8位 b的位宽为4位 c[11:0] = { a[7;0],b[3:0] } 拼接之后c为12位

程序框架程序框架程序框架程序框架程序框架程序框架程序框架程序框架程序框架程序框架程序框架程序框架程序框架程序框架

程序框架
1.注释 // /* */

2.关键字
一大堆关键字 很多很多
modul 模块开始定义
input 输入端口定义
output 输出端口定义
inout 双向端口定义…等

3.程序框架
Verilog的基本设计单元是模块 C语言的基本设计单元是函数
一个模块由两部分组成 一部分描述接口 另一部分描述逻辑功能
module block(a,b,c,d) // 定义模块名 给出模块的端口列表
input a,b; //表示端口有哪些输入信号
output c,d; //表示端口有哪些输出信号 IO说明

assign c = a | b; //assign给线网类型的数据赋值
assign d = a & b; //模块的功能定义

endmodule
每个Verilog程序包括四个主要部分 端口定义 IO说明 内部信号声明 功能定义
Verilog有可综合的模块是可以生成物理的实际电路 不可综合的模块可以用来做仿真文件,测试模块
在always块中,逻辑是顺序执行的,而多个always块之间是并行的

4.模块调用

你可能感兴趣的:(Verilog语法)