基本数字电路的Verilog写法

一、基本运算符

1.1、逻辑运算符与按位运算符

区别:

  • 按位运算符是逐位进行逻辑运算,输出位数与输入位数一致
  • 逻辑运算符进行逻辑运算,不关注输入的某一位而是将输入作为整体进行逻辑操作,输出位数为1,非0即1;

列举:

  • :& 按位与;&& 逻辑与;
  • :|  按位或; ||    逻辑或;
  • :~ 按位非; !  逻辑非;

1.2、缩位运算符

灵活使用缩位运算符,可以简化代码;

如:

  • &a 可实现a各位间的与运算,即&a等价与a(0)&a(1)&...&a(n)
  • | a 可实现a各位间的或运算,即|a等价与a(0)|a(1)|...|a(n)

1.3、位拼接运算符

拼接功能:将reg/wire型变量首位连接,形成一个更大位宽的变量;
如:
a = 2'b10;
b = 3'b010;
{a,b}=5'b10010;

迭代功能:把一个变量复制多次,组成一个更大位宽的变量;(实际仍为拼接功能的一个特例:拼接元素相同)

如:a = 2'b10;
有{4{a}},即{a,a,a,a}

注意:

  • 要保证迭代的完整性:{ {4{a}},b}({4{a}}为迭代功能,括号不能少;即不能写为{ 4{a},b} )
  • 位拼接运算符还可以用于常量操作:{ {4{1'b1}},2'b10}

1.4、逻辑移位运算符与算数移位运算符

列举
<< 逻辑左移运算符;<<< 数字左移运算符;
>> 逻辑右移运算符;>>> 数字右移运算符;

区别:逻辑移位运算符不关心符号位;逻辑左移右端补零,逻辑右移左端补零;
数字左移位运算符不关心符号位,与逻辑左移一样;数字右移运算符关心符号位,左端补符号位;

如:

1010101010,其中[]是添加的位

逻辑左移一位:010101010[0]

算数左移一位:010101010[0]

逻辑右移一位:[0]101010101

算数右移一位:[1]101010101


//======================================================================
// --- 名称 : 基本运算符
// --- 作者 : 又菜又爱玩
// --- 日期 : 2023-10-25
// --- 描述 : 一些常用基本运算符,包括:算数运算符、关系运算符、逻辑运算符、逻辑等式运算符、三目条件运算符、位运算符、移位运算符、位拼接运算符
//======================================================================

module Example_Operation
(
    input  [3:0]         a       ,
    input  [3:0]         b       ,
    input  [3:0]         c       ,

    output [3:0]        c1      ,
    output [3:0]        c2      ,
    output [5:0]        c3      ,
    output [3:0]        c4      ,
    output [3:0]        c5      ,
    output [3:0]        d1      ,
    output [3:0]        d2      ,
    output [3:0]        d3      ,
    output [3:0]        d4      ,
    output [3:0]        e1      ,
    output [3:0]        e2      ,
    output [3:0]        e3      ,
    output [3:0]        f1      ,
    output [3:0]        f2      ,
    output [3:0]        d11     ,
    output [3:0]        c11     ,
    output [3:0]        c22     ,
    output [3:0]        c33     ,
    output [3:0]        c44     ,
    output [3:0]        c55     ,
    output [3:0]        c66     ,
    output [3:0]        e11     ,
    output [3:0]        e22     ,
    output [7:0]        f11     ,
    output [7:0]        f22
);

//== waveform1 算数运算符
//======================================================================
assign c1 = a + b;      //加
assign c2 = a - b;      //减
assign c3 = a * b;      //乘
assign c4 = a / b;      //除
assign c5 = a % b;      //求余

//== waveform2 关系运算符
//======================================================================
assign d1 = a >  b;     //大于
assign d2 = a <  b;     //小于
assign d3 = a >= b;     //大于等于
assign d4 = a <= b;     //小于等于

//== waveform3 逻辑运算符
//======================================================================
assign e1 = !a;         //非
assign e2 = a && b;     //与
assign e3 = a || b;     //或

//== waveform4 逻辑等式运算符
//======================================================================
assign f1 = a == b;     //判断相等
assign f2 = a != b;     //判断不等

//== waveform5 三目条件运算符
//======================================================================
assign d11 = a ? b : c; //a为真,则d11 = b
                        //a为假,则d11 = c

//== waveform6 位运算符
//=============================&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值