1、2022-12-20南通大学电子信息学院1硬件描述语言 南通大学电子信息学院22022-12-20第一部分 Verilog HDL入门 南通大学电子信息学院32022-12-201.1 数字电子系统数字电子系统CAD技术的发展技术的发展三个阶段:三个阶段:(1)20世纪世纪60年代年代80年代初期年代初期 CAD(Computer Aided Design)阶段阶段 (2)20世纪世纪80年代初期年代初期90年代初期年代初期 CAE(Computer Aided Engineering)阶段阶段(3)20世纪世纪90年代以来年代以来 EDA(Electronic Design Automati
2、on)阶段阶段 第1章Verilog复杂数字设计综述南通大学电子信息学院42022-12-20n数字系统EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言(Hardware Description Language)完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。nEDA技术的出现,提高了电路设计效率和可行性,减轻了设计者劳动强度。20世纪90年代以来,在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。n可编程逻辑器件(如CPLD、FPGA)的应用已得到普及。这些器件可以
3、通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。南通大学电子信息学院52022-12-201.2 硬件描述语言硬件描述语言Verilog HDL 1.2.1 什么是Verilog HDL Verilog HDL 是硬件描述语言的一种,它是目前应用最广泛的硬件描述语言之一,用于数字系统的设计。设计者用它进行数字逻辑系统的仿真模拟、时序分析、逻辑综合。南通大学电子信息学院62022-12-201.2.2 Verilog HDL的发展历史1989Cadence 公司购买 Verilog HDL的版权1990Verilog HDL 公开发表1980s Ve
4、rilog-XL 诞生1990有关Verilog HDL的全部权利都移交给OVI(Open Verilog International)组织1995Verilog IEEE1364标准公开发表1999模拟和数字都适用的 Verilog 标准公开发表2001Verilog IEEE1364-2001标准公开发表Verilog IEEE1364-2005南通大学电子信息学院72022-12-201.2.3 Verilog HDL的优点的优点 nVerilog HDL是一种通用的硬件描述语言,易学易用。具有C语言编程经验的设计者很容易学习和掌握。nVerilog HDL允许在同一个电路模型内进行不同
5、抽象层次的描述。设计者可以从开关、门级、RTL和行为等各个层次对电路模型进行定义。nVerilog HDL是在全球最大的EDA供应商Cadence公司的扶持下针对EDA工具开发的HDL语言。绝大多数流行的综合工具都支持Verilog HDL,这是Verilog HDL成为设计者的首选语言的重要原因之一。nVerilog HDL的编程风格简洁明了,高效便捷。n所有的制造厂商提供用于Verilog HDL综合之后的逻辑仿真的元件库,使用Verilog HDL进行设计,即可在更广泛的范围内选择委托制造的厂商。n在ASIC设计领域,Verilog HDL占有明显的优势 南通大学电子信息学院82022-
6、12-201.3复杂数字系统的设计方法复杂数字系统的设计方法1.3.1 复杂数字逻辑系统复杂数字逻辑系统嵌入式微处理机系统嵌入式微处理机系统数字信号处理系统数字信号处理系统高速并行计算逻辑高速并行计算逻辑 高速通信协议电路高速通信协议电路高速编码高速编码/解码、加密解码、加密/解密电路解密电路复杂的多功能智能接口复杂的多功能智能接口门逻辑总数超过几万门达到几百甚至达几千万门的数门逻辑总数超过几万门达到几百甚至达几千万门的数字系统字系统南通大学电子信息学院92022-12-201.3.2 传统的设计方法传统的设计方法南通大学电子信息学院102022-12-201.3.3 Verilog HDL设
7、计法设计法l 选用合适的选用合适的 EDAEDA仿真仿真工具;工具;l 选用合适选用合适电路图输入和电路图输入和HDLHDL编辑工具;编辑工具;l 逐个编写可综合逐个编写可综合HDLHDL模块;模块;l 逐个编写逐个编写HDLHDL测试模块;测试模块;l 逐个做逐个做 HDL HDL 电路逻辑访真;电路逻辑访真;l 编写编写 HDL HDL总测试模块;总测试模块;l 做系统电路逻辑总仿真;做系统电路逻辑总仿真;l 选用合适的基本逻辑元件库和宏库选用合适的基本逻辑元件库和宏库l 租用或购买必要的租用或购买必要的IPIP核;核;l 选用合适的综合器;选用合适的综合器;l 进行综合得到门级电路结构;
8、进行综合得到门级电路结构;l 布局布线,得到时延文件;布局布线,得到时延文件;l 后仿真;后仿真;l 定型,定型,FPGA FPGA编码或编码或ASICASIC投片投片南通大学电子信息学院112022-12-20 采用Verilog HDL输入法时,由于Verilog HDL的标准化,可以很容易把完成的设计进行移植到不同厂家的不同芯片。采用Verilog HDL输入法最大的优点是其与工艺无关性。南通大学电子信息学院122022-12-201.3.4 软核、固核和硬核软核、固核和硬核n软核(Soft Core):经过验证的、可综合的、实现后门数在5000门以上的HDL模型n固核(Firm Cor
9、e):在某FPGA器件上实现的、经过验证、5000门以上的电路结构编码文献n硬核(Hard Core):以某种工艺实现的、经过验证、5000门以上的电路结构版图掩膜南通大学电子信息学院132022-12-201.4 典型设计流程典型设计流程 系统级设计模块A模块B模块C模块A1模块A2模块A3模块B1模块B2模块B3模块C1模块C2Top-Down自顶向下的设计概念自顶向下的设计概念 南通大学电子信息学院142022-12-20电路图设计HDL设计电路功能仿真HDL功能仿真逻辑综合、时序验证优化、布局布线布线后门级仿真工艺文件电路制造版图或FPGA 码流文件设计要求实现南通大学电子信息学院15
10、2022-12-201.5 硬件描述语言的发展趋势硬件描述语言的发展趋势 当前集成电路的设计面临一些问题,如设计重用、知识产权和内核插入;高层次综合和混合模型的总和;验证包括仿真验证和形式验证等自动验证手段;深亚微米效应;等等。这些问题给EDA技术的发展提出了新的要求,因此硬件描述语言的改进和发展非常必要。南通大学电子信息学院162022-12-201.6 设计资源设计资源 设计工具设计工具nCadencenSynopsysnMentor Graphics-ModelSimnSynplicity-SynplifynXILINX-ISEnAltera-Quartus n华大华大-ZeniFPGA
11、芯片厂商芯片厂商nXilinxnAlteranLatticeEDA网站网站n南通大学电子信息学院172022-12-20参考书:nVerilog HDL数字设计与综合,电子工业出版社n数字系统的Verilog HDL设计,机械工业出版社(江国强)nCPU芯片逻辑设计技术M.北京:清华大学出版社(朱子玉,李亚民)n数字信号处理的FPGA实现,清华大学出版社南通大学电子信息学院182022-12-20第2章 Verilog的模块2.1 概 述Verilog HDL既是一种行为描述语言,也是一种结构描述语言。即:描述电路功能行为的模型或描述元器件或较大部件互连的模型均可以用Verilog HDL实现
12、。南通大学电子信息学院192022-12-20Verilog HDL能够描述电路的5种抽象级别:1)系统级:用高级结构实现外部性能的模型2)算法级:用高级结构实现算法运行的模型3)RTL级(Register Transfer Level):描述数据在寄存器之间的流动和如何处理、控制这些数据流动的模型4)门级:描述逻辑门及其互相之间连接的模型5)开关级:描述器件中三极管和存储节点以及互相之间连接的模型南通大学电子信息学院202022-12-20 Verilog HDL特别适合算法级和RTL级的模型设计 提供了一套完整的组合逻辑基本元件、双向通路和电阻器件的原语 可建立MOS器件的电荷分享和衰减动
13、态模型 Verilog HDL与C语言的风格很类似南通大学电子信息学院212022-12-20 一个完整系统的Verilog HDL模型由若干个Verilog HDL模块构成,每个模块又由若干个子模块构成 Verilog模型(模块)-Verilog的基本设计单元 层次化的模型2.2 Verilog的模块南通大学电子信息学院222022-12-20module muxtwo(out,a,b,sl);input a,b,sl;output out;reg out;always (sl or a or b)if(!sl)out=a;else out=b;endmodulesloutab南通大学电子信
14、息学院232022-12-20module mux4_to_1(out,i0,i1,i2,i3,s1,s0);output out;input i0,i1,i2,i3,s1,s0;reg out;always(s1 or s0 or i0 or i1 or i2 or i3)begin case(s1,s0)2b00:out=i0;2b01:out=i1;2b10:out=i2;2b11:out=i3;default:out=1bx;endcase end endmodule s1outi0i1i3i2s0南通大学电子信息学院242022-12-20module muxtwo(out,a,b,
15、sl);input a,b,sl;output out;not u1(nsl,sl);and#1 u2(sela,a,nsl);and#1 u3(selb,b,sl);or#2 u4(out,sela,selb);endmodule南通大学电子信息学院252022-12-20module mux4_to_1(out,i0,i1,i2,i3,s1,s0);output out;input i0,i1,i2,i3;input s1,s0;wire s1n,s0n;wire y0,y1,y2,y3;not not0(s1n,s1);not not1(s0n,s0);and and0(y0,i0,s1
16、n,s0n);and and1(y1,i1,s1n,s0);and and2(y2,i2,s1,s0n);and and3(y3,i3,s1,s0);or or0(out,y0,y1,y2,y3);endmodule南通大学电子信息学院262022-12-20分析:例2-1a和例2-1 b模块属于行为描述,例2-2 a例2-1 b模块属于门级描述。通过综合,行为描述的模块可转化为门级描述的模块。南通大学电子信息学院272022-12-20module adder(count,sum,a,b,cin);input 2:0 a,b;input cin;output count;output 2:0
17、 sum;assign count,sum=a+b+cin;endmodulen说明:求a、b、cin 的和sum,count为进位。南通大学电子信息学院282022-12-20module compare(equal,a,b);input 1:0 a,b;output equal;assign equal=(a=b)?1:0;endmodule南通大学电子信息学院292022-12-20module trist2(out,in,enable);output out;input in,enable;bufif1 mybuf(out,in,enable);endmoduleBufif1是Veri
18、log提供的门类型关键字之一(门类型关键字共26种)南通大学电子信息学院302022-12-20module trist1(sout,sin,ena);output sout;input sin,ena;mytri tri_inst(.out(sout),.in(sin),.enable(ena);endmodulemodule mytri(out,in,enable);output out;input in,enable;assign out=enable?in:bz;endmodule实例调用南通大学电子信息学院312022-12-20例2-7 测试include “muxtwo.v”mo
19、dule t;reg ain,bin,select;reg clock;wire outw;initial begin ain=0;bin=0;select=0;clock=0;endalways#50 clock=clock;always(posedge clock)begin ain=$random%2;#3 bin=$random%2;endalways#10000 select=select;muxtwo m(.out(outw),.a(ain),.b(bin),.sl(select);endmodule南通大学电子信息学院322022-12-20作业1.试画出下列模块的仿真波形图试画
20、出下列模块的仿真波形图(仿真时间仿真时间0-2000):include “muxtwo.v”module t;reg ain,bin,select;reg clock;wire outw;initial begin ain=0;bin=0;select=0;clock=0;endalways#50 clock=clock;always(posedge clock)begin ain=$random%2;#3 bin=$random%2;endalways#500 select=select;muxtwo m(.out(outw),.a(ain),.b(bin),.sl(select);endm
21、odulemodule muxtwo(out,a,b,sl);input a,b,sl;output out;reg out;always (sl or a or b)if(!sl)out=a;else out=b;endmodule南通大学电子信息学院332022-12-20模块(block)由两部分组成:端口定义(接口描述)模块内容(逻辑功能描述)2.3 模块的结构例如:module block(a,b,c,d);input a,b;output c,d;assign c=a|b;assign d=a&b;endmoduleabcd南通大学电子信息学院342022-12-202.3.1模块
22、的端口定义格式:module 模块名(口模块名(口1,口,口2,);例:例:module mytri(out,in,enable);output out;input in,enable;assign out=enable?in:bz;endmodule调用:调用:nmytri tri_inst(sout,sin,ena);nmytri tri_inst(.out(sout),enable(ena),.in(sin);南通大学电子信息学院352022-12-202.3.2 模块的内容:1.I/O说明例如:input k1,k2,in0;input 7:0 data;output 3:0 out;
23、inout 15:0 db;2.内部信号的说明例如:reg2:0 a;wire b,c,d;南通大学电子信息学院362022-12-203.功能定义(有3种方法实现逻辑功能)1)用)用assign声明语句声明语句例:assign a=b+c;assign f=(x)?y:z;2)用实例元件)用实例元件 and#2 u1(q,a,b);3)用)用always块块南通大学电子信息学院372022-12-20(Verilog共有19种数据类型,仅介绍4种;量:常量、变量)3.1 常量n数字:二进制、八进制、十进制、十六进制;例:8b001100118h3316d486o17第3章 Verilog的基
24、础知识进制位宽数字南通大学电子信息学院382022-12-20参数型(parameter)-定义常量例如:parameter data_width=8,addr_width=16;parameter counter=8*1024;南通大学电子信息学院392022-12-203.2变量1、wire型wire型变量可以是任何方程式的输入信号,也可以是assign语句或实例元件的输出。对wire型变量的说明:wire a,b,c;wire 4:0 db;w下表说明了wire型变量在多驱动情况时的结果南通大学电子信息学院402022-12-20表:wire/tri01xz00 xx01x1x1xxxx
25、xz01xz南通大学电子信息学院412022-12-202、reg型-寄存器数据类型n通过赋值语句可以改变reg型变量的值。nreg型信号将用在always块中。nreg型信号通常是寄存器或触发器的输出,但并不一定是。例如:对reg型变量的说明:reg 7:0 data;reg q0,q1,q2,q3;reg 15:0 addr;南通大学电子信息学院422022-12-203、reg型的扩展:memory型-存储器w 通过扩展reg型变量的地址实现。例如:对memory型变量的说明:reg 7:0 memp 1023:0;reg 7:0 memd 255:0;memory型不可综合南通大学电子
26、信息学院432022-12-203.3运算符和表达式1、基本的算术运算符n+(加法运算符,正)n-(减法运算符,负)n*(乘法运算符)n/(除法运算符)n%(模运算符)南通大学电子信息学院442022-12-202、位运算符n(按位取反,单目运算符)n&(按位与,双目运算符)n|(按位或,双目运算符)n(按位异或,双目运算符)n(按位同或,双目运算符)例如:a=4b0110;b=4b1100;c=a;d=a|b;南通大学电子信息学院452022-12-203.4 逻辑运算3.4.1逻辑运算符(结果为真逻辑运算符(结果为真/假)假)&(逻辑与,双目运算符)|(逻辑或,双目运算符)!(逻辑非,单目
27、运算符)南通大学电子信息学院462022-12-203.4.2关系运算符(结果为真关系运算符(结果为真/假)假)nn=南通大学电子信息学院472022-12-203.4.3等式运算符(结果为真等式运算符(结果为真/假)假)n=(等于)n!=(不等于)只在操作数为0或1的时候结果确定。当输入为x、z时结果不确定。n=(等于,)n!=(不等于)输入为x、z时,结果也确定南通大学电子信息学院482022-12-203.4.4移位运算符移位运算符n左移 n位:a n(均以0补空)南通大学电子信息学院492022-12-203.4.5位拼接运算符位拼接运算符信号1的某几位,信号2的某几位,信号n的某几位
28、,例如:a=b7:0,c15:8;南通大学电子信息学院502022-12-203.4.6缩减运算符缩减运算符n所谓缩减运算就是对单个操作数进行“与、或、非”递推运算,使结果变成1位。例如:reg 3:0 b;reg c;c=&b;设b=4b0110,则c=0.南通大学电子信息学院512022-12-203.5 优先级别南通大学电子信息学院522022-12-203.6关键词IEEE Std 1364-2001 IEEE standard Verilog hardware description language南通大学电子信息学院532022-12-20南通大学电子信息学院542022-12-
29、20作业P.38:3;5;6;9;10南通大学电子信息学院552022-12-20第4章 赋值语句、块语句和程序控制语句 4.1 赋值语句赋值语句1、非阻塞赋值非阻塞赋值符:=例如:f=a;说明:块结束后才完成赋值(因此f不是立即被赋值),在always块描述的时序电路中应使用非阻塞赋值。南通大学电子信息学院562022-12-20always (posedge clk)begin b=a;c=b)q0=0;else begin q0=0;q1=1;end南通大学电子信息学院642022-12-20例如:if(x=5)a=b;else if(x=3)a=c;else if(x=7)a=d;南通
30、大学电子信息学院652022-12-20If语句的嵌套:注意:else总是与前面最近的if配对例如:c=a+b,补码表示,判是否有溢出。if(sign_a=0&sign_b=0)if(sign_c=0)over_f=0;else over_f=1;else if(sign_a=1&sign_b=1)if(sign_c=1)over_f=0;else over_f=1;else over_f=0;南通大学电子信息学院662022-12-204.4 case语句-多分支选择语句一般形式:ncase(表达式)endcasencasez(表达式)endcasencasex(表达式)endcase ca
31、se表达式:语句;默认项:语句;南通大学电子信息学院672022-12-20例如:reg2:0 in;reg7:0 out;case(in)3b000:out=8b11111110;3b001:out=8b11111101;3b010:out=8b11111011;3b011:out=8b11110111;3b100:out=8b11101111;3b101:out=8b11011111;3b110:out=8b10111111;3b111:out=8b01111111;default:out=8bxxxxxxxx;endcase南通大学电子信息学院682022-12-20说明:1)控制表达式
32、的值等于分支表达式的值时,执行分支表达式后面的语句。case-判表达式与分支项是否严格相等casez-忽略高阻,判表达式与分支项是否相等casex-忽略高阻和不确定,判表达式与分支项是否相等2)如果控制表达式的值与分支表达式的值都不相等时,则执行default后面的语句。3)所有表达式的位宽必须相等。南通大学电子信息学院692022-12-204.5 循环语句4.5.1 forever语句格式:forever 语句(或语句组);用于产生周期性波形,必须用在initial块中。南通大学电子信息学院702022-12-204.5.2 repeat语句(重复执行,次数由表达式决定)格式:repeat
33、(表达式)语句(或语句组);常量南通大学电子信息学院712022-12-204.5.3 while语句格式:while(表达式)语句(或语句组);功能:若表达式为真(或非0)则执行“语句”;若表达式为假(或为0)就结束。南通大学电子信息学院722022-12-204.5.4 for语句格式:for(表达式1;表达式2;表达式3)语句(或语句组);循环变量初值 循环条件 循环变量修改其中循环条件(教材中称结束条件):表达式为真(或非0)则循环南通大学电子信息学院732022-12-20例如:begin:init_mem reg7:0 tempi;for(tempi=0;tempi1)if(tem
34、preg0=1)count=count+1;end南通大学电子信息学院752022-12-20第5章 结构说明、任务与函数 我们将学习2种结构说明语句:ninitialnalways南通大学电子信息学院762022-12-205.1 initial语句 格式:initial begin 语句1;语句2;语句n;end说明:在仿真开始时执行一次。说明:在仿真开始时执行一次。南通大学电子信息学院772022-12-205.2 always语句 格式:always 说明:说明:1)always语句在仿真时不断重复执行,而后面语句在仿真时不断重复执行,而后面的语句是否执行取决于的语句是否执行取决于“时
35、序控制时序控制”条件是否满条件是否满足。足。2)时序控制条件即触发条件,包括边沿触发)时序控制条件即触发条件,包括边沿触发(posedge/negedge)、)、电平触发,单个或多个。电平触发,单个或多个。3)一个模块中可以有多个)一个模块中可以有多个always 块。块。南通大学电子信息学院782022-12-20回顾例2-1a 2选1module muxtwo(out,a,b,sl);input a,b,sl;output out;reg out;always (sl or a or b)if(!sl)out=a;else out=b;endmodulesloutab南通大学电子信息学院7
36、92022-12-20module hardreg(d,clk,q);input clk;input7:0 d;output7:0 q;reg7:0 q;always(posedge clk)q=d;endmodule南通大学电子信息学院802022-12-20module hardreg(d,clk,clrb,q);input clk,clrb;input7:0 d;output7:0 q;reg7:0 q;always(posedge clk or posedge clrb)begin if(clrb)q=8b00000000;/清清0 else q=d;/置数置数 endendmodul
37、e南通大学电子信息学院812022-12-205.3 taskn把大的程序分解成比较小的程序;n不同地方多次使用的相同程序段设计成task或function,能够简化程序。任务和函数说明语句作用:南通大学电子信息学院822022-12-201)任务的定义:task;endtask2)任务的调用:(端口1,端口12,,端口n);南通大学电子信息学院832022-12-20 例如:module compare1(a,b,c,d,e,f);reg a,b,c,d,e,f;always(a or b or c)my_task(a,b,c,d,e,f);task my_task;/input a,b,c
38、;output d,e,f;begin d=0;e=0;f=0;if(a=b)d=1;if(a=c)e=1;if(b=c)f=1;endendtaskendmodule 南通大学电子信息学院842022-12-20 module traffic_lights;reg clock,red,amber,green;parameter on=1,off=0,red_tics=350,amber_tics=30,green_tics=200;initial red=off;initial amber=off;initial green=off;南通大学电子信息学院852022-12-20always
39、begin red=on;light(red,red_tics);amber=on;light(amber,amber _tics);green=on;light(green,green _tics);endtask light;output color;input 31:0 tics;begin repeat(tics)(posedge clock);/等待上升沿等待上升沿 color=off;endendtaskalways begin#100 clock=0;#100 clock=1;endendmodule南通大学电子信息学院862022-12-205.4 function调用函数能够
40、返回一个用于表达式的值。1、定义函数的语法function函数名;begin end end function缺省时,返回值的类型为1位reg型南通大学电子信息学院872022-12-202)函数的返回值函数定义语句隐含对函数名相同的、函数内部寄存器的声明函数中必须对与函数名相同的寄存器赋值范围缺省时,返回值为1位reg型3)函数的调用函数名(,*)调用时,函数被当作表达式中的操作数 南通大学电子信息学院882022-12-20函数调用举例:function f_and;input a,b,c,d;f_and=a&b&c&d;endfunctionassign f=t?(s|f_and(w,x
41、,y,z):1;南通大学电子信息学院892022-12-204)函数的使用规则函数中不能包含时间控制语句函数不能启动任务函数至少有一个输入参量函数中必须对与函数名相同的寄存器赋值南通大学电子信息学院902022-12-20)1!(2nnmodule func;function31:0 f;input3:0 n;reg3:0 i;begin f=1;for(i=2;i=n;i=i+1)f=i*f;end endfunction函数南通大学电子信息学院912022-12-20 reg31:0 value;reg3:0 m;initial begin value=1;for(m=2;m=9;m=m+
42、1)begin$display(“partial value m=%d result=%d”,m,value)value=m*m/(f(m)+1);end$display(“final value=%d”,value)endendmodule 函数调用南通大学电子信息学院922022-12-20作业2:1、以结构描述方式实现下列逻辑:F=AB+ACD2、以连续赋值语句设计8位总线驱动器。3、以always语句设计8位总线驱动器。南通大学电子信息学院932022-12-20第6章 系统任务和编译预处理 南通大学电子信息学院942022-12-206.1 系统任务$display和$write 例
43、如:原样显示格式说明另有特殊字符输出列表引号内为格式控制南通大学电子信息学院952022-12-206.2 编译预处理1.1.宏定义宏定义define 标识符(宏名)字符串(宏内容)作用:当进行了宏定义后,就可以用标识符代替字符串,使程序易写、易读。南通大学电子信息学院962022-12-202.2.条件编译条件编译ifdef 宏名 程序段1else 程序段2endif南通大学电子信息学院972022-12-20第7章 不同抽象级别的Verilog HDL模型南通大学电子信息学院982022-12-207.1 门级结构描述1、门类型(共26个)and nand or nor xor xnor
44、buf not引用声明举例:and#10 and0(f,a,b,c,d );门类型延时实例名输出输入南通大学电子信息学院992022-12-20module flop(data,clock,clear,q,qb);input data,clock,clear;output q,qb;nand#10 nd1(a,data,clock,clear),nd2(b,data,clock),nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand#9 nd3(c,a,d),nd7(q,e,qb);not#10 iv1(
45、ndata,data),iv2(nclock,clock);endmodule南通大学电子信息学院1002022-12-202、由已设计完成的模块构成更高层次的模块include “flop.v”module hardreg(d,clk,clrb,q);input clk,clrb;input3:0 d;output3:0 q;flop f1(d0,clk,clrb,q0,),f2(d1,clk,clrb,q1,),f3(d2,clk,clrb,q2,),f4(d3,clk,clrb,q3,);endmodule南通大学电子信息学院1012022-12-207.2 数据流建模nassign声明
46、语句n延迟语句n定义表达式、操作符和操作数南通大学电子信息学院1022022-12-20连续赋值assign out=i1&i2;assign addr15:0=addr1_bits15:0 addr2_bits15:0;assign c_out,sum3:0=a3:0+b3:0+c_in;隐式连续赋值 wire out=in1&in2;等价于wire out;assign out=in1&in2;隐式线网声明wire i1,i2;assign out=i1&i2;passign声明语句out隐式线网声明南通大学电子信息学院1032022-12-20p延迟语句普通赋值延迟assign#10 o
47、ut=in1&in2;隐式连续赋值延迟wire#10 out=in1&in2;等价于assign#10 out=in1&in2;线网声明延迟wire#10 out;assign out=in1&in2;等价于wire out;assign#10 out=in1&in2;南通大学电子信息学院1042022-12-207.3 VerilogHDL的行为级建模module hardreg(d,clk,clrb,q);input clk,clrb;input3:0 d;output3:0 q;reg3:0 q;always(posedge clk or posedge clrb)begin if(cl
48、rb)q=0;/清0 else q=d;/置数 endendmodule南通大学电子信息学院1052022-12-20module dff_7474(d,clk,clrn,prn,q,qn);input d,clk,clrn,prn;output q,qn;reg q;assign qn=!q;always(posedge clk or negedge clrn or negedge prn)begin if(clrn=0)q=0;/清0 else if(prn=0)q=1;/置1 else qy)begin xgy=1;xsy=0;end else if(xy)begin xgy=0;xsy
49、=1;endendendmodule南通大学电子信息学院1122022-12-204、多路器选择器功能:根据地址信号在多路输入中选择一路输出。输入地址输出南通大学电子信息学院1132022-12-20module mux_8(addr,in1,in2,in3,in4,in5,in6,in7,in8,mout,ncs);parameter width=8;input 2:0 addr;input ncs;inputwidth-1:0 in1,in2,in3,in4,in5,in6,in7,in8;output width-1:0 mout;reg width-1:0 mout;always(ad
50、dr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or ncs)begin if(!ncs)/if(ncs=0)南通大学电子信息学院1142022-12-20 case(addr)3b000:mout=in1;3b001:mout=in2;3b010:mout=in3;3b011:mout=in4;3b100:mout=in5;3b101:mout=in6;3b110:mout=in7;3b111:mout=in8;endcase else mout=0;endendmodule南通大学电子信息学院1152022-12-205