Verilog 函数可以访问功能块外部声明的变量吗?

问题描述 投票:0回答:1

有一个包含巨大数据数组的reg变量。该变量在模块内声明并初始化。

我在 Verilog 模块内创建了一个函数来访问此外部数据。令人惊讶的是,我能够毫无困难地做到这一点。

那么,当函数只能访问外部变量时,我是否应该将值作为输入传递给函数?

这是一个代码示例来说明我的意思

module TestModule (
input clock,
output Out
);

    // Variable declared outside the function
    reg [7:0] externalVariable [10:0];

    // Function declaration
    function [7:0] myFunction;
        input arg;
    begin
        myFunction = externalVariable[arg];
    end
    endfunction

    always @(posedge clock) begin
        // Assign a value to the external variable
        Out <= myFunction(1);
    end

endmodule

我模拟了上面的例子,它有效。但为什么呢?

function variables module scope verilog
1个回答
0
投票

模块创建一个范围,变量

externalVariable
在TestModule范围内。
因此,“TestModule”可用于在同一范围内创建的 Verilog 结构。

您的函数不返回任何内容,它只是对模块变量进行操作。当您的代码所在时,我认为没有任何理由增加复杂性。如果您在多个地方使用此函数,我认为可能很难判断发生了什么,在这种情况下,我会添加一个输入参数、一个返回值并将函数存储声明为

automatic

声明

automatic
函数使其可重入,导致每次调用时动态分配存储空间,而不是在任务的不同调用之间共享变量。

声明函数自动看起来像这样

function automatic [7:0] myFunction;

请参阅 IEEE 1800 第 13.4 节“函数”了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.