Verilog中的元编程

Verilog中的元编程,verilog,Verilog,我想生成一些组合逻辑,我想为此使用递归函数(当然,带有预定义的预处理器参数) 简单示例:阶乘函数 我有一个reg[10:0]号码我希望有计算它的阶乘的逻辑,但我希望某个预定义变量msb确定msb,并将数字[msb:0]作为起始数字,然后继续 模块将接收数字并调用fact_func(number),该函数将计算阶乘,但只计算缩短的阶乘 在Verilog中有这样的功能吗?函数是否生成逻辑?我不完全确定您的要求,但在Verilog中,使用递归函数调用构建逻辑是非常可能的。您需要构建一个参数化模块,其中

我想生成一些组合逻辑,我想为此使用递归函数(当然,带有预定义的预处理器参数)

简单示例:阶乘函数

我有一个reg[10:0]号码我希望有计算它的阶乘的逻辑,但我希望某个预定义变量msb确定msb,并将数字[msb:0]作为起始数字,然后继续

模块将接收数字并调用fact_func(number),该函数将计算阶乘,但只计算缩短的阶乘


在Verilog中有这样的功能吗?函数是否生成逻辑?

我不完全确定您的要求,但在Verilog中,使用递归函数调用构建逻辑是非常可能的。您需要构建一个参数化模块,其中包括一个生成块,该块使用一个逐渐变小(或变大)的参数值来实例化自身,直到达到基本情况为止

这是一个实际的例子。您可以很容易地修改它以生成斐波那契序列


但是,请记住,以这种方式生成的块可以合成非常非常大的块。您需要确保所使用的工具能够成功地将其优化到合理的大小。

“何处”而不是“什么?”?什么是“缩短的一个”?“insead of”是我忘了删除的东西。“缩短的一个”是使用预定义的msb而不是10(不总是“缩短”),虽然递归模块似乎是一个解决方案,但我不能在表达式中使用我的genvars,例如genvari,j;i=j+3;仅在for循环中。如果我错了,请纠正我。然后我将研究超文本预处理器。