1、概述

`define:作用 -> 常用于定义常量可以跨模块、跨文件;

范围 -> 整个工程;

parameter:     作用 -> 常用于模块间参数传递;

范围 -> 本module内有效的定义;

localparam       作用 -> 常用于状态机的参数定义;

范围 -> 本module内有效的定义,不可用于参数传递;

localparam cannot be used within the module port parameter list.

2、应用举例

(1) `define
    概念:可以跨模块的定义,写在模块名称上面,在整个设计工程都有效。
               一旦`define指令被编译,其在整个编译过程中都有效。例如,通
               过另一个文件中的`define指令,定义的常量可以被其他文件调用,
               直到遇到 `undef;
    举例:定义 `define UART_CNT 10'd1024
               使用 `UART_CNT
    
(2) parameter
    概念:本module内有效的定义,可用于参数传递;
               如果在模块内部定义时无法进行参数传递,
               若在模块名后照下面这样写则可以进行传递
    举例:定义->

  1. module video_in
  2. #(
  3. parameter MEM_DATA_BITS = 64,
  4. parameter INTERLACE     = 1      // 0
  5. )
  6. (
  7. input     clk,
  8. input     rst_n,
  9. output    burst_finsh
  10. );

使用 -> 调用此模块的时候可以像端口信号传递一样进行参数传递

  1. video_in
  2. #( .MEM_DATA_BITS ( 64 ),
  3. .INTERLACE     ( 1  )
  4. )
  5. u_video_in (
  6. .clk             (clk_50m),
  7. .rst_n          (rst_n),
  8. .burst_finsh (burst_finsh)
  9. );

(3) localparam:
    概念:本module内有效的定义,不可用于参数传递;
               localparamcannot be used within the module port parameter list.
               一般情况下,状态机的参数都是用localparam的。

举例:

    1. localparam BURST_LEN               = 10'd64;     /*一次写操作数据长度 */
    2. localparam BURST_IDLE              = 3'd0;       /*状态机状态:空闲 */
    3. localparam BURST_ONE_LINE_START    = 3'd1;       /*状态机状态:视频数据一行写开始 */
    4. localparam BURSTING                = 3'd2;       /*状态机状态:正在处理一次ddr2写操作 */
    5. localparam BURST_END               = 3'd3;       /*状态机状态:一次ddr2写操作完成*/
    6. localparam BURST_ONE_LINE_END      = 3'd4;       /*状态机状态:视频数据一行写完成*/
    7. reg[2:0]  burst_state              = 3'd0;       /*状态机状态:当前状态 */
    8. reg[2:0]  burst_state_next         = 3'd0;       /*状态机状态:下一个状态*/

Verilog基础知识0(`define、parameter、localparam三者的区别及举例)的更多相关文章

  1. `define、parameter、localparam三者的区别

    `define: 可以跨模块的定义,写在模块名称上面,在整个设计工程都有效.一旦'define指令被编译,其在整个编译过程中都有效.例如,通过另一个文件中的`define指令,定义的常量可以被其他文件 ...

  2. `define、parameter、localparam三者的区别(转)

    `define: 可以跨模块的定义,写在模块名称上面,在整个设计工程都有效.一旦‘define指令被编译,其在整个编译过程中都有效.例如,通过另一个文件中的`define指令,定义的常量可以被其他文件 ...

  3. verilog 基础知识

    mealy型状态机的下一状态和输出取决于当前状态和当前输入: moore型状态机的下一状态和输出取决于当前状态和当前输入,但其输出仅取决于现在的状态: 基本门原语的输出端口必须写在端口列表的前面,基本 ...

  4. UVM系统验证基础知识0(Questasim搭建第一个UVM环境)

    版权声明:本文为Times_poem原创文章,转载请告知原博主.特别声明:本文在原文基础上做了简单修改以适应文中举例在questasim下的运行,敬请原博主谅解. 需求说明:UVM系统验证 内容   ...

  5. 以太网基础知识0(UDP和TCP有什么区别)

    参考:http://zhidao.baidu.com/link?url=GSIg9_zFhWi6PHezalQveRwwUsU0as7k6MFd05r-cruLT1yDABARraHkuq8ohdIR ...

  6. Java基础 -- String,StringBuilder,StringBuffer三者的区别

    结论 1-String,StringBuilder,StringBuffer 之间的区别主要是在两个方面,即运行速度和线程安全这两方面: 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:St ...

  7. Java基础知识Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是相对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

  8. 网络基础知识-bps、Bps、pps的区别

    在计算机科学中,bit是表示信息的最小单位,叫做二进制位:一般用0和1表示.Byte叫做字节,由8个位(8bit)组成一个字节(1Byte),用于表示计算机中的一个字符.bit(比特)与Byte(字节 ...

  9. 基础知识 Asp.Net MVC EF各版本区别

    原文:https://www.cnblogs.com/liangxiaofeng/p/5840754.html 2009年發行ASP.NET MVC 1.0版 2010年發行ASP.NET MVC 2 ...

随机推荐

  1. JavaWeb学习总结(七):通过Servlet生成验证码及其应用 (BufferedImage类)

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  2. 超级简单的jquery轮播图demo

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. vue 面试时需要准备的知识点

    前端火热的框架层出不穷,作为码农的我们,依旧需要去学习,去探索新的问题,学习新技术,其实就是为了写一手好的,自认为是高质量的代码.今天主要分享一下前端最火的框架vue,也是我比较喜欢的框架. vue上 ...

  4. 一步一步 Pwn RouterOS之exploit构造

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前面已经分析完漏洞,并且搭建好了调试环境,本文将介绍如何利用漏洞写 ...

  5. leetCode Detect Capital

    1.问题描述 Given a word, you need to judge whether the usage of capitals in it is right or not. We defin ...

  6. DROP语句总结

    一.基本语句 通过使用 DROP 语句,可以轻松地删除索引.表和数据库.  1.DROP INDEX 语句 DROP INDEX 语句用于删除表中的索引. <!--用于 MS Access 的 ...

  7. 解决国外模板h1、h2、h3...不显示中文文章标题的问题

    如果你经常用国外好看的网页模版时候,会遇到不显示中文文章标题的情况,显示英文标题却正常.遇到这个情况很多人认为应该修改CSS的font-family的字体,其实这是错误的,与CSS无关. 出现这种情况 ...

  8. React:组件的生命周期

    在组件的整个生命周期中,随着该组件的props或者state发生改变,其DOM表现也会有相应的变化.一个组件就是一个状态机,对于特定地输入,它总返回一致的输出. 一个React组件的生命周期分为三个部 ...

  9. NSMapTable、NSHashTable与NSPointerArray的封装

    NSMapTable.NSHashTable与NSPointerArray的封装 说明 NSMapTable对应NSDictionary:NSHashTable对应NSSet:NSPointerArr ...

  10. win10想说爱你不容易——安装.net3.5也是一个坑(已有完美解决方法)

    最终完美解决方法:经过多次波折,终于找到无法正常安装.net3.5的原因了,是因为已删除的用户还有注册表残留导致的,而且这个问题还会影响一个win10更新的安装,导致每天更新失败,撤销更新... 详见 ...