第三、四讲 Verilog HDL 行为语句

合集下载

第04讲 Verilog-HDL语法——第2部分 语法要点

第04讲 Verilog-HDL语法——第2部分 语法要点

` timescale
`timescale 说明延时单位及延时精度
格式:`timescale <time_unit> / <time_precision> 如:`timescale 1 ns / 100 ps
`timescale必须在模块之前出现 `timescale 1 ns / 100 ps // All time units are in multiples of 1 nanosecond module MUX2_1 (out, a, b, sel); output out; input a, b, sel; wire sel_;
12 'H83a 8'b1100_ 0001 64'hff01 9'O17 32'bz01x 3’b1010_ 1101 6.3 32e- 4 4.1E3 unsized decimal (zero-extended to 32 bits) unsized hexadecimal (zero- extended to 32 bits) 8-bit binary 64-bit hexadecimal (zero- extended to 64 bits) 9-bit octal Z-extended to 32 bits 3-bit number, truncated to 3’b101 decimal notation scientific notation for 0.0032 scientific notation for 4100
hex
oct
dec
bin
ACSII
string
time
strength module
转义符
\t \n \\ \” %% \<1-3 digit octal number>

verilogHDL培训教程华为

verilogHDL培训教程华为

verilogHDL培训教程华为近年来,随着人工智能、物联网和5G等新兴技术的快速发展,数字电路设计和FPGA开发方面的需求也越来越迫切。

而Verilog HDL已成为数字电路设计中最受欢迎和广泛使用的硬件描述语言之一。

因此,华为公司推出了一系列的Verilog HDL培训教程,帮助从业人员快速获得这个技能。

华为Verilog HDL培训教程的特点华为Verilog HDL培训教程主要针对初学者和中级学员,旨在让学生掌握Verilog HDL基础和应用。

教程内容科学、系统,结合了中国实际情况,给人耳目一新的感觉。

华为Verilog HDL培训教程遵从"理论与实践相结合"的原则,保证学生能够灵活应用所学知识。

在理论教学方面,华为Verilog HDL培训教程先后介绍和讲解了Verilog HDL的基础概念、语法、数据类型、运算符、模块等。

在实践操作方面,华为Verilog HDL培训教程采用基于FPGA芯片的开发板完成实验,让学生能够真正体验到数字电路设计的工程化过程。

此外,华为Verilog HDL培训教程融合了多元化的教学形式,通过讲解PPT、操作演示视频、实验文档等多种形式进行教学。

教材编制过程中对各章节的课程设计进行了充分的考虑,让学生可以从基础入手,系统性、完整性地掌握Verilog HDL语言。

总之,华为Verilog HDL培训教程尽力使学习过程严谨、声音,减少因知识不足而带来的错误和困惑。

华为Verilog HDL培训教程的课程设置华为Verilog HDL培训教程旨在让学员了解数字电路设计中最常用的硬件描述语言-- Verilog HDL,并在FPGA开发板上完成一些典型实验。

华为Verilog HDL培训教程包含以下章节:第一章:Verilog HDL基础概念在本章中,学生将学习Verilog HDL的起源、产生背景、基本概念、Verilog HDL的体系结构、Verilog HDL模块体系结构等知识。

第三章 verilog hdl的基本语法(kllast)

第三章 verilog hdl的基本语法(kllast)
reg型变量的定义格式: reg [msb:lsb] 变量名1,变量名2,…,变量名n;
例: reg clock;//定义一个1位寄存器变量 reg [3:0] counter; //定义一个4位寄存器变量
2.reg(寄存器型) 4种寄存器类型的变量
抽象描述, 不对应具 体硬件
寄存器类型 功能说明
1.间隔符: Verilog 的间隔符主要起分隔文本的作用,可以使 文本错落有致,便于阅读与修改。
间隔符包括空格符(\b)、TAB 键(\t)、换行符(\n)及 换页符。
2.注释符:注释只是为了改善程序的可读性,在编译时不起作用。 多行注释符(用于写多行注释): /* --- */; 单行注释符 :以//开始到行尾结束为注释文字。
reg
常用的寄存器型变量
integer 32位带符号的整数型变量
real
64位带符号的实数型变量,
time 64位无符号的时间变量
integer、real、time的典型应用是高层次的行为建模,不 能进行逻辑综合。
3.memory(存储器型)
memory型是存储器型,是通过建立reg型数组来描述的,可以 描述RAM存储器、ROM存储器和reg文件。
if(Reset) Q = 0; else Q = D;
二、条件语句
2. case语句
Verilog HDL语言中的case语句可以直 接处理多分支选择。
case语句格式:
case (控制表达式) 分支项表达式1:语句1 分支项表达式2:语句2 … 分支项表达式m:语句m default: 语句n endcase
二、条件语句
• 1. if…else语句
(1)if(表达式) 语句 例如: if(x>y) q=x;

