第3讲 Verilog HDL常用建模方法汇总

合集下载

第 3 章 Verilog HDL 基础知识

第 3 章    Verilog HDL 基础知识

第三章
Verilog 基础知识
module D_ff(q,data,enable,reset,clock); output q; input data,enable,reset,clock; reg q; always @(posedge clock) //时钟上升沿有效 if (reset == 0) q = 1’b0; else if (enable==1) q = data; //隐含: else q = q: endmodule
第三章
Verilog 基础知识
3) 指定位宽的基数格式 这种格式的表示形式为: <size>’<base_format><number> 参数<size>用来指定所表示数的位宽。当位宽小于数 值的实际位数时,相应的高位部分被忽略;当位宽大于数 值的实际位数,且数值的最高位是 0 或 1 时,相应的高位 部分补0;而当位宽大于数值的实际位数,但数值的最高 位是 x 或 z 时,相应的高位部分补 x 或z。二进制的一个 x 或 z 表示 1 位处于 x 或 z,八进制的一个 x 或 z 表示 3 位 二进制位都处于 x 或 z,十六进制的一个 x 或 z 表示 4 位 二进制位都处于 x 或 z。另外,数值中的 z 可以用“ ?” 来代替。
第三章
Verilog 基础知识
第3章
Verilog HDL 基础知识
希望通过本章的介绍,能够对 Verilog HDL 有初步 的了解。 (1)词法:包括间隔符与注释符、数值、字符串与关键字。 (2)数据类型:包括物理数据类型与抽象数据类型。 (3)运算符:包括算术运算符、逻辑运算符、关系运算 符、相等关系运算符、按位运算符、归约运算符、移 位运算符、条件运算符、连接与复制操作及其优先级。 (4)系统任务与系统函数:包括标准输出任务、文件管理 任务、仿真控制任务、时间函数及其他常用函数。 (5)编译指令:宏编译指令、文件包含指令、条件编译指 令、时间定标指令与工作库定义指令。

Verilog算法及建模整理文档

Verilog算法及建模整理文档

有关verilog 算法及建模1 有关C、Veilog HDL、VHDL (1)1.1 C与Verilog (1)1.2 Verilog HDL与VHDL (3)2 有关Verilog 中的一些语法 (5)2.1 运算符 (5)2.2 Wire、reg、tri、memory型 (6)2.3 assign和always语句 (6)2.4 阻塞赋值和非阻塞赋值 (8)2.5 Verilog中使用的一些关键字 (9)2.6 其他 (13)3 有关Verilog建模 (15)3.1软核、固核、硬核 (15)3.2 模块设计流程 (15)3.3 门级结构 (16)3.4 基本逻辑运算 (16)3.5 控制逻辑 (16)3.6 同步和异步 (17)3.7 有限状态机 (18)3.8 综合的一般原则 (21)4 有关总线和时钟 (22)4.1 I2C 双向二线制串行总线协议 (22)4.2时钟发生器的形成(分频的另外一种实现方式) (22)1 有关C、Veilog HDL、VHDL1.1 C与VerilogC 语言配合Verilog HDL 来设计算法的硬件电路块时考虑的三个主要问题:为什么选择C 语言与Verilog HDL 配合使用?C 语言与Verilog HDL 的使用有何限制?如何利用C 来加速硬件的设计和故障检测?1) 为什么选择C 语言与Verilog 配合使用首先,C 语言很灵活,查错功能强,还可以通过PLI(编程语言接口)编写自己的系任务直接与硬件仿真器(如Verilog-XL)结合使用。

C 语言是目前世界上应用最为广泛的一种编程语言,因而C 程序的设计环境比Verilog HDL 的完整。

此外,C 语言可应用于许多领域,有可靠的编译环境,语法完备,缺陷较少。

比较起来,Verilog 语言只是针对硬件描述的,在别处使用(如用于算法表达等)并不方便。

而且Verilog 的仿真、综合、查错工具等大部分软件都是商业软件,与C 语言相比缺乏长期大量的使用,可靠性较差,亦有很多缺陷。

第三章 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

Verilog-HDL的建模

Verilog-HDL的建模

