Verilog基础知识0(`define、parameter、localparam三者的区别及举例)

2023-10-30

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;       /*状态机状态:下一个状态*/
       
 来自:时间的诗

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Verilog 显示中不必要的空间

    我正在尝试以十进制显示一些 32 位值 除了 b 和前一个字符之间有奇怪数量的不必要的空格外 这工作正常 例如 如果我有一个 32 位 reg a 其十进制值为 33 我将使用类似的东西 initial begin display a d
  • 何时使用tick(')进行Verilog数组初始化?

    数组初始化可以通过或不通过 int a 8 0 1 2 3 4 5 6 7 Packed int b 8 0 1 2 3 4 5 6 7 Unpacked 有没有correct方式 假设数组使用不可打包的类型 例如int string ET
  • 在 Verilog 中生成 For 循环中实例化模块

    我正在尝试使用 Verilog 实例化一些模块generate块 因为我将实例化可变数量的它们 genvar i generate for i 1 i lt 10 i i 1 begin status whatever status clk
  • verilog模块中的reg和wire有什么区别?

    在verilog模块中我们什么时候应该使用reg以及什么时候应该使用wire 我还注意到有时输出会再次声明为 reg 例如 D 触发器中的 reg Q 我在某处读过这个 过程赋值语句的目标输出必须是 reg 数据类型 什么是程序赋值语句 我
  • 64 位 ALU 输出在 TestBench 波上显示高阻抗

    我必须制作一个 64 位 ALU 它接受 A 和 B 64 位输入 进位输入输入并输出 64 位结果以及 1 位进位输出 还有一个 5 位功能选择 FS 其中 FS 0 控制 B 是否反转 使用 2to1 多路复用器 F 1 对 A 执行相
  • 比较数字进行排序然后得到中值

    使用按位或比较运算符对五个整数进行排序可以通过以下方式实现 首先获取最大的数字 然后获取第二大的数字 然后获取第三大的数字 依此类推 这是我获取最高数字的代码 include
  • 使用多路复用器进行双向移位

    编辑 仅通过屏幕截图 http prntscr com lv3uqw http prntscr com lv3yhf 和我下面的代码 您仍然可以在这里理解我的目标 以防万一您不想阅读文本 我正在尝试为通用移位寄存器编写 Verilog 代码
  • Vivado 比特流消息:违反规​​则 (LUTLP-1) 组合循环

    我在串流时遇到问题 该项目旨在创建一个占空比为 1 2 的时钟 综合和实现过程中没有任何问题 我尝试了几种方法来解决它 但他们的表现并不好 module clock div clk clk out input clk output reg
  • Verilog 中总是后面跟着 #(...) pound 是什么意思?

    在一个简单的时钟生成器示例中 我看到以下代码 always cycle 2 clk clk 我以前总是见过 但没见过井号 我试图在文档中找到它 但我所能找到的只是一些对 实值端口 的引用 没有进一步的阐述 这是一个延迟操作 它本质上只是读取
  • Verilog 最佳实践 - 递增变量

    我绝不是 Verilog 专家 我想知道是否有人知道这些增加值的方法中哪一种更好 抱歉 如果这个问题太简单了 Way A 在组合逻辑块中 可能在状态机中 some condition count next count 1 然后在一个连续块中
  • Verilog:添加寄存器的各个位(组合逻辑,寄存器宽度可参数化)

    我正在尝试想出一种方法来添加寄存器的各个位 例如 if regA 111000 then regB 3 位的总和regA 1 Verilog或SystemVerilog中是否有可以直接使用的可综合函数 运算符来执行此操作 如果不是 那么问题
  • 将枚举转换为逻辑

    考虑以下模块声明 module DFF d q CLK RESET parameter W 2 input W 1 0 d input CLK input RESET output logic W 1 0 q endmodule 当 d 和
  • 「HDLBits题解」Gates4

    本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接 Gates4 HDLBits module top module input 3 0 in out
  • 如何在 Verilog 中综合 While 循环?

    我尝试设计一个 Booth 乘法器 它在所有编译器中运行良好 包括 Modelsim Verilogger Extreme Aldec Active Hdl 和 Xilinx Isim 我知道模拟和综合是两个不同的过程 而且只有少数Veri
  • 在 Mac OS X 10.6.8 上用什么来编译和模拟 Verilog 程序?

    作为教学大纲的一部分 我需要模拟 Verilog 程序 但是 我的大学使用 Xilinx ISE 但它不适用于 Mac 因此 请帮助我提供最好的软件以及有关如何安装和使用它们的一些详细步骤 你可以尝试伊卡洛斯 Verilog http iv
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 标识符必须用端口模式声明:busy。 (Verilog)

    我有如下所示的 Verilog 代码 当我编译它时 我收到以下错误消息 并且代码的第一行突出显示 Error 标识符必须用端口模式声明 busy Code module main clk rst start busy ready cnt s
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • reg 声明中的位顺序

    如果我需要使用 4 个 8 位数字 我会声明以下 reg reg 7 0 numbers 3 0 我对第一个和第二个声明 7 0 和 3 0 之间的区别感到很困惑 他们应该按什么顺序来 第一个是保留数字的大小 而第二个是保留数字的数量 还是
  • 使用正则表达式进行 Verilog 端口映射

    我有一个很长的端口映射 我想在其中替换一堆 SignalName i with SignalName SignalName i 我想我可以用正则表达式轻松地做到这一点 但我无法弄清楚如何做到这一点 有任何想法吗 假设 SignalData

随机推荐

  • BasicDao的使用

    本次博客带领大家学习BasicDao的使用 BasicDao的基本说明 DAO data access object数据访问对象 这样的通用类 称为BasicDao 是专门和数据库交互的 即完成对数据库 表 的crud操作 在BasicDa
  • tf2梯度计算为None的情况

    今天搭建用tf2搭建WGAN网络 自己来写梯度函数 在使用tf GradientTape 来求梯度时 发现求出结果为None 一般来说结果为None 表示输入变量之间没有构成可求导的关系 同时也需要理解tf GradientTape 求导的
  • 毕业设计-基于机器视觉的嵌入式烟雾识别系统- OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 相关技术简介 二 图像视频识别算法研究 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越
  • iOS开发,定位当前所在地理位置偏移,坐标转换

    我的blog地址 http blog csdn net h qiao 欢迎访问 在开发中经常会遇到定位当前位置 而且不需要有地图之类的一系列功能 一般都会用CLLocationManger来定位 但是会发现定位出来的经纬度地理反编码之后和自
  • 新浪股票接口获取历史数据

    这两天做了一个调用新浪股票接口获取实时以及历史股票数据的应用 因为新浪没有公开关于其接口的官方文档 所以通过各种百度差了很多关于新浪股票接口的使用 不过大家基本都是转载或者直接复制 对于实时数据的获取讲的很详细 但是缺少获取历史数据的方法
  • Oracle 数据库误truncate table恢复过程

    北京某国企客户 Oracle 11g R2 数据库误truncate table CM CHECK ITEM HIS 表数据丢失 业务查询到该表时报错 此时发现数据库的备份不能用 表数据无法查询 客户Oracle 11g R2 数据库误tr
  • Map对象和普通对象的7个区别

    前言 普通对象和 ES6 的新对象 Map 都可以存储键值对 但是 它们之间有什么区别 今天来聊一聊 1 初始化与使用 普通对象可以直接使用字面量进行初始化 而 Map 需要 Map 构造函数进行初始化 如果想要有初始值 则需要传递一个数组
  • shell之I/O重定向

    管道 管道符 cat和more命令 重定向 文件标识符 I O重定向符号及其用法 exec命令 代码块重定向 命令行处理 命令行处理流程 eval命令 管道 管道是Linux编程中最常用的技术之一 Shell编程中竖杠符号 command1
  • python 时间表_Python计算出给定的时间段的具体日期列表-大全

    由于工作中经常用到关于用户自定义时间 来进行后台数据的查询 特意整理了一下工作中常用的到的关于时间列表的一个函数 可以计算出某一年中的具体哪个周的开始和结束日期 某个周的具体日期列表 2015年38周 自定义时间段的具体日期列表 20150
  • 架构内容框架建立在标准内

    内容元模型 架构内容框架建立在标准内容元模型的基础上 标准内容元模型对架构中存在的所有类型的构建块进行了定义 内容元模型的一个高层概览图如下图所示 这个元模型图示了可以如何去描述这些构建块以及它们之间如何相关联 内容元模型概览 在创建和管理
  • PCB设计-Allegro软件入门系列-扇出

    在cadence布线时 对于BGA封装的器件 管脚通常较密且管脚一般较多 且在布线时往往需要在管脚旁边先打过孔再在内层走线 往往用手动的方法一个一个过孔添加的方法是速度很慢 而且十分容易出错而且容易造成疲惫 所以软件已经现在有一个Fanou
  • ue4删除静态光照数据

    世界设置 lightmass下方光照贴图 勾选force no precomputed lighting后构建 可以清除之前的静态光照贴图
  • Qt5.9Creator中自定义信号SIGNAL和在另一个类中用该信号触发槽函数用法

    本文章主要总结在Qt5 9Creator中自定义一个信号 然后在另一个类里面用该信号触发槽函数的实例 具体的实例是在类ClassA中自定义一个信号Signal1 然后在MAinWindows类中用该信号Signal1来触发槽函数SlotFu
  • npm---.npmrc

    一 npm运行时配置文件 npmrc 作用 设置package json中的依赖包的安装来源 不设置可能会因为网络问题无法下载依赖 二 配置 npmrc 设置镜像 普通包来源 registry https registry npmmirro
  • STL学习(21):容器适配器

    容器适配器不是二级容器 它可以在一级容器的基础上再次封装 如 queue
  • 写给自己:SQLyog连接数据库出现错误1045的参考解决方法

    写给自己 SQLyog连接数据库出现错误1045的参考解决方法 在多次遇到错误1045并查找了若干篇博客后 总结出自己在解决这个问题时常见的步骤 和个人的一些习惯 总结下来方便查找 一般过程 检查my ini文件配置 在mysql安装位置找
  • tp3.2.3php环境要求,在linux环境下配置thinkphp3.2.3框架运行环境的一些疑惑杂谈

    在linux环境下配置thinkphp3 2 3框架运行环境 nginx1 4 6 php5 5 mysql5 5 36 的一些疑惑杂谈 首先是安装phpstudy phpStudy Linux版 Win版同步上线 支持Apache Ngi
  • SSM+ 基于Java的花艺商城系统设计与开发 毕业设计-附源码171536

    摘 要 本论文主要论述了如何使用JAVA语言开发一个花艺商城系统 本系统将严格按照软件开发流程进行各个阶段的工作 采用B S架构 面向对象编程思想进行项目开发 在引言中 作者将论述花艺商城系统的当前背景以及系统开发的目的 后续章节将严格按照
  • STM32单片机OLED贪吃蛇游戏记分计时

    实践制作DIY GC00165 OLED贪吃蛇游戏 一 功能说明 基于STM32单片机设计 OLED贪吃蛇游戏 二 功能说明 STM32F103C系列最小系统板 0 96寸OLED显示器 上 下 左 右4个按键 1 通过OLED配合按键实现
  • Verilog基础知识0(`define、parameter、localparam三者的区别及举例)

    1 概述 define 作用 gt 常用于定义常量可以跨模块 跨文件 范围 gt 整个工程 parameter 作用 gt 常用于模块间参数传递 范围 gt 本module内有效的定义 localparam 作用 gt 常用于状态机的参数定