verilog语法

verilog语法

第三章 Verilog HDL的基本语法前言Verilog HDL是一种用于数字逻辑电路设计的语言。

用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。

Verilog HDL既是一种行为描述的语言也是一种结构描述的语言。

这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的Verilog HDL模型。

Verilog模型可以是实际电路的不同级别的抽象。

这些抽象的级别和它们对应的模型类型共有以下五种:∙系统级(system):用高级语言结构实现设计模块的外部性能的模型。

∙算法级(algorithm):用高级语言结构实现设计算法的模型。

∙RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型。

∙门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。

∙开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。

一个复杂电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。

其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。

利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。

Verilog HDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。

这种行为描述语言具有以下功能:∙可描述顺序执行或并行执行的程序结构。

∙用延迟表达式或事件表达式来明确地控制过程的启动时间。

∙通过命名的事件来触发其它过程里的激活行为或停止行为。

∙提供了条件、if-else、case、循环程序结构。

∙提供了可带参数且非零延续时间的任务(task)程序结构。

第三章 Verilog HDL的基本语法汇总

第三章 Verilog  HDL的基本语法汇总
单元,每个单元为8位 reg [32:1] memory2[1:512]; //存储器为
512个单元,每个单元为32位
3.3 Verilog HDL的运算符
算术运算符 逻辑运算符 关系运算符 等值运算符 位运算符 缩减运算符 移位运算符 条件运算符 拼接运算符
1.算术运算符
算术运算符包括: + (加法运算符或正值运算符,如x+y,+8) - (减法运算符或负值运算符,如x-y,-90) * (乘法运算符,如x*y) / (除法运算符,如x/y) % (取模运算符,如x % y)
1.间隔符: Verilog 的间隔符主要起分隔文本的作用,可以使 文本错落有致,便于阅读与修改。
间隔符包括空格符(\b)、TAB 键(\t)、换行符(\n)及 换页符。
2.注释符:注释只是为了改善程序的可读性,在编译时不起作用。 多行注释符(用于写多行注释): /* --- */; 单行注释符 :以//开始到行尾结束为注释文字。
3.标识符和关键词
标识符:给对象(如模块名、电路的输入与输出端口、变
量等)取名所用的字符串。以英文字母或下划线开始
如,clk、counter8、_net、bus_A 。
关键词:是Verilog语言本身规定的特殊字符串,用来定义 语言的结构。例如,module、endmodule、input、 output、wire、reg、and等都是关键词。关键词都是小 写,关键词不能作为标识符使用 。出始终根据输入的变化而 更新其值的变量,它一般指的是硬件电路中的各种物理 连接.
例:网络型变量L的值由与门的驱动信号 a和b所决定,即L=a&b。a、b的值发 生变化,线网L的值会立即跟着变化。
a
&L

VerilogHDL语言(PDF)

VerilogHDL语言(PDF)

Verilog 讲义(二)1)续Verilog 基础2)Verilog 形为描述3.4 运算符九类运算符分类包含运算符算术运算符+ - * / %位运算符~ & | ^ ^~or~^缩位运算符& ~& | ~| ^ ^~or~^逻辑运算符! && ||关系运算符> < <= >=相等与全等运算符== != === !==逻辑移位运算符 <<>> 连接运算符 {}: 条件运算符 ?根据操作数的不同,又可分为三类:1)单目运算符只有一个操作数,且运算符位于操作数的左边如:~clk &a ~& 缩位运算符wire [7:0] aparity=^a (奇校验)2)双目运算符a+b a%b {a,b,c}3)三目运算符out=(sel)?a:b;运算符的优先级参:P443.4.1 算术运算符1)减法亦可用作单目运算符,取补运算2)除法运算符:整型类数据小数部分被截去: integer a=7/2=33)% 取余运算 7%2=13.4.2 位运算符1)~a 按位取反2)a&b 按位相与若a,b 位数不同,短的高位补0,(x者补x)3)^ ^~ 双目3.4.3 缩位运算符单目运算符,按位进行逻辑运算,结果产生一位的逻辑值。

