手把手教你学veriolg(七)--Verilog表达式

目录

 Verilog 表达式

1. 算术表达式

示例:算术表达式

2. 逻辑表达式

示例:逻辑表达式

3. 关系表达式

示例:关系表达式

4. 位操作表达式

示例:位操作表达式

5. 条件表达式

示例:条件表达式

6. 函数调用表达式

示例:函数调用表达式

总结


 Verilog 表达式

在 Verilog 中,表达式是由操作数和操作符组成的,用于计算结果的语句。正确理解和使用表达式对于编写有效的 Verilog 代码至关重要。本节将详细介绍 Verilog 中的各种表达式类型,包括算术表达式、逻辑表达式、关系表达式等。

1. 算术表达式

算术表达式涉及基本的数学运算,如加、减、乘、除等。

  • 加法 (+):两个操作数相加。
  • 减法 (-):两个操作数相减。
  • 乘法 (*):两个操作数相乘。
  • 除法 (/):两个操作数相除。
  • 取模 (%):计算除法后的余数。
示例:算术表达式
 

verilog

深色版本

module arithmetic_example;
    reg [3:0] a = 4'd10;
    reg [3:0] b = 4'd3;
    reg [7:0] result;

    initial begin
        result = a + b; // 加法
        $display("Addition: %d + %d = %d", a, b, result);

        result = a - b; // 减法
        $display("Subtraction: %d - %d = %d", a, b, result);

        result = a * b; // 乘法
        $display("Multiplication: %d * %d = %d", a, b, result);

        result = a / b; // 除法
        $display("Division: %d / %d = %d", a, b, result);

        result = a % b; // 取模
        $display("Modulo: %d %% %d = %d", a, b, result);
    end
endmodule
2. 逻辑表达式

逻辑表达式涉及逻辑运算符,用于进行逻辑判断。

  • 按位与 (&):对应位都为 1 时,结果为 1;否则为 0
  • 按位或 (|):对应位至少有一个为 1 时,结果为 1;否则为 0
  • 按位异或 (^):对应位不同则为 1;相同则为 0
  • 按位非 (~):对每一个位取反。
  • 逻辑与 (&&):两个表达式都为真时,结果为真。
  • 逻辑或 (||):两个表达式中任意一个为真时,结果为真。
  • 逻辑非 (!):取反。
示例:逻辑表达式
 

verilog

深色版本

module logic_example;
    reg [3:0] a = 4'b1010;
    reg [3:0] b = 4'b1100;
    reg [3:0] result;

    initial begin
        result = a & b; // 按位与
        $display("Bitwise AND: %b & %b = %b", a, b, result);

        result = a | b; // 按位或
        $display("Bitwise OR: %b | %b = %b", a, b, result);

        result = a ^ b; // 按位异或
        $display("Bitwise XOR: %b ^ %b = %b", a, b, result);

        result = ~a; // 按位非
        $display("Bitwise NOT: ~%b = %b", a, result);

        if (a && b) begin // 逻辑与
            $display("Logical AND: %b && %b = True", a, b);
        end else begin
            $display("Logical AND: %b && %b = False", a, b);
        end

        if (a || b) begin // 逻辑或
            $display("Logical OR: %b || %b = True", a, b);
        end else begin
            $display("Logical OR: %b || %b = False", a, b);
        end

        if (!a) begin // 逻辑非
            $display("Logical NOT: !%b = True", a);
        end else begin
            $display("Logical NOT: !%b = False", a);
        end
    end
endmodule
3. 关系表达式

关系表达式用于比较两个操作数的关系,结果是一个布尔值(TrueFalse)。

  • 等于 (==):两个操作数相等时为真。
  • 不等于 (!=):两个操作数不相等时为真。
  • 全等于 (===):两个操作数相等且类型相同。
  • 全不等于 (!==):两个操作数不相等或类型不同。
  • 小于 (<):第一个操作数小于第二个操作数。
  • 小于等于 (<=):第一个操作数小于或等于第二个操作数。
  • 大于 (>):第一个操作数大于第二个操作数。
  • 大于等于 (>=):第一个操作数大于或等于第二个操作数。
示例:关系表达式
 

verilog

深色版本

