verilog基本语法

合集下载

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 语言的特点和基本语法

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基本语法

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语言(基础语法篇)

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的基本语法

第三讲 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模块与基本语法

Verilog模块与基本语法
用assgin 声明语句 assgin a=b&c;
用实例元件
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知识点总结Verilog是一种硬件描述语言(HDL),用于描述数字电路和系统,它广泛应用于数字系统设计和仿真领域。

本文将总结一些Verilog 的重要知识点,以帮助读者更好地理解和应用Verilog。

一、Verilog的基本语法Verilog的基本语法包括模块声明、端口声明、信号声明、数据类型、运算符等。

Verilog中的模块是设计的基本单元,模块声明包括模块名和端口声明。

端口可以是输入、输出或双向的。

信号声明用于定义内部信号,可以是寄存器或线网类型。

Verilog支持多种数据类型,包括整数、浮点数、向量、数组等。

Verilog还提供了丰富的运算符,包括算术运算符、逻辑运算符、位运算符等。

二、组合逻辑电路描述Verilog可以用来描述各种组合逻辑电路,如与门、或门、非门等。

通过使用逻辑运算符和条件语句,可以很方便地描述组合逻辑电路的功能。

Verilog还提供了多种语法结构,如if语句、case语句等,用于描述复杂的逻辑功能。

三、时序逻辑电路描述时序逻辑电路是一种带有状态的电路,Verilog可以用来描述各种时序逻辑电路,如触发器、计数器、状态机等。

通过使用时钟信号和触发器,可以实现电路的时序行为。

Verilog提供了多种触发器类型,如D触发器、JK触发器、T触发器等,可以根据实际需求选择合适的触发器类型。

四、模块实例化和层次化设计Verilog支持模块的实例化和层次化设计,可以将一个模块实例化为另一个模块的一部分。

通过模块实例化,可以方便地实现模块的复用和层次化设计。

层次化设计可以使整个系统更加清晰和模块化,方便调试和维护。

五、仿真和验证Verilog可以用于对设计进行仿真和验证,以确保设计的正确性。

Verilog提供了仿真器,可以对设计进行时序仿真和波形查看。

通过仿真,可以验证设计的功能和时序行为是否符合要求。

Verilog 还支持测试向量的生成和自动验证,可以自动生成测试向量并进行自动验证。

verilog基本语法

verilog基本语法

verilog基本语法
1. 模块:verilog模块用于描述感兴趣的功能系统以及设备行为,从而给出输入和输出之间的关系。

2. 变量:verilog中的变量可以定义为硬件控制的行为或信号路径。

3. 宏定义:verilog使用宏`define`来定义新的字符或文本,可用于
提高程序可读性和管理性。

4. 注释:verilog支持两种注释形式,即行注释和块注释,行注释以
`//`开头,块注释以`/*`开头,以 `*/`结尾。

5. 关键字:verilog使用了一系列关键字来指定硬件控制行为,输入、输出、时序延迟和引用等。

6. 命令:verilog提供了一系列命令来描述功能,包括`initial`,
`always`,`@`和`begin`等等。

7. 模型:verilog中的模型用于定义和控制硬件的输入和输出行为,
这些模型可以被定义为多个状态和条件的序列。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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(锁存器)。

相关文档
最新文档