A=4’b1001&a ~&a |a ~|a ^a ~^a0 1 1 0 1 0 3.4.3 逻辑运算符a&&b结果为一位的逻辑值若操作数为多位,只要有一位为1,整个操作数看作逻辑1;若有不定态,结果亦为不定态。

3.4.5关系运算符结果为一位的逻辑值。

3.4.6 相等与全等运算符结果为一位逻辑值相等:比较每一位,所有相等,关系满足,若有不定态或高阻态,不定态结果。

全等:与相等比较过程相同,亦将不定态及高阻态作为逻辑状态比较。

3.4.7 逻辑移位运算符<< >> 以0补位。

Verilog HDL 3

Verilog HDL 3

图3-2 值变化快于时延间隔



上面例子中的时延值只出现了一个,事实上这只 是一个“上升时延”,连续赋值语句中的时延可 以指定3类时延值:上升时延、下降时延和关闭时 延(值变为x的时延)。这是一种更加精细的时延 定义方式,其语法形式如下: assign # (rise, fall, turn-off ) LHS_target=RHS_expression; 其中rise是上升时延,fall是下降时延,turn-off是关 闭时延。


其具体含义可以根据下面的例子看出来: assign Bus = MemAddr [7:4]; // 没有定义时延, 则所有时延都是0 assign #4 Ask = Quiet || Late; // 只有1个时延 值,表示上升时延、下降时延和关闭时延都是4 assign # (4,8) Ask = Quick ; /* 有2个时延值, 表示上升时延是4,下降时延是8,关闭时延是 4和8之中的较小值,即4 */ assign # (4,8,6) Arb = & DataBus; // 有3个时延值, 表示上升时延是4,下降时延是8,关闭时延是6
3.2 顺序行为建模

顺序行为建模是Verilog HDL行为建模的主 要方法,也是Verilog HDL最能体现其高级 编程语言之处,如果学过其他高级变成语 言(如C语言),就会对本节介绍的诸如ifelse、for循环之类的语法结构非常熟悉。
此外,本节还将介绍过程赋值的特点和用 法。就像连续赋值用于数据流行为建模一 样,过程赋值用于顺序行为建模。


如下例: assign Mux = (S = = 0)? A : 'bz; assign Mux = (S = = 1)? B : 'bz; assign Mux = (S = = 2)? C : 'bz; assign Mux = (S = = 3)? D : 'bz;

Verilog-HDL中的语句

Verilog-HDL中的语句

第三章 Verilog-HDL中的语句1.基本语句1.1赋值语句赋值语句分为连续赋值语句和过程赋值语句。

1.1.1连续赋值语句1.连续赋值语句用于把值赋给wire型变量(不能为reg型变量赋值)。

语句形式为:assign A = B & C;a.只要在右端表达式的操作数上有事件(事件为值的变化)发生时,表达式即被计算;b.如果计算的结果值有变化,新结果就赋给左边的线网。

2.连续赋值的目标类型♦标量线网 wire a;♦向量线网 wire [7:0] a;♦向量线网的常数型位选择 a[1]♦向量线网的常数型部分选择 a[3:1]♦上述类型的任意的拼接运算结果 {3a[2],a[2:1]}注:多条assign语句可以合并到一起。

3.线网说明赋值连续赋值可作为线网说明本身的一部分。

这样的赋值被称为线网说明赋值。

如: wire Clear = 'b1;等价于 wire clear;assign clear=‘b1;1.1.2 过程赋值语句1.a.过程性赋值是仅仅在initial语句或always语句内的赋值b.它只能对reg型的变量赋值。

表达式的右端可以是任何表达式。

c.过程性赋值分两类:阻塞性过程赋值 =非阻塞性过程赋值<=2.语句内部时延与句间时延a.在赋值语句中表达式右端出现的时延是语句内部时延。