module relational_example;
    reg [3:0] a = 4'd10;
    reg [3:0] b = 4'd10;
    reg [3:0] c = 4'd11;

    initial begin
        if (a == b) begin
            $display("Equal: %d == %d = True", a, b);
        end else begin
            $display("Equal: %d == %d = False", a, b);
        end

        if (a != c) begin
            $display("Not Equal: %d != %d = True", a, c);
        end else begin
            $display("Not Equal: %d != %d = False", a, c);
        end

        if (a === b) begin
            $display("Identical: %d === %d = True", a, b);
        end else begin
            $display("Identical: %d === %d = False", a, b);
        end

        if (a !== c) begin
            $display("Not Identical: %d !== %d = True", a, c);
        end else begin
            $display("Not Identical: %d !== %d = False", a, c);
        end

        if (a < c) begin
            $display("Less Than: %d < %d = True", a, c);
        end else begin
            $display("Less Than: %d < %d = False", a, c);
        end

        if (a <= b) begin
            $display("Less Than Or Equal: %d <= %d = True", a, b);
        end else begin
            $display("Less Than Or Equal: %d <= %d = False", a, b);
        end

        if (a > c) begin
            $display("Greater Than: %d > %d = True", a, c);
        end else begin
            $display("Greater Than: %d > %d = False", a, c);
        end

        if (a >= b) begin
            $display("Greater Than Or Equal: %d >= %d = True", a, b);
        end else begin
            $display("Greater Than Or Equal: %d >= %d = False", a, b);
        end
    end
endmodule
4. 位操作表达式

位操作表达式用于对位进行操作,包括位移操作。

  • 左移 (<<):将操作数的每一位向左移动指定的位数。
  • 右移 (>>):将操作数的每一位向右移动指定的位数。
  • 无符号右移 (>>>):将操作数的每一位向右移动指定的位数,填充高位为零。
  • 有符号右移 (<<<):将操作数的每一位向右移动指定的位数,填充高位为原最高位的值。
示例:位操作表达式
 

verilog

深色版本

module shift_example;
    reg [3:0] a = 4'b1010;
    reg [3:0] result;

    initial begin
        result = a << 1; // 左移一位
        $display("Left Shift: %b << 1 = %b", a, result);

        result = a >> 1; // 右移一位
        $display("Right Shift: %b >> 1 = %b", a, result);

        result = a >>> 1; // 无符号右移一位
        $display("Unsigned Right Shift: %b >>> 1 = %b", a, result);

        result = a <<< 1; // 有符号右移一位
        $display("Signed Right Shift: %b <<< 1 = %b", a, result);
    end
endmodule
5. 条件表达式

条件表达式是一种三元运算符,其形式为 expression ? true_expression : false_expression,如果 expression 为真,则结果为 true_expression;否则为 false_expression

示例:条件表达式
 

verilog

深色版本

module conditional_example;
    reg [3:0] a = 4'd10;
    reg [3:0] b = 4'd11;
    reg [3:0] result;

    initial begin
        result = (a > b) ? a : b; // 如果 a 大于 b,则取 a 的值;否则取 b 的值
        $display("Conditional Expression: %d > %d ? %d : %d = %d", a, b, a, b, result);
    end
endmodule
6. 函数调用表达式

函数调用表达式用于调用预先定义的函数,并返回函数的结果。

示例:函数调用表达式
 

verilog

深色版本

function [3:0] increment;
    input [3:0] x;
    increment = x + 1;
endfunction

module function_call_example;
    reg [3:0] a = 4'd10;
    reg [3:0] result;

    initial begin
        result = increment(a); // 调用 increment 函数
        $display("Function Call: increment(%d) = %d", a, result);
    end
endmodule

总结

通过以上示例,你已经了解了 Verilog 中的基本表达式类型及其使用方法。正确地使用这些表达式可以帮助你更准确地描述硬件的行为和特性。在实际的 Verilog 设计中,你可能会遇到更复杂的表达式组合,但掌握了这些基本表达式之后,你就能更好地应对各种情况。继续深入学习 Verilog 的其他特性和高级功能,将有助于你更好地掌握这门语言,并应用于实际的硬件设计中。希望本节的内容对你有所帮助,并激发你对 Verilog 更深入的兴趣!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值