0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用verilog参数和generate语句来编写可重用的verilog代码?

Hack电子 来源:Hack电子 2023-05-08 16:59 次阅读

与大多数编程语言一样,我们应该尝试使尽可能多的代码可重用。这使我们能够减少未来项目的开发时间,因为我们可以更轻松地将代码从一个设计移植到另一个设计。 我们在verilog中有两个可用的结构,可以帮助我们编写可重用的代码 - 参数化和generate语句。这两种结构都允许我们创建更通用的代码,当我们实例化组件时,我们可以轻松修改这些代码以满足我们的需求。

Verilog参数化

在verilog中,参数是常量的局部形式,可以在我们实例化模块时为其赋值。由于参数的范围有限,我们可以多次调用同一个verilog模块,并为参数分配不同的值。这使我们能够动态配置模块的行为。

下面的verilog代码片段显示了在模块中声明参数的方法。当我们在这样的verilog模块中声明一个参数时,我们称之为参数化模块。

1 module #(
2 parameter =
3 )
4 (
5 // Port declarations
6 );

上面verilog代码中的 <parameter_name> 字段用于为我们的参数提供标识符。我们使用此标识符在代码中调用参数值,就像使用普通变量一样。我们还可以使用上面示例中的 字段为参数分配默认值。这很有用,因为它允许我们实例化组件,而无需专门为参数赋值。

当我们 verilog设计单元中实例化模块时,我们可以使用命名关联或位置关联为参数分配一个值。这与将信号分配给模块上的输入或输出完全相同。但是,当我们编写使用 verilog 1995 标准的代码时,我们只能使用位置关联为参数赋值。

下面的 verilog 代码片段显示了我们在实例化模块时用于为参数赋值的方法。

1 // Example of named association
2 # (
3 // If the module uses parameters they are connected here
4 . ()
5 )
6 (
7 // port connections
8 );
9
10 // Example of positional association
11 # ()
12 (
13 // port connections
14 );

Verilog 参数化模块示例

为了更好地理解我们如何在verilog中使用参数,让我们考虑一个基本的例子。对于此示例,让我们考虑一个需要两个同步计数器的设计。其中一个计数器宽 8 位,另一个宽 12 位。 为了实现这个电路,我们可以编写两个具有不同宽度的不同计数器模块。

然而,这是一种对电路进行编码的低效方法。相反,我们将编写单个计数器电路并使用参数来更改输出中的位数。 由于理解我们如何使用参数化模块并不重要,因此我们将排除此示例中的功能代码。相反,我们将只研究如何在 verilog中声明和实例参数化模块。

下面的 verilog 代码片段显示了我们如何为参数化计数器模块编写接口

1 modulecounter #(
2 parameterBITS =8;
3 )
4 (
5 inputwireclock,
6 inputwirereset,
7 outputreg[BITS-1:0] count
8 );

在这个例子中,我们看到了如何使用参数来调整verilog中信号的大小。我们不是使用固定数字来声明端口宽度,而是将参数值替换为端口声明。这是 verilog 中参数最常见的用例之一。 在上面的 verilog 代码中,我们将 BITS 参数的默认值定义为 8。因此,当我们想要一个不是 8 位的输出时,我们只需要为参数分配一个值。 下面的代码片段显示了当我们想要 12 位输出时如何实例化这个模块。在这种情况下,我们必须在实例化 verilog 模块时覆盖参数的默认值。

1 counter # (
2 .BITS (12)
3 ) count_12 (
4 .clock (clock),
5 .reset (reset),
6 .count (count_out)
7 );

虽然我们在上面的示例中使用命名关联,但我们也可以使用位置关联为 verilog 中的参数赋值。

下面的代码片段显示了我们将如何使用位置关联将值 12 分配给 BITS 参数。

1 counter # (12) count_12 (clock, reset, count_out);





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109312
  • 计数器
    +关注

    关注

    32

    文章

    2126

    浏览量

    93009
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33157
  • BITS
    +关注

    关注

    0

    文章

    4

    浏览量

    8050