第四章 Verilog-HDL的建模1.内容回顾通常认为,给硬件建模的模型可以分为5个层次:▪系统级和算法级建模通常是软件工程师用C语言开发的软件模型,目的在于验证设计思想是否正确。

HDL也能做一些算法级建模的工作,但是有很多算法描述不被综合工具支持。

▪行为级建模主要考虑一个模块的抽象功能描述,而不考虑其具体以实现(具体电路结构由综合工具得到)。

▪门级模型是对电路结构的具体描述,主要是描述与、或、非等基本门电路的连接方式。

▪开关级模型是把最基本的MOS晶体管连接起来实现电路功能。

注:这5个层次从高到低越来越接近硬件。

Verilog HDL有两种建模方法:结构建模方法和行为建模方法。

结构建模方法是对电路具体结构的描述:1.调用Verilog内置门元件(门级结构描述)2.调用开关级元件(晶体管级结构描述)3.用户自定义元件UDP(也在门级)4.子模块调用行为建模方法是对电路功能的描述1.数据流行为建模2.顺序行为建模2.结构建模结构建模是对电路具体结构的描述,是一种比较底层的方法。

简单说,就是把所需要的基本电路单元(逻辑门、MOS开关等)调出来,再用连线把这些基本单元连接起来。

(调用、连线)。

2.1 内置的基本单元Verilog HDL为门级电路建模提供了26个内置基本单元,分类如下:多输入门:and, nand, or, nor, xor, xnor多输出门:buf, not三态门: bufif0, bufif1, notif0, notif1上拉、下拉电阻:pullup, pulldownMOS开关:cmos, nmos, pmos, rcmos, rnmos, rpmos双向开关:tran,tranif0, tranif1, rtran, rtranif0, rtranif1注:多输入门、多输出门和三态门构成Verilog-HDL的内置基本门。

2.1.1多输入门1.内置的多输入门包括: and nand nor or xor xnor2.这些逻辑门只有单个输出, 1个或多个输入。

第3章 Verilog HDL数据流级建模

第3章  Verilog HDL数据流级建模

对于除法
11%4 结果为3 12%4 结果为0,整除 -11%4 结果为为-3,计算11%4, 再取第一个数的正负号作为结果的符号 11%-4 结果为3,计算11%4, 再取第一个数的正负号作为结果的符号
21
按位操作符
Verilog HDL数字系统设计及仿真
~:按位取反,单目操作,即只有一个操作数。 &:按位与操作,双目操作,带两个操作数 | :按位或操作,双目操作,带两个操作数 ^ :按位异或操作,双目操作,带两个操作数 ^~:按位同或操作,双目操作,带两个操作数பைடு நூலகம்
6
操作数
Verilog HDL数字系统设计及仿真
数据类型 parameter型 wire型 reg型 integer型 time型
功能 用于参数的描述 用于描述线网 用于描述寄存器 用于描述整数类型 用于描述时间类型
7
数字
Verilog HDL数字系统设计及仿真
基本格式
2'b01 4'd11
可选 不可缺少
size=6 delay=6
14
Verilog HDL数字系统设计及仿真
使用关键字defparam
module example(A,Y); …… parameter size=8,delay=15; …… endmodule
module test; …… example t1(a1,y1); example t2(a2,y2); …… endmodule
>>:逻辑右移。 <<:逻辑左移。 >>>:算术右移。 <<<:算术左移。
例如
a=4'b0101 b=x>>1; b为0010 c为0100 c=x<<2; integer a; a= -10; c值为-2 c=a>>>3;

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;

VerilogHDL行为级建模

VerilogHDL行为级建模
if(condition1) statement_1; else if(condition2) statement_2; else if(condition3) statement_3; //可以出现多个 else statement_4;
20
示例
Verilog HDL数字系统设计及仿真
if(clock= =1) q=d; //clock为1时执行此句 if(sel= =1) out=A; //sel为1时执行此句 else out=B; //sel非1时执行此句 if(Sum < 60) Total_C = Total _c + 1; else if (Sum < 75) Total_B = Total_B + 1; else Total_A = Total_A + 1;
always @ (posedge clock ) always @ (posedge clock or negedge reset)
12
顺序块
Verilog HDL数字系统设计及仿真
以关键字begin…end将多条语句封装 成块 按顺序执行
initial initial begin begin a=0; a=0; b=1; #5 b=1; c={a,b}; #10 c={a,b}; d={b,a}; #15 d={b,a}; end end
8
always结构
Verilog HDL数字系统设计及仿真
always结构在仿真过程中是时刻活动 的,它的语句结构如下:
always <时序控制方式> 执行语句
如果没有控制方式的参与,此结构中 的语句可能会一直执行并发生死锁, 或者变成类似数据流级的语句

