Parameters 如何根据开关的值有条件地将参数传递给模块?(verilog)

Parameters 如何根据开关的值有条件地将参数传递给模块?(verilog),parameters,conditional,verilog,fpga,Parameters,Conditional,Verilog,Fpga,有人知道有条件地将参数传递给verilog模块的正确方法吗?例如,我正在执行uart分配,uart本身每字可以处理7或8个数据位。我基本上需要一种方法来传递7或8到uart模块,如果开关是高或低。我尝试了一个总是案例的陈述,但总是出错 我知道如何通过名称传递参数,例如: module top #(parameter DATABITS = 7, parameter DATABITS2 = 8) (input [1:0] sw); //对不起,我没有列出全部代码,只是为了让大家明白我的意思 ...

有人知道有条件地将参数传递给verilog模块的正确方法吗?例如,我正在执行uart分配,uart本身每字可以处理7或8个数据位。我基本上需要一种方法来传递7或8到uart模块,如果开关是高或低。我尝试了一个总是案例的陈述,但总是出错

我知道如何通过名称传递参数,例如:

module top
#(parameter DATABITS = 7,
parameter DATABITS2 = 8)
(input [1:0] sw);
//对不起,我没有列出全部代码,只是为了让大家明白我的意思

...... rest of code here....... 
//我一直在尝试一个案例陈述。 localparam dbit=0

always @(*)
begin 
        case(sw) 
            2'b00: begin
                dbit = DBIT1;
                end
            2'b01: begin
                dbit = DBIT2;
                end
        endcase
end // always @ (...)


UART #(.DATABITS(dbit)) UART_MODULE (.......ports etc in here); 

您可以使用模块参数创建可以在实例化该模块时自定义的模块。但是,一旦详细说明了网络列表,UART_模块的配置将根据作为参数传入的值进行固定


在运行时期间无法“重新参数化”模块。如果您确实想动态修改数据宽度,则必须向模块的端口列表添加7/8位标志,并向模块本身添加代码,以处理该标志指示的可变数据宽度

在精化结束时,应将所有参数的值评估为恒定值。不能在运行时更改参数的值。另一种方法是,参数控制代码创建的逻辑。一旦硬件运行,您就无法更改它!