Verilog基础知识0(`define、parameter、localparam三者的区别及举例)
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内有效的定义,可用于参数传递;
如果在模块内部定义时无法进行参数传递,
若在模块名后照下面这样写则可以进行传递
举例:定义->
- module video_in
- #(
- parameter MEM_DATA_BITS = 64,
- parameter INTERLACE = 1 // 0
- )
- (
- input clk,
- input rst_n,
- output burst_finsh
- );
使用 -> 调用此模块的时候可以像端口信号传递一样进行参数传递
- video_in
- #( .MEM_DATA_BITS ( 64 ),
- .INTERLACE ( 1 )
- )
- u_video_in (
- .clk (clk_50m),
- .rst_n (rst_n),
- .burst_finsh (burst_finsh)
- );
(3) localparam:
概念:本module内有效的定义,不可用于参数传递;
localparamcannot be used within the module port parameter list.
一般情况下,状态机的参数都是用localparam的。
举例:
- localparam BURST_LEN = 10'd64; /*一次写操作数据长度 */
- localparam BURST_IDLE = 3'd0; /*状态机状态:空闲 */
- localparam BURST_ONE_LINE_START = 3'd1; /*状态机状态:视频数据一行写开始 */
- localparam BURSTING = 3'd2; /*状态机状态:正在处理一次ddr2写操作 */
- localparam BURST_END = 3'd3; /*状态机状态:一次ddr2写操作完成*/
- localparam BURST_ONE_LINE_END = 3'd4; /*状态机状态:视频数据一行写完成*/
- reg[2:0] burst_state = 3'd0; /*状态机状态:当前状态 */
- reg[2:0] burst_state_next = 3'd0; /*状态机状态:下一个状态*/
Verilog基础知识0(`define、parameter、localparam三者的区别及举例)的更多相关文章
- `define、parameter、localparam三者的区别
`define: 可以跨模块的定义,写在模块名称上面,在整个设计工程都有效.一旦'define指令被编译,其在整个编译过程中都有效.例如,通过另一个文件中的`define指令,定义的常量可以被其他文件 ...
- `define、parameter、localparam三者的区别(转)
`define: 可以跨模块的定义,写在模块名称上面,在整个设计工程都有效.一旦‘define指令被编译,其在整个编译过程中都有效.例如,通过另一个文件中的`define指令,定义的常量可以被其他文件 ...
- verilog 基础知识
mealy型状态机的下一状态和输出取决于当前状态和当前输入: moore型状态机的下一状态和输出取决于当前状态和当前输入,但其输出仅取决于现在的状态: 基本门原语的输出端口必须写在端口列表的前面,基本 ...
- UVM系统验证基础知识0(Questasim搭建第一个UVM环境)
版权声明:本文为Times_poem原创文章,转载请告知原博主.特别声明:本文在原文基础上做了简单修改以适应文中举例在questasim下的运行,敬请原博主谅解. 需求说明:UVM系统验证 内容 ...
- 以太网基础知识0(UDP和TCP有什么区别)
参考:http://zhidao.baidu.com/link?url=GSIg9_zFhWi6PHezalQveRwwUsU0as7k6MFd05r-cruLT1yDABARraHkuq8ohdIR ...
- Java基础 -- String,StringBuilder,StringBuffer三者的区别
结论 1-String,StringBuilder,StringBuffer 之间的区别主要是在两个方面,即运行速度和线程安全这两方面: 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:St ...
- Java基础知识Set、List、Map的区别
就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是相对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...
- 网络基础知识-bps、Bps、pps的区别
在计算机科学中,bit是表示信息的最小单位,叫做二进制位:一般用0和1表示.Byte叫做字节,由8个位(8bit)组成一个字节(1Byte),用于表示计算机中的一个字符.bit(比特)与Byte(字节 ...
- 基础知识 Asp.Net MVC EF各版本区别
原文:https://www.cnblogs.com/liangxiaofeng/p/5840754.html 2009年發行ASP.NET MVC 1.0版 2010年發行ASP.NET MVC 2 ...
随机推荐
- e.stopPropagation()
1. 定义和用法 不再派发事件. 终止事件在传播过程的捕获.目标处理或起泡阶段进一步传播.调用该方法后,该节点上处理该事件的处理程序将被调用,事件不再被分派到其他节点. 2. 语法 event.sto ...
- 基于OpenMP的C++并行编程简单示例
示例要求:在整数A和B之间找到符合条件的值X,使f(X)=C. 示例代码(需要在VS中开启OpenMP支持): #include<iostream> #include<time.h& ...
- Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825
Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825 1. 播放系统服务器方面的维护2 1.1. 默认情况下,已经在系统的启动目录下增加了俩个启动项目2 1.2. ...
- redis 命令clear、set、get、del、rename、keys *、exists、type、expire、expireat、persist、ttl、move、select
清屏 clear 新增/修改set 查询get 删除del 修改key rename old new 查询所有的key keys *查询一个key是否存在 exists,有返回1,没有返回0查询值的类 ...
- apache ftp server的简单入门(properties验证)
Apache FTPServer:(开源) Apache FTPServer是一个100%纯Java的FTP服务器. 它的设计是基于现有的开放式协议的完整和便携式FTP服务器引擎解决方案.FTPSer ...
- leetCode题解之反转二叉树
1.题目描述 经典的反转二叉树,就是将二叉树中每个节点的左.右儿子交换. 2.题目分析 3.代码 TreeNode* invertTree(TreeNode* root) { if(root == N ...
- 2.Spring——maven依赖
1.spring-core 2.spring-context 3.spring-orm 4.spring-web spring-webmvc others pmo demo1 pmo demo2 1. ...
- 对JDBC的轻量级封装,Hibernate框架
IDEA是真的好用... 用脑子下jar包..http://mvnrepository.com/
- 从.net角度分析 异步和多线程
线程 进程 CPU目前都是多核心的,相当于一个大脑几块可以同时工作. 超线程CPU是指在一块CPU中,用虚拟方法将一个物理核心模拟成多个核心(如:一个单物理核心,模拟成二个核心,即所谓的二线程.)只有 ...
- [翻译] SCViewShaker
SCViewShaker https://github.com/rFlex/SCViewShaker About A highly configurable UIView category for s ...