Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog SystemVerilog中的赋值,编译错误-标记为';分配';_System Verilog - Fatal编程技术网

System verilog SystemVerilog中的赋值,编译错误-标记为';分配';

System verilog SystemVerilog中的赋值,编译错误-标记为';分配';,system-verilog,System Verilog,我有以下代码: integer [31:0]R; integer [15:0]R_f1; integer [15:0]R_f2; assign R_f1 = R[15:0]; assign R_f2 = R[31:16]; 但由于assign的原因,它没有被编译。 我需要做哪些更改?它也可以在头文件中。Verilog XL的原始实现中存在一个错误,它忽略了整数声明的压缩维度。而integer/int/byte没有固定的大小。出于这些原因,SystemVerilog不允许为任何这些内置类型指定

我有以下代码:

integer [31:0]R;
integer [15:0]R_f1;
integer [15:0]R_f2;

assign R_f1 = R[15:0];
assign R_f2 = R[31:16];
但由于
assign
的原因,它没有被编译。
我需要做哪些更改?它也可以在头文件中。

Verilog XL的原始实现中存在一个错误,它忽略了
整数
声明的压缩维度。而
integer/int/byte
没有固定的大小。出于这些原因,SystemVerilog不允许为任何这些内置类型指定压缩维度。使用
逻辑

此外,由于您使用SystemVerilog标记了该文件,请确保该文件具有*.sv后缀。你尝试做的另一个选择是

integer [31:0]R;

let R_f1 = R[15:0];
let R_f2 = R[31:16];
  • 取决于您使用的语言。在verilog中,只能使用连续分配来分配网络类型<代码>整数不是网络类型,因此verilog中不允许这些赋值。我猜您是在
    verilog
    模式下编译代码的,并且得到了关于赋值语句的消息
  • 此外,不允许在
    整数
    类型上使用压缩维度。因此,以下声明是非法的:
    integer[31:0]R。有些编译器只会忽略声明。所有整数在任何情况下都是32位宽的
    因此,要在
    verilog
    模式下修复它,您可以使用
    always@*

    integer R = 10;  
    integer R_f1;
    integer R_f2;
    
    always @* R_f1 = R[15:0];
    always @* R_f2 = R[31:16];
    
    虽然根据您最初的问题,您需要使用不同类型的数据类型,这允许您使用实向量。在
    verilog
    中,它们是
    reg
    和网络类型之一,即
    wire
    。使用
    wires
    可以使用
    assign
    语句,而使用
    reg
    则需要使用always块。如下所示:

    reg[31:0] R = 10;   
    reg[15:0] R_f1;
    reg[15:0] R_f2;
    
    always @* R_f1 = R[15:0];
    always @* R_f2 = R[31:16];
    
    由于您将问题标记为系统verilog问题,因此可以使用系统verilog类型之一,即
    逻辑
    。如果您使用这些,您可以同时应用,
    分配
    始终
    块。顺便说一句,
    assign
    也适用于整数

    logic[31:0] R = 10;   
    logic[15:0] R_f1;
    logic[15:0] R_f2;
    
    assign R_f1 = R[15:0];
    assign R_f2 = R[31:16];
    

    只要确保在系统verilog模式下编译即可。

    它可以工作。你能解释一下转让和出租的区别吗@dave;我不明白为什么不能使用integer?如果我将整数改为逻辑或位,那么它仍然不起作用@dave_59
    let
    是表达式的符号替换;没有分配,没有创建额外的信号。它像一个更正式的文本宏,因为它有一个范围,替换必须是一个正确的表达式,文本宏是全局的,几乎可以是任何任意文本。您需要显示一个更完整的示例,其中包含确切的错误消息。如果您更改为
    逻辑
    ,但它仍然抱怨
    assign
    语句,那么您没有显示的其他内容可能是错误的。它不起作用。我与vcs filename.sv一起使用-sverilog@Serge@Alex您使用了哪种工具进行编译?它是怎么不起作用的?又是怎么失败的?