【基本知识】verilog中 `define 的使用

摘要:
如果您通过localparam或parameter直接在模块中定义参数,我想通过使用“define macro definition+”include“file.v”file inclusion来实现参数模块化设计,这是我在Verilog Digital System design Tutorial(夏文宇)中看到的。2.在段落中使用“定义宏”。v文件定义参数(部分,错误):

背景:

  在最近实战开发中发现:对外部芯片进行初始化时,往往需要定义大量参数。

  若直接在module中通过localparam或者parameter进行参数定义的话,会带来两个问题:

    1.代码长度增加,不够美观;

    2.不利于参数和代码修改;

  为了解决这两个题,我想到了在之前在《verilog数字系统设计教程》(夏闻宇)看到过的`define宏定义+`inlude "file.v"文件包含来实现参数模块化设计的方式。

实战:

  1.新建参数模块文件(我命名为para.v);

  2.在para.v文件中使用'define宏定义参数(部分、有错误): 

    //`define+name+参数  
    `define   STATE_INIT     3'd0;
    `define   STATE_IDLE    3'd1;
    `define   STATE_WRIT   3'd2;
    `define   STATE_READ  3'd3;
    `define   STATE_WORK      3'd4;
    `define   STATE_RETU  3'd5;

  3.在需要调用参数的文件init.v中使用`include "para.v":

    `include "para.v"

  4.在init.v文件需要参数的地方使用`name 调用(部分):

    state_init <= `INIT_0;

  5.保存之后,程序报错: 

    ERROR:HDLCompiler:806 - "F:/xilinx/pcm1864/pcm1864_3/v/init.v" Line 51: Syntax error near ";".
    ERROR:ProjectMgmt - 1 error(s) found while parsing design hierarchy.

  6.之后进行了两个多小时的调试(一直没发现问题所在= =),最终在书上的案例中发现原因:`define+name+参数 之后不能加";",也就是说,正确的代码应该是这样的:

    //`define+name+参数  
    `define   STATE_INIT     3'd0
    `define   STATE_IDLE    3'd1
    `define   STATE_WRIT   3'd2
    `define   STATE_READ  3'd3
    `define   STATE_WORK      3'd4
    `define   STATE_RETU  3'd5

  7.之后就都正确了。

总结:

  1.`define+name+参数 之后不能加任何东西!

  2.写代码一定要细心,细致!

  3.当使用从未使用过的语句时,一定要先确定正确的用法!

补充:

  `define 与localparam和parameter最大的区别就是`define 可以跨文件传递参数;parameter只能在模块间传递参数;而localparam只能在其所在的module中起作用,不能参与参数传递。

免责声明:文章转载自《【基本知识】verilog中 `define 的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇支付宝的性能测试Mac find 去除 “Permission denied” 信息的方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

redis在linux上部署,Redis服务器搭建/配置/及Jedis客户端的使用方法(java语言)

转自http://my.oschina.net/gccr/blog/307725?fromerr=yX8AifBq   Redis服务器搭建 安装 在命令行执行下面的命令: $ wget http://download.redis.io/releases/redis-2.8.13.tar.gz $ tar xzf redis-2.8.13.tar.g...

JS-获取URL请求参数

前言:原来做过一个项目,需要实现一个页面打印的功能,由于项目中使用了AngularJS+Bootstrap等前端框架,需要打印的页面又在弹出框中,使用了Bootstrap的模态框后发现打印的效果不太好,后来就使用原生的方式弹出一个新的窗口,不过新的窗口中的某些数据又需要从前一个页面中获取,使用AngularJS框架后发现从后台返回的页面总是被封装成一个对象...

PHP cURL应用实现模拟登录与采集使用方法详解

对于做过数据采集的人来说,cURL一定不会陌生。虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_contents显得有点无能为力。因此,本文将为你介绍采集神器cURL的使用。 工具 火狐浏览器(FireFox) + Firebug “工欲善其事,必先利其器。...

简易自助售货机(JAVA)

用JAVA面向对象编程方式编的(搬运的) 这是构想图,上面是呈现给顾客的功能 下面是人为设置的变量 price:食品价格 amount:投入货币面值 balance:用户账户余额 total:售货机总收入  代码: package vendingmachine; public class VendingMachine { int price...

django项目搭建及Session使用

django+session+中间件 一、使用命令行创建django项目 在指定路径下创建django项目 django-admin startproject djangocommon   在项目目录下  创建app cd djangocommon python manage.py startapp commoncore(django-admin sta...

[转]如何:在设备上安装 SQL Server Compact 3.5

将设备连接到计算机,或者将仿真程序插入底座。 有关更多信息,请参见如何:将设备仿真程序插入底座和移除底座。 说明: 计算机上必须已安装了 Windows Mobile Device Center 或 Microsoft ActiveSync。 在桌面计算机上,启动 Windows 资源管理器,然后转至文件夹 驱动器:Program File...