Done = #5 1'b1;b.通过语句内部时延表达式,右端的值在赋给左端目标前被延迟。

即右端表达式在语句内部时延之前计算,随后进入时延等待,再对左端目标赋值。

c.对比以下语句间的时延beginTemp = 1'b1;#5 Done = Temp; //语句间时延控制end3.阻塞性过程赋值a.赋值运算符是“=”的过程赋值是阻塞性过程赋值。

b.阻塞性过程赋值在在下一语句执行前,执行该赋值语句。

例:initialbeginClr = #5 0;Clr = #4 1;Clr = #10 0;end4.非阻塞性过程赋值a .在非阻塞性过程赋值中,使用赋值符号“ <=”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6)在case语句中,控制表达式与分支表达式的值之间的比较是一种全等
比较(===),必须保证两者的对应位全等。
例如:
reg [3:0] a; reg [9:0] result; case(a) 4’d0: result = 10 'b0111111111; 4’d1: result = 10 'b1011111111; 4’d2: result = 10 'b1101111111; 4’d3: result = 10 'b1110111111; 4’d4: result = 10 'b1111011111; 4’d5: result = 10 'b1111101111; 4’d6: result = 10 'b1111110111; 4’d7: result = 10 'b1111111011; 4’d8: result = 10 'b1111111101; 4’d9 : result = 10 'b1111111110; default: result =10 'bx; endcase
end
(四) 条件语句
Verilog HDL中有两类条件语句:
If-else语句
case语句
If-else语句
if 语句是用来判定所给定的条件是否满足,根据判定的 结果(真或假)决定执行给出的两种操作之一。
Verilog HDL语言提供了三种形式的 if 语句。
(1) if(表达式)
语句; 例如: if ( a > b ) out1 = int1;
(2)非阻塞赋值方式
赋值符号为“ < =”。 说明:1)非阻塞赋值符“ <= ”与小于等于符“<= ”看起来是一样的,但意义 完全不同,小于等于符是关系运算符,用于比较大小。而非阻塞赋值符用于 赋值操作。 2)非阻塞赋值方式的特点是:在整个过程块结束时才完成赋值操作。
reg b,c; always @( posedge clk ) begin b=a; c=b; end
begin
if(clr = 1) Q=D;
else
end
Q=0;
说明:此过程语句描述了一个时钟下降沿触发,带低电平有效同步 清零端的一个D触发器。
(二) 块语句
块语句通常用来将两条或多条语句组合在一起,使其在格式上看更象一 条语句。
Verilog HDL中有两类块语句: 串行块begin_end语句 并行块fork_join语句(不讲)
reg a,b;
例如://产生波形 parameter APPLY_DELAY = 5; reg[ 7 : 0 ] port _ A; initial begin port _ A = 'h20 ; #APPLY_DELAY Port_A= 'hF2; #APPLY_DELAY Port_A= 'h41; #APPLY_DELAY Port_A= 'h0A; end 执行时,port_A的值如下:
initial 过程语句
一、作用与特点:
initial语句主要用于初始化和波形生成,initial 过程块中的语句顺序执行且仅 执行一次。
二、语法格式:
initial 语句;
或:
initial begin 语句1; 语句2; ..... 语句n; end
例如:reg Yurt; initial Yurt = 2;
说明: ● 块名即该”块”的名字,一个标识符。 ● 如果有块名,则reg型变量、integer型变量、real型变量等可在语句 块内部声明。带块名的语句块可被引用。
例如: / /产生波形: begin #2 S t r e a m = 1; #5 S t r e a m = 0; #3 S t r e a m = 1; #4 S t r e a m = 0; #2 S t r e a m = 1; #5 S t r e a m = 0; end 说明: 假定顺序语句块在第10个时间单位开始执行。两个时间单位后第1 条语句执行,即第12个时间单位。此执行完成后,下1条语句在第1 7 个时间单位执行(延迟5个时间单位)。然后下1条语句在第2 0个时间单 位执行,以此类推。
例如: if(a>b) begin out1<=int1; out2<=int2; end else begin out1<=int2; out2<=int1; end
3) 允许一定形式的表达式简写方式。
例如: if(expression) 等同与 if( expression == 1 ) if(!expression) 等同与 if( expression != 1 )
(3) if(表达式1)
语句1;
else else
........
if(表达式2) if(表达式3)
语句2; 语句3;
(2) if(表达式)
语句1 ;
else
语句2; 例如: if(a>b) out1 = int1; else out1 = int2;
else if else
(表达式m) 语句m;
语句n;
“b=c=a”
0 0 0
1 1 1
0 0 0
1 1 1
nblock模块:
“b=a
c =b”
0 0 0 0
1 1 0
0
1 1 0
0
1
(1)阻塞赋值方式
赋值符号为“=”。 阻塞赋值语句执行的过程是:首先计算右端赋值表达式的取值,然 后立即将计算结果赋值给“=”左端的被赋值变量。如果在一个块语句中,有 多条阻塞赋值语句,那么在前面的赋值语句没有完成之前,后面的语句就不 能被执行,仿佛被阻塞了一样,因此称为阻塞赋值方式。
//连续赋值语句
过程赋值语句
过程赋值语句多用在过程语句当中,一般用于对reg型变量进行 赋值。 过程赋值有阻塞赋值和非阻塞赋值两种方式。

