verilog基本语法
verilog 基本语法
verilog 基本语法Verilog基本语法Verilog是一种硬件描述语言,用于描述数字电路的行为和结构。
它具有强大的建模能力,能够描述复杂的数字系统,并用于逻辑设计和硬件验证。
本文将介绍Verilog的基本语法,以帮助读者对这种语言有一个基本的了解。
1. 模块声明在Verilog中,所有的设计都是通过模块来实现的。
模块是Verilog 的基本组织单位,类似于其他编程语言中的函数或类。
模块声明由关键字module开头,后面跟着模块的名称和输入输出端口的定义。
例如:module my_module(input a, b, output c);// 模块的主体endmodule2. 端口声明在模块声明中,使用关键字input和output来声明输入和输出端口。
输入端口用于接收信号,输出端口用于输出信号。
端口可以是单个的信号,也可以是信号的数组。
例如:input a, b; // 单个输入端口output c; // 单个输出端口input [7:0] d; // 输入信号的数组3. 信号声明在Verilog中,使用关键字wire、reg、integer等来声明信号。
wire用于声明连续的信号,reg用于声明时序的信号,integer用于声明整数变量。
例如:wire a, b; // 连续信号reg [7:0] c; // 时序信号,有8位integer d; // 整数变量4. 时钟和复位在数字电路中,时钟和复位信号是非常重要的。
在Verilog中,可以使用关键字input来声明时钟和复位信号,并在模块的输入端口中定义。
例如:input clk; // 时钟信号input rst; // 复位信号5. 运算符Verilog支持各种运算符,包括算术运算符、逻辑运算符、位运算符等。
算术运算符用于执行加减乘除等操作,逻辑运算符用于执行与或非等逻辑操作,位运算符用于执行位操作。
例如:a =b + c; // 加法运算d = ~(a & b); // 与运算和非运算6. 控制结构在Verilog中,可以使用if语句、case语句等控制结构来实现条件判断和多路选择。
Verilog 语言的特点和基本语法
1.EDA
▪ EDA(Electronic Design Automation )
▪ 电子设计自动化
▪ 特点:硬件的设计“软件化”
软件设计 借助于EDA软件 硬件描述语言 (VHDL或Verilog) 计算机仿真
硬件设计 下载接口 PLD芯片
2021/8/18
4
2.HDL
▪ HDL(Hardware Description Language)
字、( $ )或( _ )。 • 最长可以是1023个字符 • 标识符区分大小写,sel和SEL是不同的标识符 • 模块、端口和实例的名字都是标识符
module MUX2_1 (c, a, b, sel);
output c; input a, b, sel;
Verilog标识符
not not1 (sel_, sel);
endmodule
sum[2:0]
cout
cin
adder
a[2:0]
b[2:0]
数据流语句
▪这个例子描述了一个三位的加法器。从例子中可以看出整个 Verilog HDL程序是嵌套在module和endmodule声明语句里的, 只出现了一个assign语句。
2021/8/18
10
例SR触发器模块
2021/8/18
19
1.4 Verilog的数据类型及逻辑系统
学习内容:
• 学习Verilog逻辑值系统 • 学习Verilog中不同类的数据类型 • 理解每种数据类型的用途及用法 • 数据类型说明的语法
2021/8/18
20
1.主要数据类型
Verilog主要有三类(class)数据类型: • net (线网) : 表示器件之间的物理连接 • register (寄存器) :表示抽象存储元件 • parameters(参数) : 运行时的常数(run-time constants)
Verilog基本语法
18
整数和实数常量小结
整数的大小可以定义也可以不定义。整数表示为: 数字中(_ )忽略,便于查看 没有定义大小(size)整数缺省为32位 /*特别注意*/ 缺省数基为十进制 数基(base)和数字(16进制)中的字母无大小写之分 当数值value大于指定的大小时,截去高位。如 2'b1101表示的是 2'b01
13
3.2.1 术语及定义
1.空白符:空格、tabs及换行 2. 标志符(Identifier):Verilog中对象(如模块或信号)的名字 3.LSB:最低有效位(Lease significant bit) 4.MSB:最高有效位(Most significant bit)
14
3.2.2 空白符和注释
– include保存在文件中的全局的或经常用到的一些定义,如文本宏
– 在模块内部include一些任务(tasks),提高代码的可维护性。
26
3.2.10 文本替换`define (了解)
编译指导`define提供了一种简单的文本替换的功能 `define <macro_name> <macro_text>
多行注释,在/* */内
and and2 (b1, b, sel);
or or1 (out, a1, b1);
endmodule
15
3.2.3 Verilog采用的四值逻辑系统
‟0‟, Low, False, Logic Low, Ground,VSS, Negative Assertion
„1‟, High, True, Logic High, Power, VDD, VCC, Positive Assertion
FPGA笔记之verilog语言(基础语法篇)
FPGA笔记之verilog语言(基础语法篇)笔记之verilog语言(基础语法篇)写在前面:verilogHDL语言是面对硬件的语言,换句话说,就是用语言的形式来描述硬件线路。
因此与等软件语言不同,假如想要在实际的中实现,那么在举行verilog语言编写时,就需要提前有个硬件电路的构思和主意,同时,在编写verilog语言时,应当采纳可综合的语句和结构。
1. verilog 的基础结构1.1 verilog设计的基本单元——module在数字电路中,我们经常把一些复杂的电路或者具有特定功能的电路封装起来作为一个模块用法。
以后在运用这种模块化的封装时,我们只需要知道:1.模块的输入是什么;2.模块的输出是什么;3.什么样的输入对应什么样的输出。
而中间输入是经过什么样的电路转化为输出就不是我们在用法时需要特殊重视的问题。
当无数个这样的模块互相组合,就能构成一个系统,解决一些复杂的问题。
verilog语言的基础结构就是基于这种思想。
verilog中最基本的模块是module,就可以看做是一个封装好的模块,我们用verilog来写无数个基本模块,然后再用verilog描述多个模块之间的接线方式等,将多个模块组合得到一个系统。
那么一个module应当具有哪些要素呢?首先对于一个module,我们应当设计好其各个I/O,以及每个I/O的性质,用于与模块外部的信号相联系,让用法者知道如何连线。
第二,作为开发者,我们需要自己设计模块内部的线路来实现所需要的功能。
因此需要对模块内部浮现的变量举行声明,同时通过语句、代码块等实现模块的功能。
综上所述,我们把一个module分成以下五个部分:模块名端口定义I/O解释第1页共9页。
第三讲 verilog的基本语法
TOP HA
18
参数值的模块引用
module TOP3(NewA,NewB,NewS,NewC); input NewA, NewB; output NewS,NewC; HA #(5,2) Ha1 (NewA, NewB, NewS, NewC);
//第1个值5赋给参数AND_DELAY,该参数在模块HA中说明。 //第2个值2赋给参数XOR_DELAY,该参数在模块HA中说明。
asiccenterarnoldshi在过程块alwaysinitial中对变量赋值时忘了把它定义为寄存器类型reg或已把它定义为连接类型了wire把实例的输出连接出去时把它定义为寄存器类型把模块的输入信号定义为寄存器类型
TJIC
第三章 verilog的基本语 verilog的基本语 法
天津大学电子科学与技术系史再峰 shizaifeng@
连续赋制语句用于把值赋给线网型变量(不能为寄 存器型变量赋值) 语句形式为:assign A = B & C;
连续赋值语句在什么时候执行呢? 只要在右端表达式 的操作数上有事件(事件为值的变化)发生时,表达式 即被计算;如果结果值有变化,新结果就赋给左边的 线网。
28
连续赋值的目标类型
标量线网 向量线网 向量的常数型位选择 ,
endmodule
19
课堂练习课堂练习-参数传递
假定一个模块为BK,内部 两个参数P1,P2;另外一 个模块为HA,内部参数P3, P4 其在TOP模块中实例化调 用的名称分别为U1, U2 请尝试在top模块中用两种 不同的方法改变其参数值 p1-p4分别为1,2,3,4
TOP U2 U1
20
二、变 量
24
补充: 补充:CMOS NOR
Verilog模块与基本语法
用实例元件
and #2 ul (q,a,b); 用 always块
always @(posedge clk or clr) begin if (clr) q <=0; else if (en)q <=d; end
组合逻辑
时序逻辑 组合逻辑
在字符串中可用 C 语言中的各种格式控制符
如:\t, \”, \\…
在字符串中可用 C 语言中的各种数值型式控制符(有些不同)
如:%b二进制%o八进制%d
十进制
%h
十六进制
%t
时间类型
%s
字符串类型
23
Verilog设计
特殊字符表示 \n \t \\
\ooo
%%
意义 换行符 Tab键 符号\ 3位8进制数表示符的ASCII
I/O声明
• 输入口: input [信号位宽-1: 0] 端口名i; • 输出口: output [信号位宽-1: 0] 端口名j; • 输入/输出口: inout [信号位宽-1: 0] 端口名k;
此为VerilogHDL-1995标准 风格
6
Verilog设计
2.1 模块结构—— 端口和I/O声明
a d
b Block1
c
e
思考:如果设计修改添加了若干 端口,“端口命名法”的优势…
Block1 dut1(in_a, in_b, in_c, ou_d, ou_e);
方法2:
Block1 dut2(.a(in_a), .d(ou_d), .b(in_b));
比较:方法2不必严格按照端口的顺序对应,提高了程序 的可读性和可移植性;
verilog知识点总结
verilog知识点总结Verilog是一种硬件描述语言(HDL),用于描述数字电路和系统,它广泛应用于数字系统设计和仿真领域。
本文将总结一些Verilog 的重要知识点,以帮助读者更好地理解和应用Verilog。
一、Verilog的基本语法Verilog的基本语法包括模块声明、端口声明、信号声明、数据类型、运算符等。
Verilog中的模块是设计的基本单元,模块声明包括模块名和端口声明。
端口可以是输入、输出或双向的。
信号声明用于定义内部信号,可以是寄存器或线网类型。
Verilog支持多种数据类型,包括整数、浮点数、向量、数组等。
Verilog还提供了丰富的运算符,包括算术运算符、逻辑运算符、位运算符等。
二、组合逻辑电路描述Verilog可以用来描述各种组合逻辑电路,如与门、或门、非门等。
通过使用逻辑运算符和条件语句,可以很方便地描述组合逻辑电路的功能。
Verilog还提供了多种语法结构,如if语句、case语句等,用于描述复杂的逻辑功能。
三、时序逻辑电路描述时序逻辑电路是一种带有状态的电路,Verilog可以用来描述各种时序逻辑电路,如触发器、计数器、状态机等。
通过使用时钟信号和触发器,可以实现电路的时序行为。
Verilog提供了多种触发器类型,如D触发器、JK触发器、T触发器等,可以根据实际需求选择合适的触发器类型。
四、模块实例化和层次化设计Verilog支持模块的实例化和层次化设计,可以将一个模块实例化为另一个模块的一部分。
通过模块实例化,可以方便地实现模块的复用和层次化设计。
层次化设计可以使整个系统更加清晰和模块化,方便调试和维护。
五、仿真和验证Verilog可以用于对设计进行仿真和验证,以确保设计的正确性。
Verilog提供了仿真器,可以对设计进行时序仿真和波形查看。
通过仿真,可以验证设计的功能和时序行为是否符合要求。
Verilog 还支持测试向量的生成和自动验证,可以自动生成测试向量并进行自动验证。
verilog基本语法
verilog基本语法
1. 模块:verilog模块用于描述感兴趣的功能系统以及设备行为,从而给出输入和输出之间的关系。
2. 变量:verilog中的变量可以定义为硬件控制的行为或信号路径。
3. 宏定义:verilog使用宏`define`来定义新的字符或文本,可用于
提高程序可读性和管理性。
4. 注释:verilog支持两种注释形式,即行注释和块注释,行注释以
`//`开头,块注释以`/*`开头,以 `*/`结尾。
5. 关键字:verilog使用了一系列关键字来指定硬件控制行为,输入、输出、时序延迟和引用等。
6. 命令:verilog提供了一系列命令来描述功能,包括`initial`,
`always`,`@`和`begin`等等。
7. 模型:verilog中的模型用于定义和控制硬件的输入和输出行为,
这些模型可以被定义为多个状态和条件的序列。
verilog语法基础
verilog语法基础Verilog语法基础Verilog是一种硬件描述语言(HDL),用于描述数字电路和系统。
它是一种基于事件的语言,能够描述电路的结构和行为。
本文将介绍Verilog语法的基础知识,包括模块、端口、信号、赋值和运算等。
一、模块(Module)在Verilog中,模块是描述电路的基本单元。
一个模块可以包含多个端口和信号,并定义了电路的功能和结构。
模块的定义使用关键字module,后跟模块的名称和端口列表。
二、端口(Port)Verilog中的端口是模块与外部环境进行通信的接口。
端口可以是输入端口、输出端口或双向端口。
输入端口用于接收外部信号,输出端口用于输出信号至外部,而双向端口则可同时进行输入和输出。
端口的定义使用关键字input、output或inout,后跟端口的类型和名称。
三、信号(Signal)Verilog中的信号用于在模块内部传递和存储数据。
信号可以是寄存器类型或线网类型。
寄存器类型信号用于存储数据,线网类型信号用于传递数据。
信号的定义使用关键字reg或wire,后跟信号的宽度和名称。
四、赋值(Assignment)在Verilog中,使用赋值语句将值分配给信号或变量。
赋值语句可以是阻塞式赋值或非阻塞式赋值。
阻塞式赋值使用等号(=)将右侧的值赋给左侧的信号,而非阻塞式赋值使用双等号(<=)进行赋值。
赋值语句的左侧可以是信号或变量,右侧可以是常数、信号、变量或表达式。
五、运算(Operator)Verilog中支持多种运算,包括算术运算、逻辑运算、位运算和比较运算等。
算术运算包括加法、减法、乘法和除法等;逻辑运算包括与、或、非和异或等;位运算包括位与、位或、位非和位异或等;比较运算包括等于、不等于、大于、小于等。
运算符可以用于常数、信号、变量或表达式之间的运算。
六、条件语句(Conditional Statement)Verilog中的条件语句用于根据条件选择执行不同的操作。
12_语法篇_Verilog基础语法
说明
a 大于 b a 小于 b a 大于等于 b a 大于等于 b a 等于 b a 不等于 b
Verilog基础语法 –运算符
逻辑运算符:
符号 ! &&
||
使用方法
说明
!a a && b a || b
a的非,如果a为0,那么a的非是1。 a 与上 b,如果a和b都为1,a&&b结果才为 1,表示真。 a 或上 b,如果a或者b有一个为1,a||b结果 为1,表示真。
下面我们分别对这些运算符进行介绍。
Verilog基础语法 –运算符
算术运算符:
符号 + * / %
使用方法
a+b a-b a*b a/b a%b
说明
a 加上 b a 减去 b a 乘以 b a 除以 b a 模除 b
Verilog基础语法 –运算符
关系运算符:
符号
> < <= >= == !=
使用方法
a^b
将 a 的每个位与 b 相同的位进行异或
Verilog基础语法 –运算符
移位运算符:
符号
<< >>
使用方法
a << b a >> b
说明
将 a 左移 b 位 将 a 右移 b 位
Verilog基础语法 –运算符
拼接运算符:
符号 {}
使用方法 {a,b}
说明
将 a 和 b 拼接起来,作为一个 新信号
Verilog基础语法 –运算符
运算符的优先级:
verilog语法基本知识
verilog语法基本知识Verilog语法基本知识Verilog是一种硬件描述语言,用于设计数字电路和系统。
它是一种结构化的编程语言,具有高度的抽象性和可重用性。
本文将介绍Verilog 的基本语法知识。
1.模块定义在Verilog中,一个模块是一个独立的实体,可以包含多个输入和输出端口以及内部逻辑。
模块定义的基本形式如下:module module_name(input port_list, output port_list);//内部逻辑endmodule其中,module_name为模块名称,input port_list为输入端口列表,output port_list为输出端口列表。
2.端口定义在模块定义中,可以定义多个输入和输出端口。
每个端口都有一个名称和数据类型。
例如:input clk; //定义一个时钟输入端口output reg [7:0] data_out; //定义一个8位输出端口3.数据类型Verilog支持多种数据类型,包括整数、浮点数、布尔值、向量等。
整数类型可以是有符号或无符号的,并且可以指定位宽。
例如:reg signed [7:0] num1; //有符号8位整数类型reg unsigned [15:0] num2; //无符号16位整数类型浮点数类型包括实数和双精度实数。
例如:real num3; //实数类型realtime num4; //双精度实数类型布尔值类型包括true和false。
例如:wire flag; //布尔值类型向量类型可以表示多位数据,例如:reg [7:0] data_in; //8位向量类型4.运算符Verilog支持多种运算符,包括算术运算符、比较运算符、逻辑运算符等。
算术运算符包括加、减、乘、除等。
例如:a =b + c; //加法运算b = d * e; //乘法运算比较运算符包括等于、不等于、大于、小于等。
例如:if(a == b) begin //判断a是否等于b//执行代码end逻辑运算符包括与、或、非等。
verilog门电路基本语法
verilog门电路基本语法Verilog是一种硬件描述语言,用于描述数字电路系统。
它可以用于门电路设计,数字系统设计和集成电路设计等。
Verilog门电路基本语法是初学者必须掌握的知识。
下面将详细讨论Verilog门电路基本语法。
1. 模块定义Verilog中的模块定义是一个模块层次结构的起点。
模块内定义了模块的输入,输出和内部结构。
模块定义的基本语法如下:module module_name(input input_list, output output_list);声明模块的输入和输出,例如:module and_gate(input a, input b, output y);定义了一个and门电路,输入有两个信号a和b,输出为信号y。
2. 线声明在Verilog中,需要声明输入输出信号之间的线。
声明线的关键字是wire。
线的声明基本语法如下:wire signal_name;例如,在and门电路中,需要连接a和b输入信号,连接y输出信号,因此需要声明这三个信号:wire a;wire b;wire y;3. 逻辑语句Verilog中的逻辑语句用于实现门电路逻辑。
逻辑语句中的关键字包括and,or,not和nand等。
基本语法如下:and (output, input1, input2);or (output, input1, input2);not (output, input);nand (output, input1, input2);例如,and (y, a, b)表示将输入信号a和b与and门电路的逻辑电路进行运算,输出结果为y。
4. always块always块是Verilog中一个很关键的语句块,用于模拟门电路的时序行为。
always语句块基本语法如下:always @(posedge clk)begin// code blockend例如,always @(posedge clock)表示在时钟上升沿时执行代码块。
Verilog 基本语法整理
可综合的verilog语法是可以硬件实现的
parameter定义的只用于该文件, define定义的可应用于整个工程
例子1 一个简单的与门
如果没有定义输入输出是什么类型,默认为wire 如果定义reg a,则出错,因为寄存器类型不能用assign赋值 module hello_fpga(a,b,c); input b; input c; output a; assign a=b&c; endmodule
endmodule
使用关键字reg定义寄存器,必须紧跟后面定义位宽,即寄存器大小,否 则默认为一bit位
不可综合
在always 过程块中被赋值的变量必须是 reg (寄存器型),用assign 连续赋值的对象必须定义成 wire(线型)
Байду номын сангаас
函数总是返回 赋给函数名称 的值,一般函 数在中的最后 操作是将数值 赋给函数名称
例子2 四位的计数器,在时钟节拍控制下实现0-15 计数,并输出计数结果
module hello_fpga(cnt,clk,rst_n); input clk; input rst_n; output[3:0] cnt; reg[3:0] cnt; always @ (posedge clk or negedge rst_n) begin if(!rst_n) cnt <= 4'd0; else cnt <= cnt+1'b1; end
第2章 Verilog语法的基本语法
例[2.1.4]: module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable); // 调 用 由 mytri 模 块 定 义 的 实 例 元 件 tri_inst endmodule module mytri(out,in,enable); output out; input in, enable; assign out = enable? in : 'bz; endmodule
Verilog HDL的构造性语句可以精确地建立信号的模 型。这是因为在Verilog HDL中,提供了延迟和输出强 度的原语来建立精确程度很高的信号模型。信号值可以 有不同的的强度,可以通过设定宽范围的模糊值来降低 不确定条件的影响。 Verilog HDL作为一种高级的硬件描述编程语言,有 着类似C语言的风格。其中有许多语句如:if语句、 case语句等和C语言中的对应语句十分相似。如果读者 已经掌握C语言编程的基础,那么学习 Verilog HDL并 不困难,我们只要对Verilog HDL某些语句的特殊方面 着重理解,并加强上机练习就能很好地掌握它,利用它 的强大功能来设计复杂的数字逻辑电路。下面我们将从 Verilog HDL中的基本组成单元“ 模块”开始对 verilog的基本结构和语法逐一加以介绍。
3).用“always”块 如:always @(posedge clk or posedge clr) begin if(clr) q <= 0; else if(en) q <= d; end 采用“assign”语句是描述组合逻辑最常用的方法之一。 而“always”块既可用于描述组合逻辑也可描述时序逻辑。 上面的例子用“always”块生成了一个带有异步清除端的D 触发器。“always”块可用很多种描述手段来表达逻辑, 例如上例中就用了if...else语句来表达逻辑关系。如按 一定的风格来编写“always”块,可以通过综合工具把源 代码自动综合成用门级结构表示的组合语言结构实现设计模块 的外部性能的模型。
verilog %用法
verilog %用法(实用版)目录1.Verilog 简介2.Verilog 的基本语法3.Verilog 模块的实例化4.Verilog 仿真与验证5.Verilog 的应用领域正文1.Verilog 简介Verilog 是一种硬件描述语言(HDL),主要用于数字系统硬件的描述、模拟和验证。
它最初由 Phil Moorby 在 1983 年为描述和模拟集成电路设计而创建,后来由 Cadence 公司进行商业化推广。
Verilog HDL 被广泛应用于数字集成电路设计、FPGA 设计和 ASIC 设计等领域。
2.Verilog 的基本语法Verilog 的基本语法包括以下几个方面:(1)模块:模块是 Verilog 中最基本的结构,它用于描述具有特定功能的电子电路。
模块的声明包括模块名、输入端口和输出端口。
(2)数据类型:Verilog 中的数据类型包括布尔型(bit)、整型(integer)和实型(real)等。
(3)变量与常量:变量用于存储电路运行过程中随时可以改变的值,常量用于存储固定不变的值。
(4)运算符与表达式:Verilog 提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符等。
表达式是运算符和操作数的组合,用于表示某种运算关系。
(5)控制结构:Verilog 中的控制结构包括顺序结构、条件结构和循环结构,用于控制程序的执行流程。
3.Verilog 模块的实例化在 Verilog 中,模块可以通过实例化进行重复使用,以降低代码重复和提高设计效率。
实例化时,需要将模块名与实例名用小括号括起,并在括号内指定实例名。
4.Verilog 仿真与验证Verilog 提供了丰富的仿真与验证工具,如 ModelSim、VCS 等。
通过仿真与验证,可以检查电路设计的正确性,以确保实际硬件的功能和性能符合预期。
5.Verilog 的应用领域Verilog 广泛应用于数字集成电路设计、FPGA 设计和 ASIC 设计等领域。
verilog语法详解
verilog语法详解Verilog语法是一种硬件描述语言,用于设计数字电路。
它可以实现逻辑功能和控制硬件。
以下是Verilog语法的详细解释:1. 模块(Module):模块是Verilog语言中最基本的单元。
模块定义了模块内部的数据类型和信号。
模块可以实现任何逻辑功能,并且可以同其他模块组合使用。
2. 输入(Input)和输出(Output):Verilog模块通过输入和输出端口与其他模块进行通信。
输入是模块接收的数据,而输出是模块输出的数据。
使用“input”和“output”关键字来定义输入和输出。
3. 线路(Wire):线路是Verilog模块中的一种数据类型。
它可以是单个位或多个位。
用“wire”关键字定义线路。
4. 寄存器(Register):寄存器是一种Verilog模块中的数据类型,用于存储数据。
寄存器可以是单个位或多个位。
使用“reg”关键字定义寄存器。
5. 运算符(Operator):Verilog支持各种运算符,包括算术、逻辑和比较运算符。
它们用于执行各种操作,如加、减、乘、除、与、或、非、异或等。
6. 语句(Statement):Verilog中的语句用于控制程序流程。
语句可以是条件语句、循环语句、分支语句等。
常用的语句包括“if”、“else”、“while”、“for”等。
7. 实例(Instance):实例是一个模块的具体实现。
使用“module name instancename()”语句来实例化一个模块。
8. 多模块组合:Verilog允许多个模块组合在一起实现更复杂的功能。
这些模块可以通过实例化彼此来连接。
以上是Verilog语法的详细解释,掌握这些基本概念是学习Verilog的关键。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Verilog基本语法
【逻辑值】
➢逻辑0 表示低电平,GND
➢逻辑1 表示高电平,VCC
➢逻辑X 表示未知电平,可能是高电平,也可能是低电平
➢逻辑Z 表示高阻态,外部没有激励信号,是一个悬空状态
注:高阻态的实质:电路分析时高阻态可做开路理解。
可以把它看作输出(输入)电阻非常大,对下级电路无任何影响。
若为0、x、z则按照假处理;若为1,按真处理。
【进制】
➢二进制4'b0101 —4位二进制数0101
➢十进制数4’d2 —4位十进制数2
➢十六进制数4’ha —4位十六进制数a
Verilog中若不指定位宽,默认32位;若不指定位宽不指定进制,默认32位宽的十进制数。
【标识符】
标识符可以是字母、数字、$和_(下划线)的组合,且开头必须是字母或下划线,区分大小写。
不建议大小写混合使用。
【数据类型】
➢寄存器关键字reg,默认初始值位不定值X;
reg[31:0] delay_cnt; //[31:0],指定寄存器位宽32位,
reg key_reg; // 默认位宽为1.
reg类型数据只能在always和initial语句中被赋值。
➢线网表示结构实体的物理连线,包括wire和tri类型
➢参数常量,用parameter定义。
parameter H_SYNC = 11'd41;
【运算符】
➢[条件操作符] ?:
例,a?b:c //如果a为真就选b,否则选择c。
result=(a>=b)?a:b;
[逻辑运算符] !&& ||
[位运算符] ~ & | ^(按位异或)
a&b; //自动将位宽小的数高位补零至较大数的位宽,然后按位与操作。
[移位运算符] << >> 用0填补移出的空位。
左移时位宽增加,右移位宽不变。
[位拼接运算符] {}
例,{a,b} //将a和b拼接起来,作为一个新信号,a为高位。
c={a,b[3:0]}; //a、b位宽均为8位,c为8+4=12位。
【程序框架】
[block] Verilog 的基本设计单元是“模块”(block),对应于C语言中的函数。
Module 模块名(端口1,端口2,…);
端口定义、IO说明;
内部信号声明;
功能定义;
endmodule
注:
Verilog—功能块间并行,功能块内串行;
C —函数间串行,函数内串行。
【语法-知识点】
[intial] intial语句在模块中只执行一次。
Intial begin
……
end
[always] 一直不断地重复活动,只有和时间控制结合才有作用。
例:always #10sys_clk = ~sys_clk;
➢always 语句是一直重复执行,由敏感表(always 语句括号内的变量)中的变量触发。
➢always 语句从0 时刻开始。
➢在begin 和end 之间的语句是顺序执行,属于串行语句。
➢always块的时间控制可以是沿触发也可以是电平触发,通常沿触发描述时序逻辑行为,电平触发描述组合行为。
【赋值语句】
RHS (right hand side)- 右手侧,LHS - 左手侧。
➢阻塞赋值b=a; 在同一个always块中,前一句赋值语句结束后才开始后一个赋值。
➢非阻塞赋值b<=a; 赋值开始时同时计算RHS,然后他同时更新LHS
注:非阻塞赋值只能用于寄存器类型的变量进行赋值,因此只能用在initial块和always块等过程块中。
组合逻辑常用“=”,时序逻辑常用“<=”。
不允许在多个always块中对同一个变量进行赋值!
【case语句】
例:case(num) //控制表达式
4’h0: seg_led <= 8’b1100_0000;//分支表达式
4’h0: seg_led <= 8’b1100_0001;
…
default:4’h0: seg_led <= 8’b1100_0000;
endcase
注:分支表达式的值互不相同;
所有表达式的位宽必须相等,不能用’bx 代替n’bx ;
casez 比较时不考虑表达式中的高阻值;
casex 不考虑高阻值z和不定值x。
【状态及设计】
fsm – 有限状态机
➢设计四段论(三段式状态机)
✧状态空间定义
✧状态跳转
✧下个状态判断
✧各个状态下的动作
➢独热码:每个状态只有一个寄存器置位,如:1000、0100、0010、0001。
优点译码简单。
➢if/else要配对,以免产生latch(锁存器)。