目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2019-02-18 gingko 初次建立

实验五:逻辑门实验——基本运算符

一、 实验目的与意义

  1. 掌握Verilog HDL语言中基本运算符的使用方法
  2. 掌握QuartusII的使用方法

二、 实验设备及平台

  1. iCore4T 双核心板。
  2. iTool A(或相同功能)仿真器。
  3. USB Type C线缆。
  4. Keil MDK 开发平台。
  5. Quartus开发平台。
  6. 电脑一台。

三、 实验原理

1、算术运算符

操作符 执行的操作 操作数个数 表达式
+ 加法运算 2 rega + 10
- 减法运算 2 rega - 10
* 乘法运算 2 rega * 10
/ 除法运算 2 23 / 10,运行结果为2。
操作符 执行的操作
逻辑求反 1 !a
&& 逻辑与 2 a && b
|| 逻辑或 2 a || b

* 表5-3 逻辑运算真值表

a b !a !b a && b a || b
1 1 0 0 1 1
1 0 0 1 0 1
0 1 1 0 0 1
0 0 1 1 0 0

3、关系运算符

操作符 执行的操作 操作数个数 表达式
< 小于 2 a < b
> 大于 2 a > b
< = 小于等于 2 a ⇐ b
>= 大于等于 2 a >= b

4、条件运算符

con_expression ? true_expression : false_expression;
  wire data_out = sel_en ? a : b;

其运行结果为:若sel_en为真,data_out的值取a;否则,data_out的值取b。

5、按位运算符

操作符 执行的操作 操作数个数 表达式
~ 按位求反 1 ~a
& 按位与 2 a & b
| 按位或 2 a | b
^ 按位异或 2 a ^ b
~^,^~ 按位同或 2 a ~^ b,a ^~ b

6、拼接运算符

  {signal1,signal2}

7、移位运算符

操作符 执行的操作 操作数个数 表达式
» 右移 2 a » m,a为操作数,m为移的位数
« 左移 2 a « m,a为操作数,m为移的位数

8、等式运算符

操作符 执行的操作 操作数个数 表达式
== 等于 2 a == b
!= 不等于 2 a != b
=== 等于 2 a === b
!== 不等于 2 a !=== b

9、赋值运算符

操作符 执行的操作 操作数个数 表达式
= 连续赋值 不定 a = b
= 过程赋值 不定 a = b
过程赋值 不定 a ⇐ b

四、 代码讲解

1、算数运算符表达式

根据原理中描述的算数运算符使用规则,首先定义两个有初始值的变量,然后对两个变量进行“加、减、乘、除”运算,然后通过Signaltap工具观察运行结果是否与实际相符。其代码如下:

    reg [5:0]x1 = 6'd10;
    reg [5:0]y1 = 6'd25;
 
    assign a = x1 + y1;//加法运算符表达式,运行结果a=6'd35;
    assign b = y1 - x1;//减法运算符表法式,运行结果b=6'd15;
    assign c = 2 * x1;//乘法运算符,运行结果c=6'd20;
    assign d = y1 / 5;//除法运算符,运行结果d=6'd5;
                         //注意:若y1无法被除尽时,小数位直接省去,只保留整数位;

2、逻辑运算符表达式

其代码如下:

    reg x2 = 1'b1;
    reg y2 = 1'b0;
 
    assign e = !x2;//逻辑求反表达式,运行结果e=0;
    assign f = x2 && y2;//逻辑与表达式,运行结果f=0;
    assign g = x2 || y2;//逻辑或表达式,运行结果g=1;

3、关系运算符表达式

其代码如下:

    reg [3:0]x3 = 4'd3;
    reg [3:0]y3 = 4'd8;
    reg [3:0]z3 = 4'd8;
 
    assign h = (x3 < y3) ? (y3 - x3) : 4'd0;//小于号表达式,运行结果h=5;
    assign i = (x3 > y3) ? 4'd0 : (y3 + x3);//大于号表达式,运行结果i=11;
    assign j = (y3 <= z3) ? (y3 - x3) : 4'd0;//小于等于号表达式,运行结果i=5;
    assign k = (y3 >= z3) ? (y3 - x3) : 4'd0;//大于等于号表达式,运行结果i=5;

4、按位运算符表达式

其代码如下:

    reg [3:0]x4 = 4'b0101;
    reg [3:0]y4 = 4'b1001;
 
    assign l = ~x4;//按位求反表达式,运算结果l=4’b1010;
    assign m = x4 & y4;//按位与表达式,运算结果m=4'b0001;
    assign n = x4 | y4;//按位或表达式,运算结果n=4'b1101;
    assign o = x4 ^ y4;//按位异或表达式,运行结果0=4’b1100;
    assign p = x4 ~^ y4;//按位同或表达式,运行结果p=4'b0101;

5、拼接运算符

其代码如下:

reg [3:0]x5 = 4'b0101;
reg [3:0]y5 = 4'b1100;
 
assign q = {x5,y5};//拼接运算符表达式,运行结果q=8'b01011100;

6、移位运算符表达式

其代码如下:

reg [3:0]x6 = 4'b1001;
 
assign r = x6 << 3;//左移表达式,运行结果r=4'b1000;
assign s = x6 >>3;//右移表达式,运算结果s=4'b0001;

五、 实验步骤及实验结果

1、将硬件正确连接,如图5.1所示。

图5.1

2、将编写好的代码进行编译,并将要观察的所有输出信号添加到Sinaltap中; 3、通过Signaltap工具对所有运算结果进行采集,采集结果如图5.2所示。

图5.1 4、观察Signaltap采集到的运算结果与代码中注释的实验结果相同。

六、 拓展实验

  1. 更改实验代码中的变量的初始值,看看运算结果有何不同;
  2. 编写代码观察阻塞赋值与非阻塞赋值有何不同。