Verilog基础知识0(`define、parameter、localparam三者的区别及举例)
原文地址:https://blog.csdn.net/times_poem/article/details/51371940
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; /*状态机状态:下一个状态*/
转载于:https://www.cnblogs.com/yhsy1002/p/9230862.html
Verilog基础知识0(`define、parameter、localparam三者的区别及举例)相关推荐
- Verilog基础知识总结02
Verilog基础知识总结02 1.简述Verilog如何建模 数字电路有两种基本要素:线(器件管脚之间的物理连线:wire)和器件(模块:module). Verilog建模就是用HDL语言把数字电 ...
- Verilog基础知识(数值表示总结,signed,原码,反码,补码)
以前虽然是用过verilog,但是只使用了其中最常见wire,reg类型数据,并且是无符号的,因为是及处理过程很多数据就是无符号的.但是想进一步拓展无符号数,或者其底层的补码形式存储与运算方式,就需要 ...
- 计算机0基础知识,计算机基础知识0课件.ppt
计算机基础知识0课件 第 一 篇;第一章 计算机系统概述; 1.1.2 计算机的发展; 1.1.3 计算机系统的组成; (2)计算机软件;1.3 微型计算机系统; (2)存储器; (3)输入/输出设备 ...
- verilog基础—规范化参数定义parameter
引言 采用parameter可以让程序变得可维护性,所以在verlog中,尽量在有数据可能发生变动的地方,设置为parameter,以免以后又从头开始更改. parameter经常用于定义数据位宽,定 ...
- 深度学习基础(基础知识0)
深度学习各种网络其实基础就是各种基础知识累积,今天主要想把这三个讲清楚:梯度下降.神经网络.反向传播算法. 一.神经网络(一切的基石) 工智能的底层模型是"神经网络"(neural ...
- Verilog 基础知识
Verilog 的逻辑值 逻辑 0:表示低电平,也就是对应我们电路的 GND: 逻辑 1:表示高电平,也就是对应我们电路的 VCC: 逻辑 X:表示未知,有可能是高电平,也有可能是低电平: 逻辑 Z: ...
- Verilog基础知识
I/O端口类型: input wire型 output wire/reg型 verilog可综合语句 assign,always,其中initial 语句不 ...
- C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策
一.用define宏定义表达式 1.定义一年有多少秒: #define SEC_A_YEAR 60*60*24*365 //上述描述不可靠,没有考虑到在16位系统下把这样一个数赋给整型变量的时候可能会 ...
- gddr6速率_显卡GDDR6显存基础知识:显存GDDR6和GDDR5区别对比科普篇
NVIDIA为我们发布了全新一代RTX20系显卡,不仅为我们带来了光线追踪.DLSS等全新技术,还搭配了全新一代GDDR6显存,而在10系列只是GDDR5或GDDR5X显存.今天装机之家帮大家科普一下 ...
- Verilog基础知识(异步FIFO)
本文主要内容来自Clifford E. Cummings的 Simulation and Synthesis Techniques for Asynchronous FIFO Design 这篇文章的 ...
最新文章
- 1356服务器性能,Intel发布4款LGA1356插口服务器处理器
- html文档中的元数据,javascript – 如何使用pdf.js从pdf文档中获取元数据
- 设备管理学习之概念篇
- Hybris产品主数据的价格维护
- [转载]ArcGIS SERVER 9.3如何清除REST缓存
- “JavaSwing” ——简单使用
- 破产的圣文森特医院,如何利用大数据寻求解救方案?
- Mozilla 修复跨平台加密库 NSS 中的严重漏洞
- 中国移动的新自由主义精神
- 用python画画简单代码_Python3使用PyQt5制作简单的画板/手写板实例
- OpenCV学习篇2:viz模块简单用法
- 秋招提前批已来,万字长文教你如何增加面试大厂的成功率
- ubuntu上安装视频插件
- C#初学者教程系列1:什么是.NET Framework?
- SQL Server个人笔记(1)
- Unity(二)示例项目(1):FPS游戏—认识基本工具
- 思岚中小型机器人底盘Apollo怎么样?
- Jenkins设置Window编译环境从节点
- Kubernetes 纳管节点卡住导致加入集群失败问题解决
- TVS二极管SMBJ18CA 丝印标识BET SMB封装 1500W功率
热门文章
- docker基础3--容器的基本操作
- mysql 5.1 1067,mysql服务1067错误多种解决方案汇总
- 浙江理工大学机械复试c语言真题,2016年浙江理工大学机械与自动控制学院计算机应用基础)之C程序设计复试笔试最后押题五套卷...
- python查找字符串出现次数_python实现从字符串中找出字符1的位置以及个数的方法...
- TensorFlow共享变量
- linux 软件应用
- mysql 动态游标 , 实际上不要使用, 因为两个人同时执行会删除了其中一个人的数据...
- [英中双语] Pragmatic Software Development Tips 务实的软件开发提示
- 4G江湖大战全面开启 移动4G用户数突破9000万
- Spring+quartz集群配置,Spring定时任务集群,quartz定时任务集群