




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/7/23计算机科学与技术学院1Verilog语言
设计
参考教材:《Verilog数字系统设计》教程夏宇闻编著计算机科学与技术学院22023/7/23
课程的基本描述
课程名称:Verilog语言设计
课程编号:0401CA0
参考教材:夏宇闻.Verilog数字系统设计教程.
航空航天出版社,2008
总学时:32学时理论学时:24学时
实验学时:8学时
学分:2学分开课学期:第四学期
前导课程:数字逻辑、C语言程序设计
后续课程:数字系统设计、SOPC原理及应用计算机科学与技术学院32023/7/23Verilog语言设计第1章Verilog的基本知识第2章Verilog的结构、数据类型、变量和基本运算符号第3章Verilog语句第4章VerilogHDL的建模方式第5章有限状态机FSM第6章Verilog综合设计与仿真内容概要计算机科学与技术学院42023/7/23第1章Verilog的基本知识1.硬件描述语言Verilog
HDL2.采用Verilog的设计流程3.简单的VerilogHDL例子4.Verilog用于模块的测试内容概要计算机科学与技术学院52023/7/23硬件描述语言(英文:HardwareDescriptionLanguage,简称:HDL)是电子系统硬件行为描述、结构描述、数据流描述的语言。利用这种语言,数字电路系统的设计可以从顶层到底层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为要实现的具体电路布线结构。1.1硬件描述语言VerilogHDL计算机科学与技术学院62023/7/23VerilogHDL语言是基于C语言发展起来的硬件描述语言,于1983年由GDA公司首创。1995年VerilogHDL语言成为IEEE标准,编号:IEEEStd1364-1995。VerilogHDL语言具有简捷、高效、易学易用、功能强大等优点,逐步为设计人员所接收和喜爱。Verilog语言支持的EDA工具较多,适合于寄存器传输级(RTL)和门电路级的描述,其综合过程比VHDL简单,但在高级描述方面不如VHDL。VHDL比VerilogHDL早几年成为IEEE标准;VHDL语法/结构比较严格,因而编写出的模块风格比较清晰;VHDL比较适合由较多的设计人员合作完成的特大型项目。1.1硬件描述语言VerilogHDL计算机科学与技术学院72023/7/23
VerilogHDL
公开发表
CADENCE公司
购买Verilog版权
1990
1989
1980’s
Verilog-XL
诞生
模拟和数字都适用的Verilog标准公开发表
VerilogIEEE1364-1995
标准公开发表
有关VerilogHDL
的全部权利都移交给
OVI(OpenVerilog
International)
1995
2001
1999
VerilogIEEE1364-2001
标准公开发表
1990
VerilogHDL的发展历史1.1硬件描述语言VerilogHDL计算机科学与技术学院82023/7/23ASIC和FPGA设计师可用它来编写可综合的代码。描述系统的结构,做高层次的仿真。验证工程师编写各种层次的测试模块对具体电路设计工程师所设计的模块进行全面细致的验证。库模型的设计:可以用于描述ASIC和FPGA的基本单元(Cell)部件,也可以描述复杂的宏单元(MacroCell)。1.1硬件描述语言VerilogHDL计算机科学与技术学院92023/7/23VerilogHDL模型可以是实际电路的不同级别的抽象。抽象级别可分为五级:系统级(systemlevel):用高级语言结构(如case语句)实现的设计模块外部性能的模型;算法级(algorithmiclevel):用高级语言结构实现的设计算法模型(写出逻辑表达式);RTL级(registertransferlevel):描述数据在寄存器之间流动和如何处理这些数据的模型;门级(gatelevel):描述逻辑门(如与门、非门、或门、与非门、三态门等)以及逻辑门之间连接的模型;开关级(switchlevel):描述器件中三极管和储存节点及其之间连接的模型。1.1硬件描述语言VerilogHDL计算机科学与技术学院102023/7/23语法结构上的主要特点:形式化地表示电路的行为和结构;借用C语言的结构和语句;可在多个层次上对所设计的系统加以描述,语言对设计规模不加任何限制;具有混合建模能力:一个设计中的各子模块可用不同级别的抽象模型来描述;基本逻辑门、开关级结构模型均内置于语言中,可直接调用;易创建用户定义原语(UDP,UserDesignedPrimitive)。易学易用,功能强.1.1硬件描述语言VerilogHDL计算机科学与技术学院112023/7/23传统的设计方法-电路原理图输入法查用器件手册;选用合适的微处理器和电路芯片;手工布线调试;定型;设计复杂的数字系统(几十万门以上)极其困难!1.1硬件描述语言VerilogHDL计算机科学与技术学院122023/7/23
采用VerilogHDL输入法时,由于VerilogHDL的标准化,可以很容易把完成的设计进行移植到不同厂家的不同芯片。采用VerilogHDL输入法最大的优点是其与工艺无关性。
Verilog的标准化软核、固核和硬核IP核是具有知识产权核的集成电路芯核总称,是经过反复验证过的、具有特定功能的宏模块。从IP核的提供方式上,通常将其分为软核、固核和硬核这3类。软核(SoftCore):用VerilogHDL(HardwareDescriptionLanguage)描述的功能块。经过验证的、可综合的HDL模型。固核(FirmCore):完成了综合的功能块。有较大的设计深度,以网表文件的形式提交客户使用。硬核(HardCore):它提供设计的最终阶段产品:掩模。1.1硬件描述语言VerilogHDL计算机科学与技术学院132023/7/23系统级设计模块A模块B模块C模块A1模块A2模块A3模块B1模块B2模块B3模块C1模块C2Top-Down—自顶向下的设计概念
1.2采用Verilog的设计流程计算机科学与技术学院142023/7/23电路图设计HDL设计电路功能仿真HDL功能仿真逻辑综合、时序验证优化、布局布线布线后门级仿真工艺文件电路制造版图或FPGA码流文件设计要求实现1.2采用Verilog的设计流程计算机科学与技术学院152023/7/23[例]8位全加器
moduleadder8(cout,sum,a,b,cin); outputcout; //输出端口声明
output[7:0]sum; input[7:0]a,b; //输入端口声明
inputcin; assign{cout,sum}=a+b+cin; endmoduleassign语句:无论右边表达式操作数何时发生变化,右边表达式都会重新计算,并且在指定的延迟后给左边表达式赋值。I/O说明端口定义功能描述模块名(文件名)整个VerilogHDL程序嵌套在module和endmodule声明语句中。每条语句相对module和endmodule最好缩进2格或4格!//
……
表示注释部分,一般只占据一行。对编译不起作用!单行注释符1.3简单的VerilogHDL例子计算机科学与技术学院162023/7/23
[例]8位计数器
modulecounter8(out,cout,data,load,cin,clk); output[7:0]out; outputcout; input[7:0]data; inputload,cin,clk; reg[7:0]out; always@(posedgeclk) begin if(load) out<=data;//同步预置数据
else out<=out+1+cin;//加1计数
endassigncout=&out&cin;//若out为8‘hFF,cin为1,则cout为1 endmoduleI/O说明端口定义功能描述信号类型声明缩减运算符位运算符1.3简单的VerilogHDL例子计算机科学与技术学院172023/7/23
[例]2位比较器
modulecompare2(equal,a,b); outputequal; input[1:0]a,b; assignequal=(a==b)?1:0;/*如果a等于b,则equal为1,否则为0*/ endmodule连续赋值语句条件运算符/*……*/内表示注释部分,一般可占据多行。对编译不起作用!多行注释符1.3简单的VerilogHDL例子计算机科学与技术学院182023/7/23Verilog用于模块的测试Verilog还可以用于描述变化的测试信号。描述测试信号的变化和测试过程的模块叫做测试平台(Testbench或Testfixture),它可以对上面介绍的电路模块(无论是行为的或结构的)进行动态的全面测试。通过观测被测试模块的输出信号是否符合要求,可以调试和验证逻辑系统的设计和结构正确与否,并发现问题及时修改。1.4VerilogHDL用于模块的测试计算机科学与技术学院192023/7/23Verilog模块测试原理图1.4VerilogHDL用于模块的测试计算机科学与技术学院202023/7/23例测试`include“muxtwo.v”modulet;regain,bin,select;regclock;wireoutw;initialbeginain=0;bin=0;select=0;clock=0;endalways#50clock=~clock;always@(posedgeclock)beginain={$random}%2;
#3bin={$random}%2;endalways#10000select=~select;muxtwom(.out(outw),.a(ain),.b(bin),.sl(select));endmodule1.4VerilogHDL用于模块的测试计算机科学与技术学院212023/7/231.VerilogHDL模块的结构2.数据类型、变量3.基本运算符号及表达式4.关键字5.标识符第2章Verilog的结构、数据类型、变量和基本运算符号内容概要计算机科学与技术学院222023/7/23Verilog的基本设计单元是“模块
(block)”
。Verilog模块的结构由在module和endmodule关键词之间的4个主要部分组成:moduleblock(a,b,c,d);inputa,b;outputc,d;wirec;wired;assignc=a|b;assignd=a&b;endmoduleI/O说明端口定义逻辑功能描述信号类型声明12342.1VerilogHDL模块的结构abcd计算机科学与技术学院232023/7/232.1.1模块的端口定义格式:
module模块名(口1,口2,…
…);例:
modulemytri(out,in,enable);outputout;inputin,enable;assignout=enable?In:’bz;endmodule调用:mytritri_inst(sout,sin,ena);
mytritri_inst(.out(sout),enable(ena),.in(sin));2.1VerilogHDL模块的结构计算机科学与技术学院242023/7/232.12I/O说明例如:inputk1,k2,in0;input[7:0]data;output[3:0]out;
inout[15:0]db;2.1VerilogHDL模块的结构例如:reg[2:0]a;wireb,c,d;2.13信号类型声明计算机科学与技术学院252023/7/23(1)用assign语句 assignx=(b&~c);连续赋值语句常用于描述组合逻辑门元件例化模块元件例化例化元件名门元件关键字(2)用元件例化(instantiate)
and
myand3(f,a,b,c);注1:元件例化即是调用VerilogHDL提供的元件;注2:元件例化包括门元件例化和模块元件例化;注3:每个实例元件的名字必须唯一!以避免与其它调用元件的实例相混淆。注4:例化元件名也可以省略!2.1VerilogHDL模块的结构2.1.4逻辑功能描述功能定义(有3种方法实现逻辑功能)计算机科学与技术学院262023/7/23(3)用“always”块语句
always@(posedgeclk)//每当时钟上升沿到来时执行一遍块内语句
begin if(load) out=data;//同步预置数据
else out=data+1+cin;//加1计数
end结构说明语句注1:“always”块语句常用于描述时序逻辑,也可描述组合逻辑。注2:“always”块可用多种手段来表达逻辑关系,如用if-else语句或case语句。注3:“always”块语句与assign语句是并发执行的,assign语句一定要放在“always”块语句之外!2.1VerilogHDL模块的结构计算机科学与技术学院272023/7/23数据类型数据类型是用来表示数字电路中的数据存储和传送单元。VerilogHDL中共有19种数据类型;其中4个最基本的数据类型为:integer型parameter型reg型wire型
其它数据类型:large型、medium型、scalared型、small型、time型、tri型、tri0型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型等2.2数据类型及其常量和变量计算机科学与技术学院282023/7/232.2.1常量在程序运行过程中,其值不能被改变的量,称为常量。数字(包括整数,x和z值,负数)parameter常量(或称符号常量)2.2数据类型及其常量和变量计算机科学与技术学院292023/7/23整常数的3种表达方式:表达方式说明举例<位宽>’<进制><数字>完整的表达方式8’b11000101或8’hc5<进制><数字>缺省位宽,则位宽由机器系统决定,至少32位hc5<数字>缺省进制为十进制,位宽默认为32位1971.数字(1)整数型常量(即整常数)的4种进制表示形式:二进制整数(b或B);十进制整数(d或D);十六进制整数(h或H);八进制整数(o或O)。注:这里位宽指对应二进制数的宽度。2.2数据类型及其常量和变量计算机科学与技术学院302023/7/23(2)x和z值x表示不定值,z表示高阻值;8’b1001xxxx或8’h9x8’b1010zzzz或8’haz每个字符代表的二进制数的宽度取决于所用的进制;当用二进制表示时,已标明位宽的数若用x或z表示某些位,则只有在最左边的x或z具有扩展性!为清晰可见,最好直接写出每一位的值![例]8’bzx=8’bzzzz_zzzx[例]8’b1x=8’b0000_001x“?”是z的另一种表示符号,建议在case语句中使用?表示高阻态z[例]casez(select)4’b???1:out=a;4’b??1?:out=b;4’b?1??:out=c;4’b1???:out=d;endcase2.2数据类型及其常量和变量计算机科学与技术学院312023/7/23(3)负数在位宽前加一个减号,即表示负数如:-8’d5//5的补数,=8‘b11111011减号不能放在位宽与进制之间,也不能放在进制与数字之间!8’d-5//非法格式为提高可读性,在较长的数字之间可用下划线_隔开!但不可以用在<进制>和<数字>之间。如:16‘b1010_1011_1100_1111//合法
8‘b_0011_1010//非法当常量未指明位宽时,默认为32位。10=32‘d10=32’b1010-1=-32’d1=32’b1111……1111=32’hFFFFFFFF2.2数据类型及其常量和变量计算机科学与技术学院322023/7/23
2.parameter常量(符号常量)用parameter来定义一个标识符,代表一个常量——称为符号常量。参数型数据的确认符parameter
参数名1=表达式,参数名2=表达式,……;赋值语句表格式2.2数据类型及其常量和变量计算机科学与技术学院332023/7/23每个赋值语句的右边必须为常数表达式,即只能包含数字或先前定义过的符号常量!
parameteraddrwidth=16;//合法格式
parameteraddrwidth=datawidth*2;//非法格式常用参数来定义延迟时间和变量宽度。可用字符串表示的任何地方,都可以用定义的参数来代替。参数是本地的,其定义只在本模块内有效。在模块或实例引用时,可通过参数传递改变在被引用模块或实例中已定义的参数!2.2数据类型及其常量和变量计算机科学与技术学院342023/7/23模块实例引用时参数的传递——方法之一:利用defparam定义参数声明语句!defparam例化模块名.参数名1=常数表达式,
例化模块名.参数名2=常数表达式,……;格式defparam语句在编译时可重新定义参数值。可综合性问题:一般情况下是不可综合的。2.2数据类型及其常量和变量计算机科学与技术学院352023/7/23[例]modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…modmk(out,ina,inb);//对模块mod的实例引用
defparammk.cycle=6,mk.file=“../my_mem.dat”;//参数的传递
…endmodule被引用模块参数名例化模块名2.2数据类型及其常量和变量计算机科学与技术学院362023/7/23[例]modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…mod#(5,3.20,“../my_mem.dat”)mk(out,ina,inb);
//对模块mod的实例引用
…endmodule模块实例引用时参数的传递——方法之二:利用特殊符号“#”
被引用模块参数的传递必须与被引用模块中的参数一一对应!建议用此方法!被引用模块名#(参数1,参数2,…)例化模块名(端口列表);格式2.2数据类型及其常量和变量计算机科学与技术学院372023/7/232.2.2变量在程序运行过程中,其值可以改变的量,称为变量。其数据类型有19种,常用的有3种:网络型(netstype)寄存器型(registertype)数组(memorytype)2.2数据类型及其常量和变量计算机科学与技术学院382023/7/231.nets型变量定义——输出始终随输入的变化而变化的变量。表示结构实体(如门)之间的物理连接。常用nets型变量:wire,tri:连线类型(两者功能一致)wor,trior:具有线或特性的连线(两者功能一致)wand,triand:具有线与特性的连线(两者功能一致)tri1,tri0:上拉电阻和下拉电阻supply1,supply0:电源(逻辑1)和地(逻辑0)
nets型变量不能储存值!2.2数据类型及其常量和变量计算机科学与技术学院392023/7/23wire型变量最常用的nets型变量,常用来表示以assign语句赋值的组合逻辑信号。模块中的输入/输出信号类型缺省为wire型。可用做任何方程式的输入,或“assign”语句和实例元件的输出。wire
数据名1,数据名2,……,数据名n;wire[n-1:0]
数据名1,数据名2,……,数据名m;或wire[n:1]
数据名1,数据名2,……,数据名m;每条总线位宽为n共有m条总线wire型向量(总线)格式2.2数据类型及其常量和变量计算机科学与技术学院402023/7/23定义——对应具有状态保持作用的电路元件(如触发器、寄存器等),常用来表示过程块语句(如initial,always,task,function)内的指定信号。常用register型变量:reg:常代表触发器integer:32位带符号整数型变量real:64位带符号实数型变量time:无符号时间变量纯数学的抽象描述2.register型变量2.2数据类型及其常量和变量计算机科学与技术学院412023/7/23register型变量与nets型变量的根本区别是:register型变量需要被明确地赋值,并且在被重新赋值前一直保持原值。register型变量必须通过过程赋值语句赋值!不能通过assign语句赋值!在过程块内被赋值的每个信号必须定义成register型!2.2数据类型及其常量和变量计算机科学与技术学院422023/7/23reg型变量定义——在过程块中被赋值的信号,往往代表触发器,但不一定就是触发器(也可以是组合逻辑信号)!reg
数据名1,数据名2,……,数据名n;reg[n-1:0]
数据名1,数据名2,……,数据名m;或reg[n:1]
数据名1,数据名2,……,数据名m;每个向量位宽为n共有m个reg型向量[例]reg[4:1]regc,regd;//regc,regd为4位宽的reg型向量reg型向量(总线)格式2.2数据类型及其常量和变量计算机科学与技术学院432023/7/23用reg型变量生成组合逻辑举例:
modulerw1(a,b,out1,out2);inputa,b;outputout1,out2;
regout1;wireout2;
assignout2=a;always@(b)
out1<=~b; endmoduleaout2BUFFbINVout1过程赋值语句连续赋值语句电平触发Verilog中reg与wire的区别reg型变量既可生成触发器,也可生成组合逻辑;wire型变量只能生成组合逻辑。2.2数据类型及其常量和变量计算机科学与技术学院442023/7/23用reg型变量生成触发器举例:
modulerw2(clk,d,out1,out2); inputclk,d;outputout1,out2;
regout1; wireout2;
assignout2=d&~out1;
always@(posedgeclk)
begin
out1<=d;
end
endmodule
过程赋值语句连续赋值语句dout2AND2i1clkout1DQDFF沿触发2.2数据类型及其常量和变量计算机科学与技术学院452023/7/23定义——由若干个相同宽度的reg型向量构成的数组。VerilogHDL通过reg型变量建立数组来对存储器建模。memory型变量可描述RAM、ROM和reg文件。memory型变量通过扩展reg型变量的地址范围来生成:reg[n-1:0]
存储器名[m-1:0];或reg[n-1:0]存储器名[m:1];每个存储单元位宽为n共有m个存储单元3.memory型变量——数组VerilogHDL中的变量名、参数名等标记符是对大小写字母敏感的!2.2数据类型及其常量和变量计算机科学与技术学院462023/7/23含义不同
[例]reg[n-1:0]
rega;//一个n位的寄存器
regmema[n-1:0];//由n个1位寄存器组成的存储器
必须指明存储单元的地址!0n-10n-1n-2···地址赋值方式不同
一个n位的寄存器可用一条赋值语句赋值;一个完整的存储器则不行!若要对某存储器中的存储单元进行读写操作,必须指明该单元在存储器中的地址!
[例]rega=0;//合法赋值语句
mema=0;//非法赋值语句
mema[8]=1;//合法赋值语句
mema[1023:0]=0;//合法赋值语句memory型变量与reg型变量的区别2.2数据类型及其常量和变量计算机科学与技术学院472023/7/23一、算术运算符二、赋值运算符三、关系运算符四、逻辑运算符五、条件运算符内容概要六、位运算符七、移位运算符八、拼接运算符九、其他2.3运算符及表达式计算机科学与技术学院482023/7/233.3.1算术运算符算术运算符说明
+-*/%加减乘除求模双目运算符2.3运算符及表达式计算机科学与技术学院492023/7/23在进行算术运算时,如果操作数的某一位为x或z,则整个表达式运算结果为不确定。例ain+din=unknown。两个整数进行除法运算时,结果为整数,小数部分被截去。如,6/4=1。在进行加法运算时,如果结果和操作数的位宽相同,则进位被截去。%称为求模(或求余)运算符,要求%两侧均为整型数据;求模运算结果值的符号位取第一个操作数的符号位!
[例]-11%3结果为-22.3运算符及表达式计算机科学与技术学院502023/7/23[例]除法和求模运算的区别注意/和%的区别!2.3运算符及表达式计算机科学与技术学院512023/7/239/4=29%4=1arithmetic.vwf2.3运算符及表达式计算机科学与技术学院522023/7/232.3.2位运算符位运算符说明~&|^^~,~^按位取反按位与按位或按位异或按位同或双目运算符单目运算符位运算其结果与操作数位数相同。位运算符中的双目运算符要求对两个操作数的相应位逐位进行运算。两个不同长度的操作数进行位运算时,将自动按右端对齐,位数少的操作数会在高位用0补齐。如果操作数的某一位为x时不一定产生x结果。
[例]若A=5’b11001,B=3’b101,则A&B=(5’b11001)&(5’b00101)=5’b00001
2.3运算符及表达式计算机科学与技术学院532023/7/232.3.3逻辑运算符逻辑运算符把它的操作数当作布尔变量:非零的操作数被认为是真(1‘b1);零被认为是假(1‘b0);不确定的操作数如4’bxx00,被认为是不确定的(可能为零,也可能为非零)(记为1’bx);但4’bxx11被认为是真(记为1’b1,因为它肯定是非零的)。逻辑运算符说明
&&(双目)||(双目)!(单目)逻辑与逻辑或逻辑非进行逻辑运算后的结果为布尔值(为1或0或x)!2.3运算符及表达式计算机科学与技术学院542023/7/23[例]&&运算符和&(按位与)的区别&&运算的结果为1位的逻辑值注意&&和&的区别!被认为是
1‘b1被认为是
1‘bx逻辑与结果为
1‘bx2.3运算符及表达式计算机科学与技术学院552023/7/23“&&”和“||”的优先级除高于条件运算符外,低于关系运算符、等式运算符等几乎所有运算符;逻辑非“!”优先级最高。[例](a>b)&&(b>c) 可简写为:a>b&&b>c
(a==b)||(x==y) 可简写为:a==b||x==y
(!a)||(a>b) 可简写为:!a||a>b为提高程序的可读性,明确表达各运算符之间的优先关系,建议使用括号!2.3运算符及表达式计算机科学与技术学院562023/7/232.3.4关系运算符关系运算符说明<<=>>=小于小于或等于大于大于或等于双目运算符括号内先运算!算术运算先运算!运算结果为1位的逻辑值1或0或x。关系运算时,若关系为真,则返回值为1;若声明的关系为假,则返回值为0;若某操作数为不定值x,则返回值为x。所有的关系运算符优先级别相同。关系运算符的优先级低于算术运算符。[例]a<size-1 等同于:a<(size-1)size-(1<a) 不等同于:size-1<a2.3运算符及表达式计算机科学与技术学院572023/7/232.3.5等式运算符等式运算符说明==!====!==等于不等于全等不全等双目运算符运算结果为1位的逻辑值1或0或x。等于运算符(==)和全等运算符(===)的区别:使用等于运算符时,两个操作数必须逐位相等,结果才为1;若某些位为x或z,则结果为x。使用全等运算符时,若两个操作数的相应位完全一致(如同是1,或同是0,或同是x,或同是z),则结果为1;否则为0。所有的等式运算符优先级别相同。===和!==运算符常用于case表达式的判别,又称为“case等式运算符”。2.3运算符及表达式计算机科学与技术学院582023/7/23[例]if(A
==
1’bx)$display(“AisX”);//当A为不定值时,式(A==1’bx)的运算结果为x,则该语句不执行
if(A
===
1’bx)$display(“AisX”);//当A为不定值时,式(A===1’bx)的运算结果为1,该语句执行==01xz01xz10xx01xxxxxxxxxx===01xz01xz1000010000100001“==”的真值表“===”的真值表等于运算的结果可能为1或0或x全等于运算的结果只有1或02.3运算符及表达式计算机科学与技术学院592023/7/232.3.6移位运算符移位运算符说明>><<右移左移单目运算符左移会扩充位数!用法:A>>n或A<<n
将操作数右移或左移n位,同时用n个0填补移出的空位。[例]4’b1001>>3=4’b0001;4’b1001>>4=4’b00004’b1001<<1=5’b10010;4’b1001<<2=6’b100100;
1<<6=7’b1000000将操作数右移或左移n位,相当于将操作数除以或乘以2n。右移位数不变,但右移的数据会丢失!2.3运算符及表达式计算机科学与技术学院602023/7/232.3.7位拼接运算符位拼接运算符为{}用于将两个或多个信号的某些位拼接起来,表示一个整体信号。用法:{信号1的某几位,信号2的某几位,……,信号n的某几位}例如在进行加法运算时,可将进位输出与和拼接在一起使用。[例1]output[3:0]sum;//和
outputcout;//进位输出
input[3:0]ina,inb;inputcin;assign{cout,sum}=ina+inb+cin;//进位与和拼接在一起[例2]{a,b[3:0],w,3’b101}={a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1}2.3运算符及表达式计算机科学与技术学院612023/7/23可用重复法简化表达式,如:{4{w}}//等同于{w,w,w,w}还可用嵌套方式简化书写,如:
{b,{3{a,b}}}//等同于{b,{a,b},{a,b},{a,b}},也等同于{b,a,b,a,b,a,b}用于表示重复的表达式必须为常数表达式!在位拼接表达式中,不允许存在没有指明位数的信号,必须指明信号的位数;若未指明,则默认为32位的二进制数!如{1,0}=64’h00000001_00000000,注意{1,0}不等于2‘b102.3运算符及表达式计算机科学与技术学院622023/7/232.3.8缩减运算符缩减运算符说明&~&|~|^^~,~^与与非或或非异或同或单目运算符运算法则与位运算符类似,但运算过程不同!对单个操作数进行递推运算,即先将操作数的最低位与第二位进行与、或、非运算,再将运算结果与第三位进行相同的运算,依次类推,直至最高位。运算结果缩减为1位二进制数。[例]reg[3:0]a;b=|a//等效于b=((a[0]|a[1])|a(2))|a[3]注意缩减运算符和位运算符的区别!2.3运算符及表达式计算机科学与技术学院632023/7/232.3.9条件运算符三目运算符in1outMUXin0sel信号=条件?表达式1:表达式2条件运算符为?:用法:[例]数据选择器assignout=sel?in1:in0;当条件为真,信号取表达式1的值;为假,则取表达式2的值。sel=1时out=in1;sel=0时out=in02.3运算符及表达式计算机科学与技术学院642023/7/232.3.10运算符的优先级类别运算符优先级逻辑、位运算符!~高低算术运算符*/%+-移位运算符<<>>关系运算符<<=>>=等式运算符==!====!==缩减、位运算符&~&^^~|~|逻辑运算符&&||条件运算符?:运算符的优先级为提高程序的可读性,建议使用括号来控制运算的优先级&&(b>c)
(a==b)||(x==y)
(!a)||(a>b)2.3运算符及表达式计算机科学与技术学院652023/7/23关键字——事先定义好的确认符,用来组织语言结构;或者用于定义VerilogHDL提供的门元件(如and,not,or,buf)。用小写字母定义!
——如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wire见《数字系统设计与VerilogHDL》P285附录A。用户程序中的变量、节点等名称不能与关键字同名!2.4关键字计算机科学与技术学院662023/7/23VerilogHDL关键字edgeelseendendcaseendfunctionendprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunctionhighz0highz1ififnoneinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenornotnotif0notif1nmosoroutputparameterpmosposedgeprimitivepulldownpulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisable2.4关键字计算机科学与技术学院672023/7/23tri0tri1vectoredwaitwandweak0weak1whilewireworxnorxorrcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1scalaredsmallspecifyspecparamstrengthstrong0strong1supply0supply1tabletasktrantranif0tranif1timetritriandtriortrireg2.4关键字计算机科学与技术学院682023/7/23任何用VerilogHDL语言描述的“东西”都通过其名字来识别,这个名字被称为标识符。如源文件名、模块名、端口名、变量名、常量名、实例名等。标识符可由字母、数字、下划线和$符号构成;但第一个字符必须是字母或下划线,不能是数字或$符号!在VerilogHDL中变量名是区分大小写的!合法的名字:A_99_ZReset_54MHz_Clock$Module
不合法的名字:123a$datamodule7seg.v标识符不能与关键字同名!2.5标识符计算机科学与技术学院692023/7/231.赋值语句2.条件语句3.循环语句4.结构说明语句5.块语句6.编译预处理语句第3章Verilog语句内容概要计算机科学与技术学院702023/7/23赋值语句连续赋值语句过程赋值语句块语句begin_end语句fork_join语句QuartusII不支持条件语句if_else语句case语句循环语句forever语句repeat语句while语句for语句结构说明语句initial语句QuartusII不支持always语句task语句function语句编译预处理语句‘define语句‘include语句QuartusII不支持‘timescale语句QuartusII不支持VerilogHDL的语句计算机科学与技术学院712023/7/23注:上表中,凡QuartusII不支持的语句是不可综合的,通常用在测试文件中;未注明“QuartusII不支持”的语句均是可综合的。forever语句、while语句,QuartusII支持,通常用在测试模块中;表中只有4种语句(fork_join,initial,‘include,‘timescale)是QuartusII不支持的,它们通常用在测试模块中(ModelSim软件支持)。计算机科学与技术学院722023/7/231.赋值语句2.非阻塞赋值与阻塞赋值的区别内容概要3.1赋值语句计算机科学与技术学院732023/7/233.1.1赋值语句分为两类:(1)连续赋值语句——assign语句,用于对wire型变量赋值,是描述组合逻辑最常用的方法之一。
[例]assignc=a&b;//a、b、c均为wire型变量(2)过程赋值语句——用于对reg型变量赋值,有两种方式:非阻塞(non-blocking)赋值方式:赋值符号为<=,如b<=a;阻塞(blocking)赋值方式:赋值符号为=,如b=a;3.1赋值语句计算机科学与技术学院742023/7/233.1.2非阻塞赋值与阻塞赋值的区别1.非阻塞赋值方式
always@(posedgeclk)
begin
b<=a;
c<=b;
endclkDFFcDQDQabDFF非阻塞赋值在块结束时才完成赋值操作!注:c的值比b的值落后一个时钟周期!3.1赋值语句计算机科学与技术学院752023/7/232.阻塞赋值方式
always@(posedgeclk)
begin
b=a;
c=b;
end阻塞赋值在该语句结束时就完成赋值操作!clkDFFcDQab注:在一个块语句中,如果有多条阻塞赋值语句,在前面的赋值语句没有完成之前,后面的语句就不能被执行,就像被阻塞了一样,因此称为阻塞赋值方式。这里c的值与b的值一样!3.1赋值语句计算机科学与技术学院762023/7/23
非阻塞(non-blocking)赋值方式(b<=a):b的值被赋成新值a的操作,并不是立刻完成的,而是在块结束时才完成;块内的多条赋值语句在块结束时同时赋值;硬件有对应的电路。阻塞(blocking)赋值方式(b=a):b的值立刻被赋成新值a;完成该赋值语句后才能执行下一句的操作;硬件没有对应的电路,因而综合结果未知。非阻塞赋值与阻塞赋值方式的主要区别建议在初学时只使用一种方式,不要混用!建议在可综合风格的模块中使用非阻塞赋值!3.1赋值语句计算机科学与技术学院772023/7/231.if-else语句2.case语句3.使用条件语句注意事项内容概要3.2条件语句计算机科学与技术学院782023/7/233.2.1if-else语句判定所给条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if-else语句有3种形式其中“表达式”为逻辑表达式或关系表达式,或一位的变量。若表达式的值为0、或z,则判定的结果为“假”;若为1,则结果为“真”。语句可为单句,也可为多句;多句时一定要用“begin_end”语句括起来,形成一个复合块语句。对于每个判定只有两个分支条件语句分为两种:if-else语句和case语句;它们都是顺序语句,应放在“always”块内!3.2条件语句计算机科学与技术学院792023/7/23允许一定形式的表达式简写方式,如:if(expression)等同于if(expression==1)if(!expression)等同于if(expression!=1)
if(表达式)语句1;if(表达式1)语句1;else
语句2;if(表达式1)语句1;elseif(表达式2)语句2;
…elseif(表达式n)语句n;方式1:方式2:方式3:适于对不同的条件,执行不同的语句3.2条件语句计算机科学与技术学院802023/7/23if语句可以嵌套;若if与else的数目不一样,注意用“begin_end”语句来确定if与else的配对关系!if(表达式1)
if(表达式2)语句1;
else
语句2;else
if(表达式3)语句3;
else
语句4;if(表达式1)
begin
if(表达式2)语句1;
endelse
语句2;当if与else的数目不一样时,最好用“begin_end”语句将单独的if语句括起来:if语句的嵌套:3.2条件语句计算机科学与技术学院812023/7/23[例]模为60的BCD码加法计数器counter60.valways块语句和assign语句是并行执行的!在always块内的语句是顺序执行的!3.2条件语句计算机科学与技术学院822023/7/23注意:if(reset)elseif(load)elseif(cin)
不要写成3个并列的if语句:
if(reset)if(load)if(cin)因为这样写则是同时对3个信号reset、load和cin进行判断,现实中很可能出现三者同时为“1”的情况,即3个条件同时满足,则应该同时执行它们对应的执行语句,但3条执行语句是对同一个信号qout赋不同的值,显然相互矛盾。故编译时会报错!3.2条件语句计算机科学与技术学院832023/7/23cin为来自下一级计数器的进位always与assign语句是并行执行的!count60.vwf置数进位输出当cin=1则加1计数3.2条件语句计算机科学与技术学院842023/7/233.2.2case语句多分支语句case(敏感表达式)值1:语句1;值2:语句2;
…
值n:语句n;
default:
语句n+1;endcase1.case语句当敏感表达式取不同的值时,执行不同的语句。功能:当某个(控制)信号取不同的值时,给另一个(输出)信号赋不同的值。常用于多条件译码电路(如译码器、数据选择器、状态机、微处理器的指令译码)!case语句有3种形式:case,casez,casex适于对同一个控制信号取不同的值时,输出取不同的值!case语句与if-else语句有什么区别呢?3.2条件语句计算机科学与技术学院852023/7/23说明:其中“敏感表达式”又称为“控制表达式”,通常表示为控制信号的某些位。值1~值n称为分支表达式,用控制信号的具体状态值表示,因此又称为常量表达式。default项可有可无,一个case语句里只能有一个default项!值1~值n必须互不相同,否则矛盾。值1~值n的位宽必须相等,且与控制表达式的位宽相同。3.2条件语句计算机科学与技术学院862023/7/232.casez与casex语句是case语句的两种变体在case语句中,分支表达式每一位的值都是确定的(或者为0,或者为1);在casez语句中,若分支表达式某些位的值为高阻值z,则不考虑对这些位的比较;在casex语句中,若分支表达式某些位的值为z或不定值x,则不考虑对这些位的比较。在分支表达式中,可用“?”来标识x或z。
3.2条件语句计算机科学与技术学院872023/7/23modulemux_z(out,a,b,c,d,select);outputout;inputa,b,c,d;input[3:0]select;regout;//必须声明
always@(select[3:0]oraorborcord)begin
casez(select)4’b???1:out=a;
4’b??1?:out=b;
4’b?1??:out=c;
4’b1???:out=d;
endcaseendendmodule[例]用casez描述的数据选择器这里“?”表示高阻态3.2条件语句计算机科学与技术学院882023/7/233.2.3使用条件语句注意事项应注意列出所有条件分支,否则当条件不满足时,编译器会生成一个锁存器保持原值!这一点可用于设计时序电路,如计数器:条件满足时加1,否则保持原值不变。而在组合电路设计中,应避免生成隐含锁存器!有效的方法是在if语句最后写上else项;在case语句最后写上default项。3.2条件语句计算机科学与技术学院892023/7/23如何正确使用if语句?生成了不想要的锁存器:不会生成锁存器:always@(alord)beginif(al)q<=d;
enddDFFD
Qalq[例]设计一个数据选择器always@(alord)beginif(al)q<=d;
elseq<=0;
end0dalqmultiplexer当al为0时,q保持原值!当al为0时,q等于0!3.2条件语句计算机科学与技术学院902023/7/23always@(sel[1:0]oraorb)case(sel[1:0])2’b00:q<=a;
2’b11:q<=b;
endcase生成了不想要的锁存器:[例]设计一个数据选择器always@(sel[1:0]oraorb)case(sel[1:0])2’b00:q<=a;
2’b11:q<=b;
default:q<=’b0;
endcase不会生成锁存器:如何正确使用case语句?当sel为00或11以外的值时,q保持原值!避免生成锁存器的原则:如果用到if语句,最好写上else项;如果用到case语句,最好写上default项。3.2条件语句计算机科学与技术学院912023/7/231.for语句2.repeat语句3.while和forever语句4.forever语句内容概要3.3循环语句计算机科学与技术学院922023/7/23循环语句分为4种:for语句——通过3个步骤来决定语句的循环执行:(1)给控制循环次数的变量赋初值。(2)判定循环执行条件,若为假则跳出循环;若为真,则执行指定的语句后,转到第(3)步。(3)修改循环变量的值,返回第(2)步。repeat语句——连续执行一条语句n次while语句——执行一条语句,直到循环执行条件不满足;若一开始条件即不满足,则该语句一次也不能被执行!forever语句——无限连续地执行语句,可用disable语句中断!3.3循环语句计算机科学与技术学院932023/7/233.3.1for语句for
(表达式1;表达式2;表达式3)语句for(循环变量赋初值;循环执行条件;循环变量增值)执行语句两条语句8条语句一般形式简单应用形式相当于采用while语句建立的循环结构:begin
循环变量赋初值;
while(循环执行条件)begin<执行语句>
循环变量增值;
endendfor语句比while语句简洁!3.3循环语句计算机科学与技术学院942023/7/23[例]用for语句描述的7人投票表决器:若超过4人(含4人)投赞成票,则表决通过。modulevote7(pass,vote); outputpass; input[6:0]vote; reg[2:0]sum;//sum为reg型变量,用于统计赞成的人数
integeri;regpass;always@(vote)beginsum=0;//sum初值为0
for(i=0;i<=6;i=i+1)
//for语句
if(vote[i])sum=sum+1;
//只要有人投赞成票,则sum加1
if(sum[2])pass=1;//若超过4人赞成,则表决通过
elsepass=0;e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (高清版)DB3714∕T 0008-2021 党政机关会务服务规范
- 第18课《我的白鸽》教学设计- 2024-2025学年统编版语文七年级上册
- 2025年果洛货运上岗证模拟考试0题
- 2025年张家口驾驶员货运从业资格证模拟考试
- 2025年韶关货运资格证考试题答案
- 第十八章 平行四边形数学活动 折纸作60°、30°、15°角 教学设计-2024-2025学年人教版数学八年级下册
- 第19课《大雁归来》教学设计 2024-2025学年统编版语文七年级上册
- 【人教PEP版英语三年级上册】期末测试卷(八)及答案
- 第7课+近代以来中国的官员选拔与管理+高二上学期历史统编版(2019)选择性必修1
- 百分数的应用(二)(教学设计)-2024-2025学年北师大版六年级数学上册
- 企业风险管理-战略与绩效整合(中文版)
- 三阶段DEA模型理论与操作步骤详解
- 高效能人士的七个习惯The7HabitsofHighlyEffectivePeople课件
- 小学体育与健康教育科学二年级下册第一章体育基本活动能力立定跳远教案 省一等奖
- 工程分包管理计划
- 民事诉讼法学整套ppt课件完整版教学教程最全电子讲义(最新)
- 河北省自然科学基金资助项目申请书模板
- 四年级奥数-容斥问题
- 常用标准波导和法兰尺寸
- 损益平衡点的计算方法
- 小学二年级下册音乐-第4课聆听《吉祥三宝》3--人音版(简谱)(10张)ppt课件
评论
0/150
提交评论