目录

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

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

一、 实验目的与意义

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

二、 实验设备及平台

  1. iCore4 双核心板点击购买
  2. Blaster(或相同功能)仿真器点击购买
  3. Micro USB线缆。
  4. Quartus开发平台。
  5. 电脑一台。

三、 实验原理

1、算术运算符

表5-1 算术运算符

操作符 执行的操作 操作数个数 表达式
+ 加法运算 2 rega + 10
- 减法运算 2 rega - 10
* 乘法运算 2 rega * 10
/ 除法运算 2 23 / 10,运行结果为2。

2、逻辑运算符

表5-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、关系运算符

表5-4 关系运算符

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

4、条件运算符

wire data_out = sel_en ? a : b;

5、按位运算符

表5-5 按位运算符

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

6、拼接运算符

{signal1,signal2}

7、移位运算符

表5-6 移位运算符

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

8、等式运算符

表5-7 等式运算符

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

9、赋值运算符

表5-8 赋值运算符

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

assign a = b,当b信号发生变化时,a都随之变化。

  1. 阻塞赋值方式
    1. 赋值语句执行完成后,才结束块的运行;
    2. 操作数在赋值语句执行后立刻改变变量值;
  2. 数字列表项目非阻塞赋值方式
    1. 在语句块中,赋值语句执行完成后,在块结束前,赋值语句中操作数的值保持不变;
    2. 块结束后,对操作数进行赋值操作,且所赋值为上一次赋值得到的;
    3. 非阻塞赋值方式常用于编写可综合的时序逻辑模块中。

四、 代码讲解

1、逻辑运算符表达式代码分析:

其代码如下:

	reg [9:0]b;				//产生输入信号b,并使b从0加1直至加到1000
	always@(posedge clk_25m)
		if(b == 10'd1000)
			b <= 10'd0;
		else b <= b + 1'd1;
 
	reg [8:0]a;				//产生输入信号a,并使a从0开始加1直至500
	always@(posedge clk_25m)
		if(a == 9'd500)
			a <= 9'd0;
		else a <= a + 1'd1;		
 
	assign c = a[7] && b[9];  //逻辑与,a[7]与b[9]同时为真时c为真 
	assign d = a[7] || b[9];	 //逻辑或,a[7]与b[9]至少一个为真时d为真
	assign e = !a[7];			//逻辑非,a[7]为假时e为真

2、按位运算符表达代码分析式

其代码如下:

	assign f = a[7] & b[9];  	//按位与,a[7]=1、b[9]=1,f=1
	assign g = a[7] | b[9];	        //按位或,a[7]、b[9]至少一个为1时,g=1
	assign h = ~a[7];		//按位非,a[7]为0时,h=1
	assign i = a[7] &~ b[9];	//按位与非,a[7]=1、b[9]=1,i=0
	assign j = a[7] |~ b[9];	//按位或非,a[7]=0、b[9]=0,j=1
	assign k = a[7] ^ b[9];	        //按位异或,a[7]和b[9]相异,k=1
	assign l = a[7] ~^ b[9];	//按位同或,a[7]和b[9]相同,l=1

五、 实验验证

1、将硬件正确连接,如图5-1所示。 图5-1 2、将编写好的代码进行编译,并将要观察的所有输出信号添加到Sinaltap中;

3、通过Signaltap工具对所有运算结果进行采集,采集结果如图5-2所示。

图5-2 4、观察Signaltap II采集到的运算结果会发现与代码中注释的实验结果相同。 六、 拓展实验 1、更改实验代码中的参与运算的输入数据,看看运算结果有何不同;