verilog语言及程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
hwadee
2019/9/3
6
模块的基本结构
Module<模块名>(<端口列表>);
端口说明(input,out,inout)
参数定义<可选>
数据类型定义
连续赋值语句(assign)
过程块(initial和always)
行为描述语句
低层模块实例
任务和函数
延时说明块
endmodule
用来表示各种变量、参数或构件的名称,可以是任
意一组字母、数字、$符号和_(下划线)符号的组合, 但第一个字符必须是字母或下划线,区分大小写
转义标识符
可以在一条标识符中包含任何可打印字符。转义标识符以
“\”(反斜杠)符号开头,以空白结尾(空白可以是一个空格、一 个制表符或换行符)
hwadee
函数在0时刻执行,即不允许延迟,而任务 可以带有延迟。
hwadee
2019/9/3
14
常见系统任务和函数
显示任务
• $display,$write,$strobe,$monitor, $monitoron,$monitoroff
模拟控制任务
• $finish, $stop
模拟时间函数
• $time,$stime,$realtime
hwadee
2019/9/3
15
常用任务和函数
概率分布函数
• $ramdom[(seed)]
其它
• $setup, $hold, $setuphold, $width, $period, $skew, $recovery, $nochange, $rtoi, $itor, $realtobits, $bitstoreal, $printtimescale, $timeformat等
hwadee
2019/9/3
7
模块的基本结构说明
<模块名>是模块惟一的标识符; <端口列表>是 由模块的输入、输出和双向端口组成的端口列表, 这些列表用来与其他模块进行连接;
数据类型定义部分用来指定模块内所用的数据对象 为寄存器型、存储器型或连线型;
过程块包括initial过程块和always过程块两种,行 为描述语句只能出现在这两种过程块中;
延时说明块用来对模块各个输入和输出端口间的路 径延时进行说明。
hwadee
2019/9/3
8
模块调用
调用模块实例的一般格式: <模块名><参数列表><实例名>(<端
口列表>); Verilog HDL程序是由模块组成的,每个模
块的内容都包含在“Module”和 “endmodule”之间。 每个模块都要进行端口定义,说明输入、 输出端口。
接口描述 逻辑功能描述
hwadee
2019/9/3
5
Verilog HDL程序基本结构
Verilog的基本设计单元是“模块”(BLOCK) 模块由两部分组成:一部分描述接口,另一部分描
述逻辑功能。 按照模块接口的描述,一个模块可以在另一个模块
中使用;逻辑功能的描述可以使用连续赋值语句 (描述数据流行为)、过程结构(时序行为)、开 关级原语、门级原语和用户定义的原语等方式。
第一个时钟沿到来,a为0,第二个时钟沿到来,a为1
(注:在一次触发进程里,无论是阻塞和非阻塞语 句,每条语句只能执行一次)
hwadee
2019/9/3
3
阻塞语句与非阻塞语句使用注意事项
阻塞语句是顺序执行的,而非阻塞语句是同 时执行的
大体原则:阻塞语句运用于组合逻辑电路设 计,非阻塞语句运用于时序逻辑电路设计
hwadee
2019/9/3
9
模块的描述方式
Verilog HDL模块代表硬件上的逻辑实体,其 范围可以从简单的门到整个电路系统.
模块可以根据所采用的不同描述方式而分为 行为描述和结构描述两类,也可采用两种方 式的组合。
hwadee
2019/9/3
10
Verilog 语言要素
标识符(identifier)
*/
是多行注释
hwadee
2019/9/3
12
格式
Verilog HDL 区分大小写,即大小写的标识 符是不同的。
源程序书写格式自由,可跨越多行编写,也 可在一行内编写。
hwadee
2019/9/3
13
系统任务和函数
以字符开始的标识符表示系统任务或系统函 数。任务提供了一种封装行为的机制。这种 机制$可以在设计的不同部分被调用。任务 可以返回0个或多个值。函数除只能返回一 个值以外与任务相同。
2019/9/3
11
Verilog 语言要素
关键字
• Verilog HDL定义了一系列保留字(关键字)。
• 在编写Verilog HDL程序时,变量的定义不要与 关键字冲突。
• 注意只有小写的关键字才是保留字。
注释
在 Verilog HDL里有两种形式的注释:
• //
是单行注释
• /*
hwadee
2019/9/3
2
非阻塞语句在verilog中的应用
非阻塞语句,顾名思义,本条语句不影响下一条语 句的作用,更能体现硬件电路的特点。这正是非阻 塞语句广泛应用于时序逻辑电路的原因。
如果在一个时钟沿触发的always进程里面, b<=c,a<=b那么就不可能直接在进程里面赋值 a<=c.因为c的值要经过两个时钟延迟才传到a里面, 如果c为1,b为0,a为1的话,那么在在非阻塞语 句的进程里面,
不要在同一个always块里面混合使用“阻 塞赋值”和“非阻塞赋值”
hwadee
2019/9/3
4百度文库
Verilog的特点
Verilog易学易用(与C语言相似),功能强大,使 用 广泛。
可以在不同层次描述数字系统
开关级描述 寄存器传输级描述 门级描述
基本设计单元是“模块”(block)包括:
Verilog语言及程序设计
四川华迪信息技术有限公司 Version1.1
阻塞语句在verilog中的应用
阻塞语句,顾名思义,即本条语句具有影响 下一条语句的作用,如果该条语句没有执行 完,那么下条语句不可能进入执行状态的
阻塞语句最能体现verilog HDL和C语言之 间的血缘关系,比如,在时钟沿触发的 always进程里,若先执行b=c,再执行 a=b,那么本质上,在一个时钟沿触发里面, a=c成立,即是说,不要b变量,直接在进 程里赋值a=c,结果是一样的。这和c语言 中b=c,a=b性质相同