原文标题:使用参数化编写可重用的Verilog代码

文章出处:【微信号:Hack电子,微信公众号:Hack电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Veriloggenerate if 语句如何用systemc实现?

    Veriloggenerate if语句如何用systemc实现?例如:generateif (SIZE < 8)assign y = a & b & c;else
    发表于 08-28 12:06

    Veriloggenerate if语句如何用systemc实现?

    1.Veriloggenerate if语句如何用systemc实现?例如:generateif (SIZE < 8)assign y = a & b & c;else
    发表于 08-29 16:11

    新手求解verilog 中的生成块语句 的意思

    verilog 中的 generate for 语句好理解,但是 generate if 和 generate case
    发表于 12-21 12:44

    如何编写代码Verilog

    大家好,我是新手使用Xilinx板。最近我被分配了一个任务编程VIRTEX II PRO 1152板。你能给我一个广泛的想法,从我可以学习使用它开始一些好的来源。我必须编写代码Verilog
    发表于 06-02 09:40

    veriloggenerate语句的用法分享

    generateverilog中的生成语句,当对矢量中的多个位进行重复操作时,或者当进行多个模块的实例引用的重复操作时,或者根据参数的定义
    发表于 12-23 16:59

    Verilog代码书写规范

    Verilog代码书写规范 本规范的目的是提高书写代码的可读性、可修改性、可重用性,优化代码综合和仿真的结果,指导设计工程师使用
    发表于 04-15 09:47 106次下载

    Verilog generate语句的类型

    Generate 结构在创建可配置的RTL的时候很有用。Generate loop能够让语句实例化多次,通过index来控制。而conditional generate能够选择
    的头像 发表于 03-16 14:34 2.1w次阅读
    <b class='flag-5'>Verilog</b> <b class='flag-5'>generate</b><b class='flag-5'>语句</b>的类型

    Verilog教程之Verilog HDL程序设计语句和描述方式

    本文档的主要内容详细介绍的是Verilog教程之Verilog HDL程序设计语句和描述方式。
    发表于 12-09 11:24 46次下载
    <b class='flag-5'>Verilog</b>教程之<b class='flag-5'>Verilog</b> HDL程序设计<b class='flag-5'>语句</b>和描述方式

    verilog中的initial语句说明

    解释verilog HDL中的initial语句的用法。
    发表于 05-31 09:11 0次下载

    Verilog语法之generate for、generate if、generate case

    Verilog-2005中有3个generate 语句可以用来很方便地实现重复赋值和例化(generate for)或根据条件选择性地进行编译(ge
    的头像 发表于 12-28 15:21 1966次阅读

    如何在verilog中使用If语句和case语句

    我们在上一篇文章中已经看到了如何使用程序块(例如 always 块来编写按顺序执行的 verilog 代码
    的头像 发表于 04-18 09:45 2805次阅读

    Verilog中的If语句和case语句介绍

    我们在上一篇文章中已经看到了如何使用程序块(例如 always 块来编写按顺序执行的 verilog 代码。 我们还可以在程序块中使用许多语句来控制在我们的
    的头像 发表于 05-11 15:37 3143次阅读
    <b class='flag-5'>Verilog</b>中的If<b class='flag-5'>语句</b>和case<b class='flag-5'>语句</b>介绍

    如何使用参数编写重用verilog代码

    我们将介绍如何使用verilog参数generate语句编写重用
    的头像 发表于 05-11 15:59 716次阅读

    Verilog常用的循环语句及用途

    本文主要介绍verilog常用的循环语句,循环语句的用途,主要是可以多次执行相同的代码或逻辑。
    的头像 发表于 05-12 18:26 1252次阅读

    FPGA的Verilog代码编写规范

      注:以R起头的是对编写Verilog代码的IP设计者所做的强制性规定,以G起头的条款是建议采用的规范。每个设计者遵守本规范可锻炼命名规范性。
    的头像 发表于 08-15 16:23 1227次阅读