VerilogHDL建模概述

VerilogHDL建模概述

VerilogHDL建模概述Verilog HDL 建模概述在数字电路设计中,数字电路可简单归纳为两种要素:线和器件。

线是器件管脚之间的物理连线;器件也可简单归纳为组合逻辑器件(如与或⾮门等)和时序逻辑器件(如寄存器、锁存器、RAM等)。

⼀个数字系统(硬件)就是多个器件通过⼀定的连线关系组合在⼀块的。

因此,Verilog HDL的建模实际上就是如何使⽤HDL语⾔对数字电路的两种基本要素的特性及相互之间的关系进⾏描述的过程。

下⾯通过⼀些实例,以便对Verilog HDL 的设计建模有个⼤概的印象。

1 模块模块(module)是Verilog 的基本描述单位,⽤于描述某个设计的功能或结构及与其他模块通信的外部端⼝。

模块在概念上可等同⼀个器件就如我们调⽤通⽤器件(与门、三态门等)或通⽤宏单元(计数器、ALU、CPU)等,因此,⼀个模块可在另⼀个模块中调⽤。

⼀个电路设计可由多个模块组合⽽成,因此⼀个模块的设计只是⼀个系统设计中的某个层次设计,模块设计可采⽤多种建模⽅式。

1.1 简单事例下⾯先介绍⼏个简单的Verilog HDL程序。

例[1] 加法器module addr (a, b, cin, count, sum);input [2:0] a;input [2:0] b;input cin;output count;output [2:0] sum;assign {count,sum} = a +b + cin;endmodule该例描述⼀个3位加法器,从例⼦可看出整个模块是以module 开始,endmodule 结束。