module block(c,b,a,clk); input clk,a; output c,b; reg c,b; always @(posedge clk)
例如: if(a>b) out1 = int1; else if (a==b) out1 = int2; else out1 = int3;
几点说明:
1) 三种形式的if语句中在if后面都有“表达式”,一般为逻辑表达式或关系表 达式。系统对表达式的值进行判断,若为0,x,z,按“假”处理,若为1,按 “真”处理,执行指定的语句。 2) 在if和else后面可以有多个操作语句,此时用begin和end这两个关键词 将几个语句包含起来成为一个复合块语句。
Hale Waihona Puke module nblock(c,b,a,clk); input clk,a; output c,b; reg c,b; always @(posedge clk)

begin
b=a; c=b; end endmodule
begin
b<=a; c<=b; end endmodule
仿真结果比较:
block模块:
CLK b a D Q c
说明: clk信号的上升沿到来时,将发生如下的变化:b取a的值,c取b的值(即等于a), 对应实际的硬件电路,只用一个触发器来寄存a的值,又输出给b和c。
reg b,c; always @( posedge clk ) begin b<=a; c<=b; end
说明:
CLK a D Q D Q c
initial begin a=0;b=0; end
always 过程语句
一、特点:
always语句后跟着的语句是否执行,则要看它的触发条件是否满足, 如满足则运行该语句一次,如不断满足则不断地循环执行。
二、语法格式:
always <时序控制> <语句>;
说明: (1) 不带延时控制的always语句:由于always语句是重复执行的,因此下 面的always语句将在0时刻无限循环,这时会发生仿真死锁。 如:always clock = ~ clock; (2) 带延时控制的always语句: 如:always #100 clock = ~ clock; //产生一个50M的时钟。 (3) 带事件控制的always语句:
case 语句
if语句只有两个分支可供选择,case语句是一种多分支选择语句。
case语句有三种表示方式:
1) case(表达式) <case 分支项> endcase
2) casez(表达式) <case 分支项> endcase 3) casex(表达式) <case 分支项> endcase
说明:posedge,negedge为边沿触发的两个关键字
※每一个always 过程最好只由一种类型的敏感信号来触发, 而不要将边沿敏感型和电平敏感型信号列在一起。
例如:
always @(posedge clk or negedge clr) //两个敏感信号都是边沿型 always @(a or b) //两个敏感信号都是电平型
该串行语句块执行过程中产生的波形:
(三) 赋值语句(重点)
Verilog HDL中有两类赋值语句:
连续赋值语句
过程赋值语句
连续赋值语句
以关键字assign 开头的为连续赋值语句,主要用于对wire型变量进行 赋值。 例如: assign c=a&b; 说明:在上面的赋值语句中,a、b、c三个变量皆为wire型变量,a和b的 任何变化,都将随时反应到c上来。 例如:用连续赋值语句构成一个4位的全加器 module adder_4(a,b,ci,sum,co); input[3:0] a,b; input ci; output[3:0]sum; output co; assign {co,sum}=a+b+ci; endmodule
相关文档
最新文档