- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Verilog语言及程序设计 阻塞语句在verilog中的应用 阻塞语句,顾名思义,即本条语句具有影响下一条语句的作用,如果该条语句没有执行完,那么下条语句不可能进入执行状态的 阻塞语句最能体现verilog HDL和C语言之间的血缘关系,比如,在时钟沿触发的always进程里,若先执行b=c,再执行a=b,那么本质上,在一个时钟沿触发里面,a=c成立,即是说,不要b变量,直接在进程里赋值a=c,结果是一样的。这和c语言中b=c,a=b性质相同 非阻塞语句在verilog中的应用 非阻塞语句,顾名思义,本条语句不影响下一条语句的作用,更能体现硬件电路的特点。这正是非阻塞语句广泛应用于时序逻辑电路的原因。 如果在一个时钟沿触发的always进程里面,b=c,a=b那么就不可能直接在进程里面赋值a=c.因为c的值要经过两个时钟延迟才传到a里面,如果c为1,b为0,a为1的话,那么在在非阻塞语句的进程里面, 第一个时钟沿到来,a为0,第二个时钟沿到来,a为1 (注:在一次触发进程里,无论是阻塞和非阻塞语句,每条语句只能执行一次) 阻塞语句与非阻塞语句使用注意事项 阻塞语句是顺序执行的,而非阻塞语句是同时执行的 大体原则:阻塞语句运用于组合逻辑电路设计,非阻塞语句运用于时序逻辑电路设计 不要在同一个always块里面混合使用“阻塞赋值”和“非阻塞赋值” Verilog的特点 Verilog易学易用(与C语言相似),功能强大,使用 广泛。 可以在不同层次描述数字系统 开关级描述 寄存器传输级描述 门级描述 基本设计单元是“模块”(block)包括: 接口描述 逻辑功能描述 Verilog HDL程序基本结构 Verilog的基本设计单元是“模块”(BLOCK) 模块由两部分组成:一部分描述接口,另一部分描述逻辑功能。 按照模块接口的描述,一个模块可以在另一个模块中使用;逻辑功能的描述可以使用连续赋值语句(描述数据流行为)、过程结构(时序行为)、开关级原语、门级原语和用户定义的原语等方式。 模块的基本结构 Module模块名(端口列表); 端口说明(input,out,inout) 参数定义可选 数据类型定义 连续赋值语句(assign) 过程块(initial和always) 行为描述语句 低层模块实例 任务和函数 延时说明块 endmodule 模块的基本结构说明 模块名是模块惟一的标识符; 端口列表是由模块的输入、输出和双向端口组成的端口列表,这些列表用来与其他模块进行连接; 数据类型定义部分用来指定模块内所用的数据对象为寄存器型、存储器型或连线型; 过程块包括initial过程块和always过程块两种,行为描述语句只能出现在这两种过程块中; 延时说明块用来对模块各个输入和输出端口间的路径延时进行说明。 模块调用 调用模块实例的一般格式: 模块名参数列表实例名(端口列表); Verilog HDL程序是由模块组成的,每个模块的内容都包含在“Module”和“endmodule”之间。 每个模块都要进行端口定义,说明输入、输出端口。 模块的描述方式 Verilog HDL模块代表硬件上的逻辑实体,其范围可以从简单的门到整个电路系统. 模块可以根据所采用的不同描述方式而分为行为描述和结构描述两类,也可采用两种方式的组合。 Verilog 语言要素 标识符(identifier) 用来表示各种变量、参数或构件的名称,可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但第一个字符必须是字母或下划线,区分大小写 转义标识符 可以在一条标识符中包含任何可打印字符。转义标识符以“\”(反斜杠)符号开头,以空白结尾(空白可以是一个空格、一个制表符或换行符) Verilog 语言要素 关键字 Verilog HDL定义了一系列保留字(关键字)。 在编写Verilog HDL程序时,变量的定义不要与关键字冲突。 注意只有小写的关键字才是保留字。 注释 在 Verilog HDL里有两种形式的注释: // 是单行注释 /* */ 是多行注释 格式 Verilog HDL 区分大小写,即大小写的标识符是不同的。 源程序书写格式自由,可跨越多行编写,也可在一行内编写。 系统任务和函数 以字符开始的标识符表示系统任务或系统函数。任务提供了一种封装行为的机制。这种机制$可以在设计的不同部分被调用。任务可以返回0个或多个值。函数除只能返回一个值以外与任务相同。 函数
文档评论(0)