例[2] ⽐较器module compare (equal,a,b);input [1:0] a,b; // declare the input signal ;output equare ; // declare the output signal;assign equare = (a == b) ? 1:0 ;/ * if a = b , output 1, otherwise 0;*/endmodule该例描述⼀个⽐较器,从上可看到,/* .... */ 和// ... 表⽰注释部分。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在传输信号时没有延迟。但是,当开关值切换时有开 (turn-on)和关(turn-off)延迟。可以给双向开关指 定0个、1个或2个延迟,如下表所示。
specify块 也可以给使用开关设计的模块指定路径延迟(引脚到引
脚的延迟)以及时序检查。用specify块可以描述路径延 迟。在第10章中详细讨论了路径延迟说明,它在开关级 模型中也完全适用。
描述方式:
因为开关是用Verilog原语定义的,类似 于逻辑门,实例名称是可选项,所以调用 (实例引用)开关时可以不给出实例名称。
信号out的值由信号data和control的值确定。 out的逻 辑值如表11.1所示。 信号data和control的不同组合导致 这两个开关输出1,0或者z或x,逻辑值(如果不能确定 输出为1或0,就有可能输出z值或x值)。符号L代表0或 z,H代表1或z。
因此,NMOS开关在control信号是1时导通。如果 control信号是0,则输出为高阻态值。与此类似,如 果control信号是0,则PMOS开关导通。 具体的输入 输出参见下表:
CMOS开关用关键字cmos声明。CMOS开关的符号如下图所 示。
CMOS开关实例的引用: CMOS门本质上是两个开关(NMOS和PMOS)的组合体可
f=ab …
主讲 陈付
安徽师范大学 2015
第3讲 Verilog HDL常用建模方法
电路(开关级)级建模
门级(逻辑级)建模
数据流建模
行为级(RTL级)建模
Verilog模型可以是实际电路不同级别的抽象。这些抽象的级别和它们对应的模型 类型共有以下五种: (1)系统级(system) (2)算法级(algorithmic) (3)RTL级(Register Transfer Level): (4)门级(gate-level): (5)开关级(switch-level)
MOS,CMOS,双向开关和supply1,supply0源可用 于设计任意的开关级电路。CMOS开关是MOS开关的 一种组合;
延迟对开关元件来说是可选的。对于不同的双向器件, 有不同的延迟解释。
门级建模
当前的数字电路设计,绝大多数都是建立在门级或更 高的抽象层次上的。在门级抽象层次上,电路是用表 示门的术语来描述的,如用and(与门),nand(与 非门)等来描述。这种设计方法对于具有数字逻辑设 计基础知识的用户来说是很直观的,在Verilog描述和 电路的逻辑图之间存在着一一对应的关系。
源极supply1和supply0如下所示。
阻抗开关
前面所讨论的MOS,CMOS和双向开关可以用相应的 阻抗器件建模。阻抗开关比一般的开关具有更高的源 极到漏极的阻抗,且在通过它们传输时减少了信号强 度。在相应的一般开关关键字前加带r前缀的关键字, 即可声明阻抗开关。
在一般开关和阻抗开关之间有两个主要区别:源极到 漏极的阻抗和传输信号强度的方式。关于Verilog中的 强度级别参见书中附录A。
电源和地
计晶体管级电路时需要源极(Vdd,逻辑1)和地极 (Vss,逻辑0)。源极和地极用关键字supply1和 supply0来定义。
源极类型supply1相当于电路中的Vdd,并将逻辑1放在 网表中。源极类型supply0相当于地或Vss,并将逻辑0 放在网表中。在整个模拟过程中,supply1和supply0始 终为网表提供逻辑1值和逻辑0值。
3.1.2 举例— — CMOS或非门(nor)
二选一多路选择器
简单的CMOS锁存器
CMOS反向器
3.1.3 小结
开关级建模处于很低的设计抽象层次。只在很少的情 况下,比如在设计者需要定制自己的叶级元件(即最 基本的元件)时,才使用开关级建模。随着电路复杂 度的增加,这个级别的Verilog设计越来越少CMOS器件的模型。
NMOS,PMOS和CMOS门都是从漏极向源极导通,是单 向的。在数字电路中,双向导通的器件很重要。对双向导 通的器件而言,其两边的信号都可以是驱动信号。有三个 关键字用来定义双向开关:tran,tranif0和tranif1。
tran开关作为两个信号inout1和inout2之间的缓存。inout1 或inout2都可以是驱动信号。仅当control信号是逻辑0时 tranif0开关连接inout1和inout2两个信号。如果control信号 是逻辑1,则没有驱动源的信号取高阻态值z。有驱动源的 信号仍然从驱动源取值。如果control信号是逻辑1,则 tranif1开关导通。实例引用如下:
电路级建模
能够描述基本MOS开关:nmos,pmos和cmos。 理解双向传输开关、电源和地的建模方法。 识别阻抗MOS开关。 解释在基本MOS开关和双向传输开关上说明延迟的方
法。 在Verilog中,用所提供的开关建立基本开关级电路
3.1.1 开关级建模元件— — MOS开关
可以用关键字nmos和pmos定义两种类型的MOS开关 关键字nmos用于NMOS晶体管建模;关键字pmos用 于PMOS晶体管建模。NMOS和PMOS开关的符号如 下图所示。
开关中的延迟说明
MOS和CMOS开关
可以为通过这些开关级元件的信号指定延迟。延迟是 可选项,它只能紧跟在开关的关键字之后。延迟说明 类似于Rise,Fall和Turn-off延迟。可以为开关指定0个、 1个、2个或者3个延迟,如下所示。
双向传输开关 双向传输开关的延迟说明需要稍做区别解释。这种开关
3.2.1 门的类型
1.与/或门
Verilog语言中常用的门包括如下几种(以二输入为例):
在Verilog语言中,我们可以调用(实例引用)这些逻辑 门来构造逻辑电路。在门的实例引用中,输入端口的数 目可以超过两个,这时只需将输入端口全部排列在端口 列表中即可,Verilog会根据输入端口的数目自动选择引 用合适的逻辑门。注意,在门级原语实例引用的时候, 我们可以不指定具体实例的名字,这一点为设计师编写 需要实例引用几百个门的模块提供了方便。 格式:
相关文档
最新文档