Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
在Verilog上实现加法、求逆和或门的4对1多路复用器_Verilog - Fatal编程技术网

在Verilog上实现加法、求逆和或门的4对1多路复用器

在Verilog上实现加法、求逆和或门的4对1多路复用器,verilog,Verilog,这学期我刚开始学习Verilog,我刚刚被一项任务困住了,那就是创建一个Verilog模块,它使用多路复用对2个8位输入执行不同的操作。下面是我写的Verilog代码,我收到了几个我不理解的错误。请帮忙 module eightbit_palu( input[7:0] a, input[7:0] b, input[1:0] sel, output[7:0] f, output ovf ); reg f, ovf; always @ (a , b, sel) case (s

这学期我刚开始学习Verilog,我刚刚被一项任务困住了,那就是创建一个Verilog模块,它使用多路复用对2个8位输入执行不同的操作。下面是我写的Verilog代码,我收到了几个我不理解的错误。请帮忙

module eightbit_palu( input[7:0] a, input[7:0] b, input[1:0] sel, output[7:0] f, output ovf ); 

reg f, ovf; 
    always @ (a , b, sel)

    case (sel)
        0 : f = a + b;
            ovf = f[8]^f[7]; 

        1 : f[0] = ~b[0]; 
            f[1] = ~b[1]; 
            f[2] = ~b[2]; 
            f[3] = ~b[3]; 
            f[4] = ~b[4]; 
            f[5] = ~b[5]; 
            f[6] = ~b[6]; 
            f[7] = ~b[7];

        2 : f[0] = a[0]&b[0]; f[1] = a[1]&b[1]; f[2] = a[2]&b[2]; f[3] = a[3]&b[3]; f[4] = a[4]&b[4]; 
             f[5] = a[5]&b[5]; f[6] = a[6]&b[6]; f[7] = a[7]&b[7]; 

        3 : f[0] = a[0]|b[0]; f[1] = a[1]|b[1]; f[2] = a[2]|b[2]; f[3] = a[3]|b[3]; f[4] = a[4]|b[4]; 
             f[5] = a[5]|b[5]; f[6] = a[6]|b[6]; f[7] = a[7]|b[7];
    endcase

endmodule
模拟器显示的错误有:

8:语法错误
10:错误:无法理解的大小写表达式。
11:语法错误
19:错误:无法理解的大小写表达式。
19:语法错误
22:错误:无法理解的大小写表达式。
22:语法错误

两个主要问题:

首先,对于Verilog,一系列过程语句必须由
begin
-
end
关键字包围

always @ (*) begin
    case (sel)
        0 : begin
              f = a + b;
              ovf = f[8]^f[7]; 
            end

        1 : begin
            f[0] = ~b[0];
            ...
            end

        ...
    endcase
end
其次,您混合了ANSI和非ANSI样式的头文件,在端口列表中将
f
ovf
声明为连接,然后在端口列表中声明为单位reg。选择一种语法:

  • ANSI:(注意
    输出寄存器

  • 非ANSI标准:

    module eightbit_palu( a, b, sel, f, ovf );
      input[7:0] a;
      input[7:0] b;
      input[1:0] sel;
      output [7:0] f;
      output ovf;
      reg [7:0] f;
      reg ovf; 
    

建议的改进:

  • 始终@(a、b、sel)
    始终@*

    • 自2001年以来,Verilog支持组合逻辑块的通配符敏感度列表。这有助于防止代理RTL与合成门的行为不匹配,并且是Verilog中首选的编码样式。仅当严格遵循1995年版标准时,才需要手动定义灵敏度
  • 您可以将条件1、2和3简化为按位操作:(例如,
    1:f=~b;
    2:f=a&b;
    3:f=a | b;
    )。For循环是另一个选项

  • ovf
    是一个推断锁存器。闩锁不一定是坏的,但是你需要知道你在用它们做什么。建议您仅在必要时使用

两个主要问题:

首先,对于Verilog,一系列过程语句必须由
begin
-
end
关键字包围

always @ (*) begin
    case (sel)
        0 : begin
              f = a + b;
              ovf = f[8]^f[7]; 
            end

        1 : begin
            f[0] = ~b[0];
            ...
            end

        ...
    endcase
end
其次,您混合了ANSI和非ANSI样式的头文件,在端口列表中将
f
ovf
声明为连接,然后在端口列表中声明为单位reg。选择一种语法:

  • ANSI:(注意
    输出寄存器

  • 非ANSI标准:

    module eightbit_palu( a, b, sel, f, ovf );
      input[7:0] a;
      input[7:0] b;
      input[1:0] sel;
      output [7:0] f;
      output ovf;
      reg [7:0] f;
      reg ovf; 
    

建议的改进:

  • 始终@(a、b、sel)
    始终@*

    • 自2001年以来,Verilog支持组合逻辑块的通配符敏感度列表。这有助于防止代理RTL与合成门的行为不匹配,并且是Verilog中首选的编码样式。仅当严格遵循1995年版标准时,才需要手动定义灵敏度
  • 您可以将条件1、2和3简化为按位操作:(例如,
    1:f=~b;
    2:f=a&b;
    3:f=a | b;
    )。For循环是另一个选项

  • ovf
    是一个推断锁存器。闩锁不一定是坏的,但是你需要知道你在用它们做什么。建议您仅在必要时使用


请同时提供错误。终端输出8:语法错误10:错误:不可理解的大小写表达式。11:语法错误19:错误:不可理解的大小写表达式。19:语法错误22:错误:不可理解的大小写表达式。22:语法错误请编辑您的问题,将其包括在内。我不知道Verilog,但您收到的错误消息相当清楚。语法错误意味着代码编写不正确,请查看您正在执行的操作,看看是否可以发现差异。不可理解的case表达式意味着Verilog期望您的代码也是不正确的。我打赌删除冒号之前的空格,
1:
变为
1:
。我已经尝试过了,当我将“1:”更改为“1:”时,似乎没有任何区别@无齿标签请同时提供错误。终端输出8:语法错误10:错误:不可理解的大小写表达式。11:语法错误19:错误:不可理解的大小写表达式。19:语法错误22:错误:不可理解的大小写表达式。22:语法错误请编辑您的问题,将其包括在内。我不知道Verilog,但您收到的错误消息相当清楚。语法错误意味着代码编写不正确,请查看您正在执行的操作,看看是否可以发现差异。不可理解的case表达式意味着Verilog期望您的代码也是不正确的。我打赌删除冒号之前的空格,
1:
变为
1:
。我已经尝试过了,当我将“1:”更改为“1:”时,似乎没有任何区别@无牙舌