news 2026/10/15 22:14:11

FPGA应用开发和仿真【2.1】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA应用开发和仿真【2.1】

2.19 编译指令

编译指令用来设置编译过程的一些属性、控制编译流程等,Verilog所有的编译指令均以沉音符号“`”(ASCII码0x60)开头。注意不要将沉音符号与撇点“'”混淆。编译指令均独占一行,并不以分号结尾,可带有注释。这里简单介绍几个常用的编译指令。

·`default_nettype,设定默认线网类型

·`define、`undef和`undefineall,宏定义。

·`include,包含文件。

·`ifdef、`ifndef、`elsif、`else和`endif,条件编译。

·`timescale,时间单位和精度设置。

·`resetall,重置所有编译指令。

`default_nettype用来设置默认的线网类型,形式为:

2.13节提到了模块端口的默认线网类型为wire,便可以使用这个编译指令来更改。Verilog有一个比较危险的特性是可以隐式定义线网,即编译器将把未定义过的标识符认定为默认类型的线网,因而任何地方一个笔误,都将形成一个默认类型的线网,这多半是不可预期的,所以建议初学者将线网类型的默认值设置为none:

这样便杜绝了编译器将笔误认定为新线网,当然也使得我们在简写模块的端口定义时,不能省略wire关键字。

`define、`undef和`undefineall用来定义宏和解除宏定义,宏可以在代码中使用或用于条件编译指令中,编译器直接将宏按定义时的文本展开。它们的使用形式如下:

其中`define还可以带有参数,宏内容中参数部分会以使用时的参数内容替代,`undefineall用于解除所有已定义的宏。例如:

注意其中MAX宏的内容大量使用了括号,这是为了防止处于复杂表达式中的宏展开时优先级错乱。

使用宏的格式是:`<宏名>。注意宏名前面带有沉音符。

`include用于包含文件,等同于直接将被包含的文件的全部内容替换在当前位置,当需要实例化位于其他文件中的模块、导入位于其他文件中的包时,往往需要使用该编译指令。一般形式为:

其中文件路径可以是绝对路径或相对路径。使用双引号时,相对路径以编译器当前工作目录(常常是文件所在目录)为起点;使用尖括号时,以编译器和规范设定的目录为起点。

大多数EDA工具,特别是带有图形界面的工具,都以工程的形式管理多个源文件,在同一个工程中的任何源文件中均可直接实例化定义在其他源文件中的模块,并不需要使用`include编译指令。

`ifdef、`ifndef、`elsif、`else和`endif为条件编译指令,常用形式为:

使用`ifdef时,如果宏名1被定义,则代码段1将被编译,否则如果宏名i被定义,代码段i将被编译;如果宏名1至宏名i均未定义,则代码段k将被编译。使用`ifndef时,如果宏名1未被定义,则代码段1将被编译,否则,如果宏名i被定义,代码段i将被编译;如果宏名1被定义而宏名i均未被定义,则代码段k将被编译。

`timescale用于设定时间单位和精度,在2.12.1节中介绍延迟时,所有的时间都带有单位,比如“ns”,而如果使用`timescale编译指令设定了单位和精度,则可省略单位。一般形式是:

其中m、u(μ)、n、p、f为国际单位制词头,“/”左侧为时间单位,右侧为时间精度,时间精度必须不大于时间单位。定义了时间单位和精度之后,所有不带单位的时间均会乘以时间单位,所有时间均会被四舍五入到时间精度。例如:

代码2-46 begin-end块中延迟的示例

第3章 ModelSim和仿真

本章介绍使用ModelSim软件进行仿真的方法,相当于ModelSim的简明入门教程。书中使用的ModelSim软件为ModelSim PE Student Edition 10.4a(以下简称ModelSim PESE或ModelSim),它为免费的学生版,支持Windows操作系统,虽有仿真效率和代码长度的限制,但应对学习过程中涉及的小规模设计绰绰有余。

读者可在Mentor公司官方网站中ModelSim PESE相关页面下载安装文件。安装过程比较简单,可参照页面上的介绍。安装完成需填写相关表格,并通过电子邮件获取学生版授权文件。

本章介绍的仿真都是2.2节中提及的功能验证,至于门级时序验证,则需要结合具体的FPGA及其开发工具。

3.1 仿真和测试的相关概念

第2章已经提到,任何数字系统不可能设计完成就能保证正确,一定是需要经过测试的,仿真技术使得数字系统不必真实地把电路或芯片做出来就能做测试,而是在代码设计完成后或综合完成后便

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 5:49:41

基于proteus的智能门禁报警系统仿真:核心要点

从零搭建智能门禁系统&#xff1a;Proteus仿真实战全解析你有没有试过在没有一块开发板、一根杜邦线的情况下&#xff0c;完整跑通一个带RFID识别、密码输入、声光报警的智能门禁系统&#xff1f;听起来像天方夜谭&#xff1f;其实&#xff0c;借助Proteus Keil C51的联合仿真…

作者头像 李华
网站建设 2026/10/15 16:33:50

React Native 导航错误解析与解决方案

在使用React Native进行开发时,经常会遇到各种各样的错误,其中一个常见的错误是导航组件中字符串渲染的问题。今天我们将深入探讨一个具体的案例,分析其原因并提供解决方案。 错误描述 错误信息如下: Error: Text strings must be rendered within a <Text> compo…

作者头像 李华
网站建设 2026/10/15 17:28:40

YOLOFuse助力PID控制系统的视觉感知模块设计

YOLOFuse助力PID控制系统的视觉感知模块设计 在工业自动化、无人机巡检和智能机器人快速发展的今天&#xff0c;一个普遍而棘手的问题浮出水面&#xff1a;当环境变暗、起雾或出现遮挡时&#xff0c;依赖摄像头的控制系统为何频频“失明”&#xff1f; 尤其是在基于视觉反馈的…

作者头像 李华
网站建设 2026/10/15 16:33:32

YOLOFuse林区非法砍伐监测:运输车辆轨迹追踪

YOLOFuse林区非法砍伐监测&#xff1a;运输车辆轨迹追踪 在深夜的密林深处&#xff0c;一辆满载原木的卡车悄然穿行于监控盲区——这样的场景曾是森林执法中最棘手的难题。传统可见光摄像头在无光、烟雾或浓雾环境下几乎失效&#xff0c;而人工巡护难以覆盖广袤山林。如今&…

作者头像 李华
网站建设 2026/10/15 16:33:32

YOLOFuse药店冷藏柜温度监测:疫苗存储安全保障

YOLOFuse药店冷藏柜温度监测&#xff1a;疫苗存储安全保障 在现代医疗体系中&#xff0c;疫苗的储存与运输对温度控制极为敏感。一旦冷链中断或管理疏漏&#xff0c;可能导致整批药品失效&#xff0c;甚至威胁公共健康安全。尤其在药店这类高频操作场景中&#xff0c;冷藏柜门频…

作者头像 李华