目录

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

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

一、 实验目的与意义

  1. 学习逻辑运算符的定义。
  2. 掌握Verilog HDL语言中基本运算符的使用方法。
  3. 掌握HqFpga软件的使用方法。

二、 实验设备及平台

  1. iCore3L 双核心板。
  2. XiST USB Cable(或相同功能)仿真器。
  3. Micro USB线缆。
  4. 装有HqFpga2.8.5版本开发软件的电脑一台。

三、 实验原理

1、算术运算符

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

2、逻辑运算符

操作符 执行的操作 操作数个数 表达式
逻辑求反 1 !a
&& 逻辑与 2 a && b
|| 逻辑或 2 a || b
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;

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、算术运算符表达式

/*************************************************/
//算数运算符:"+"、"-"、"*"、“/”	
	assign out_a = x1 + y1;//加法运算符表达式
	assign out_b = y1 - x1;//减法运算符表法式
	assign out_c = 2 * x1;//乘法运算符
	assign out_d = y1 / 5;//除法运算符

2、逻辑运算符表达式

/*************************************************/
//逻辑运算符:“!”、“&&”、“||”,逻辑运算符的结果只能是“1”或者“0”
	assign out_e = !x2;//逻辑求反表达式
	assign out_f = x2 && y2;//逻辑与表达式
	assign out_g = x2 || y2;//逻辑或表达式

3、关系运算符表达式

/*************************************************/
//关系运算符:“<”、“>”、“<=”、“>=”
//条件运算符表达式:con_expression ? true_expression ? false_expression;
	assign out_h = (x3 < y3) ? (y3 - x3) : 4'd0;//小于号表达式
	assign out_i = (x3 > y3) ? 4'd0 : (y3 + x3);//大于号表达式
	assign out_j = (y3 <= z3) ? (y3 - x3) : 4'd0;//小于等于号表达式
	assign out_k = (y3 >= z3) ? (y3 - x3) : 4'd0;//大于等于号表达式

4、按位运算符表达式

/*************************************************/
//按位运算符:“~”、“&”、“|”、“^”、“~^”
//在按位运算中,若两个操作数的位宽不一致,则会自动将两个操作数右对齐,高位补0后进行运算	
	assign out_l = ~x4;//按位求反表达式
	assign out_m = x4 & y4;//按位与表达式
	assign out_n = x4 | y4;//按位或表达式
	assign out_o = x4 ^ y4;//按位异或表达式
	assign out_p = x4 ~^ y4;//按位同或表达式

5、拼接运算符

/*************************************************/
//拼接运算符
	assign q = {x5,y5};//拼接运算符表达式

6、移位运算符表达式

/*************************************************/
//移位运算符:“<<”、“>>”		
	assign r = x6 << 3;//左移表达式
	assign s = x6 >>3;//右移表达式

五、 实验步骤

1、 将下载器连接到iCore3L双核心板; 2、 通过Micro USB线给iCore3L供电; 3、 将编写好的代码进行编译,编译无报错之后点击“全部运行”按钮,进行全编译。 图5-1 全编译工程

4、 全编译通过后,点击左上角的“调试模式”按钮,进入调试模式。然后点击“采集调试信息”按钮。 图5-2	采集调试信息

5、 将clk_25m信号设置为采样时钟,rst_n设置为采样且触发,其他信号设置为仅采样;然后点击红框中“ILVA配置”按钮,即红框中齿轮状图标。 图5-3	设置采样信号

6、 将采样深度设置为1024,然后点击确定,并点击“文件”按钮,下拉菜单中点击“保存工程…”。 图5-4	设置采样深度

7、 点击“实现→下载”按钮,将仿真文件下载到FPGA中,然后点击实时调试按钮。 图5-5	将仿真文件下载到FPGA

8、 单击rst_n信号,设置触发表达式,将触发类型设置为“算数比较”,“等于”,“1’h1”,然后点击确定,再点击左上角的“运行”,开始进行信号的采集。 图5-6	设置触发表达式及运行

9、 信息输出窗口出现“Done:1”,表示调试完成,同时会出现下图中调试完成的提示,点击“OK”即可;然后点击工具栏红框中的“波形”按钮,查看调试波形。 图5-7	调试完成提示

10、 如果出现如下弹窗,则检查触发条件设置是否满足触发要求,或者采样深度是深度是否过大等原因。 图5-8	调试失败提示

11、 通过HqInsight Debugger工具对运算结果进行采集,进行对比验证HqInsight Debugger采集到的运算结果与逻辑运算的实验结果。 图5-9	波形图显示运行结果1

图5-10	波形图显示运行结果2

六、 拓展实验

  1. 更改实验代码中的变量的初始值,看看运算结果有何不同;
  2. 深刻理解阻塞赋值与非阻塞赋值的区别。