【问题标题】:Embedding perl in verilog在verilog中嵌入perl
【发布时间】:2015-12-02 21:49:19
【问题描述】:

寻找一种使用 perl 和 verilog autos 自动生成重复性 verilog 代码的方法,而不使用 generate 语句。

具体来说,我想这样做:

当我在 emacs 中调用 verilog AUTOs 时,应生成 AUTOMATE_THIS 注释部分中的所有内容。当然,我可以编写一个 perl 脚本并在我的 emacs 会话之外运行它,重新加载缓冲区,然后进行 verilog AUTO 扩展,但我想只做一次。

module foo (/*AUTOARG*/);

    parameter NUM=7; // Number of ops

    input clk;

    /*AUTOMATE_THIS
    $num=$PARAMS{NUM};
    for ($i=0;$i<$num;$i=$i+1) {
    FILE<<print

    }
    FILE    
    */
endmodule

【问题讨论】:

    标签: perl emacs verilog system-verilog


    【解决方案1】:

    当我在 emacs 中调用 verilog AUTOs 时,应该生成 AUTOMATE_THIS 注释部分中的所有内容。

    你可以用 emacs lisp 做到这一点:

    (defun AUTO()
      (interactive)
      (insert (format "    /*AUTOMATE_THIS
        $num=$PARAMS{NUM};
        for ($i=0;$i<$num;$i=$i+1) {
        FILE<<print
    
        }
        FILE    
        */")))
    

    将光标指向最后一个括号之前,然后用

    计算这个函数
    C-x C-e
    

    要使用这个功能,

    M-x AUTO
    

    AUTOMATE_THIS 评论部分将被生成,并且可以单次完成。

    【讨论】:

      【解决方案2】:

      没有预处理器能够处理foo 的不同实例,这些实例用不同的值覆盖NUM。为此,您必须使用generate 语句。

      但是,如果您只是在寻找可以使用循环定义宏的预处理器,这里有一些建议。

      其中大部分都相当老了,因为大多数人已经意识到generate 可以满足他们的需求。 SystemVerilog 也有许多新的结构,使这些变得不那么必要了。

      【讨论】:

        【解决方案3】:

        好吧,如果您可以使用 generate 语句做一些事情,请使用它们。如果你不能(比如说,如果你想要一个可参数化的端口数量),那么你可能必须编写一个脚本来从模板生成 verilog。每当您需要进行更改时,您都必须手动运行脚本。

        这是一个你可以用 Python 做的例子,我相信你可以用你喜欢的任何语言做类似的事情:https://github.com/alexforencich/verilog-axis/blob/553547f661f54153e618ebf8297f6e4f92253e6e/rtl/axis_mux.py

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-02
          • 1970-01-01
          • 1970-01-01
          • 2018-03-23
          • 2021-04-06
          • 2011-01-04
          • 2013-08-06
          相关资源
          最近更新 更多