原文链接:https://www.cnblogs.com/yjw951012/archive/2019/03/25/10595533.html

背景:

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

  若直接在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 的使用相关推荐

  1. Verilog中`define和parameter有什么区别

    Verilog中使用`define和parameter有什么区别? `define和parameter都可以在设计中用来指定常量. 例如: 以下是使用`define和parameter的一些区别: 什 ...

  2. verilog中define、parameter、localparam的区别

    Verilog代码可移植性设计 1.       参数定义 localparam,实例代码如下: module tm1( clk,rst_n, pout ); input clk; input rst ...

  3. Verilog初级教程(20)Verilog中的`ifdef 条件编译语句

    文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...

  4. FPGA之道(36)Verilog中的编译指令

    文章目录 前言 Verilog中的编译指令 define指令 timescale指令 inlcude指令 前言 本文摘自<FPGA之道>,一起来了解下Verilog中的编译指令. Veri ...

  5. Verilog中的条件编译语句 `ifdef、`else、`endif 等

    今天在参考大佬的RS232 Receiver的时候,用到了`ifdef指令,我虽知道它是条件编译指令,但是内容已经忘了差不多了,也不敢胡乱猜测.今天趁此机会总结一下: 一般情况下,Verilog HD ...

  6. Verilog中的parameter

    1. 概述 在Verilog中我们常常会遇到要将一个常量(算法中的某个参数)赋给很多个变量的情况,如: x = 10; y = 10; z = 10; 如果此时10要改为9,就需要在代码中修改3个地方 ...

  7. Verilog中generate语法和作用

    Verilog中generate语句的用法 在Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计 ...

  8. C中 #define

    C中通常用#define,,C++就像上所说.用const   了..     或是枚举enum方法..     #define命令也就是宏定义命令..     1.作变量说明:     #defin ...

  9. verilog中数组的定义_开源仿真工具Icarus Verilog中的verilog parser

    前面提到用flex和bison开处理命令行参数,回顾一下:开源仿真工具Icarus Verilog中的命令行参数处理方法. 那么Verilog的parser又是怎么实现的呢?简单地说,与做命令行参数的 ...

最新文章

  1. 记录值上调10_「阴阳师」10月16日维护更新公告,海国迷踪,迷影重重
  2. 这个登上Nature封面的「群体学习」,无需中央协调员,比联邦学习更优秀
  3. map and flatmap 区别
  4. 1.7 编程基础之字符串 30 字符环 python
  5. mdin偏移_C8051F020入门指导重点.ppt
  6. java怎么发布版本号_java 实现比较版本号功能
  7. linux 清空文件夹_弱电工程师-了解这些Linux命令,菜鸟也能变高手!
  8. 数据分块算法java_分块查询算法(JAVA)
  9. 小程序 轮播图之自动适应宽高度
  10. 如何快速发现XSS跨站攻击漏洞
  11. 创建服务器定时运行程序
  12. GCC 优化选项 -O -O0 -O1 -O2 -O3 -Os 简单介绍
  13. 文档中心 统计分析 统计分析Android文档 集成文档
  14. 优动漫PAINT基础系列之图层模式
  15. 做表情包就能卖1亿刀,这事儿放在国内我是不信的
  16. php网页怎么设置背景图片大全唯美,html文档中怎么把图片作为背景?
  17. 基于PHP的学生成绩管理系统
  18. android sqlite #039;,问题详情_百度云推送_免费专业最精准的移动推送服务平台
  19. 漏洞复现篇——利用XSS漏洞实现键盘记录
  20. 当实体类无法引用,有没有任何问题的时候,报红报错无法启动

热门文章

  1. Linux、Windows、Android跨平台可视化方式进行文件同步——syncthing使用教程
  2. SAP FB50 由操作习惯引起的 财务凭证-成本中心-功能范围 异常
  3. github上标星70.5k,贼火的Java面试突击手册,不看就真的亏了
  4. JavaScript课后练习
  5. 百度地图jsp源码(直接复制使用)
  6. nacos名字的由来
  7. office 论文 页码_毕业论文必备技巧:Word页码从第三页开始设置方法
  8. vue3 + vite + ts + pinia + yarn
  9. 本地化谷歌字体_本地化叙述,由Google提供的最新,最出色的图像字幕
  10. matlab centroid,Matlab中一个很有用的函数:regionprops