Verilog HDL基础系列二

目录

前言

3.运算符

3.1 算术运算符 

3.2 赋值运算符 

3.4 逻辑运算符 

3.5 条件运算符 

3.6 位运算符 

3.8 拼接运算符 

3.9 优先级别 

总结



前言

Verilog中运算符

3.运算符

运算符可分为以下几类: 
(1)  算术运算符(+,-,*,/,%) 
(2)  赋值运算符(=,<=) 
(3)  关系运算符(>,<,>=,<=,==,!=) 
(4)  逻辑运算符(&&,||,!) 
(5)  条件运算符(?:) 
(6)  位运算符(~,|,^,&,^~))

(7) 移位运算符(<<,>>) 
(8)  拼接运算符({ }) 

3.1 算术运算符 

“+”(加法运算符),”-“(减法运算符),”*”(乘法运算符),”/”(除法运算符,如 7/3 =2),
“%”(取模运算符,也即求余数,如 7%3=1,余数为 1) 

3.2 赋值运算符 

“=”阻塞赋值,”<=”非阻塞赋值。阻塞赋值为执行完一条赋值语句,再执行下一条,可理解为
顺序执行,而且赋值是立即执行;非阻塞赋值可理解为并行执行,不考虑顺序,在 always 块语句
执行完成后,才进行赋值。如下面的阻塞赋值: 

//阻塞赋值
module top(
	input din,
	input clk,
	output reg a,b,c
);
always@(posedge clk)
begin
	a = din;
	b = a;
	c = b;
end 
endmodule 
//非阻塞赋值
module top(
	input din,
	input clk,
	output reg a,b,c
);
always@(posedge clk)
begin
	a <= din;
	b <= a;
	c <= b;
end 
endmodule 

`timescale 1 ns/1 ns  
module top_tb() ;  
reg din ;  
reg clk ;  
wire a,b,c ;  
  
initial  
begin  
  din =  0 ;  
  clk = 0  ;  
  forever  
  begin      
    #({$random}%100)  
    din = ~din ;  
  end  
end  
  
always #10 clk = ~clk ;  
  
top  t0
(.din(din),
.a(a),
.b(b),
.c(c),
.clk(clk)
) ;  
endmodule

可以从仿真结果看到,在 clk 的上升沿,a 的值等于 din,并立即赋给 b,b 的值赋给 c。

如果改为非阻塞赋值,仿真结果如下,在 clk 上升沿,a 的值没有立即赋值给 b,b 为 a 原来
的值,同样,c 为 b 原来的值 

阻塞赋值与非阻塞赋值的RTL图分别如下所示:

深入理解下阻塞赋值与非阻塞赋值:微观上,在时序中“=”是引发“即时事件”,“<=”则是引发“时间点事很多的设计都不包含结构和使用方法,只要设计可以发挥预期般的效果就可以 ,掌握这个简单的道理,自然会明白。自定义 Verilog HDL 语言的结构和使用方法是非常的重要和基础“=”阻塞赋值,”<=”非阻塞赋值。阻塞赋值为执行完一条赋值语句,再执行下一条,可理解为顺序执行,而且赋值是立即执行;非阻塞赋值可理解为并行执行,不考虑顺序,在 always 块语句执行完成后,才进行赋值。一般情况下,在时序逻辑电路中使用非阻塞赋值,可避免仿真时出现竞争冒险现象;在组合逻辑中使用阻塞赋值,执行赋值语句后立即改变;在 assign 语句中必须用阻塞赋值。3.3 关系运算符 
用于表示两个操作数之间的关系,如 a>b,a<b,多用于判断条件,例如: 

if (a>=b)
    q <= 1’b1 ; 
else 
    q <= 1’b0 ;

表示如果 a 的值大于等于 b 的值,则 q 的值为 1,否则 q 的值为 0 

3.4 逻辑运算符 

“&&”(两个操作数逻辑与),”||”(两个操作数逻辑或),”!”(单个操作数逻辑非)例如: 
If (a>b && c <d) 表示条件为 a>b 并且 c<d; if (!a)表示条件为 a 的值不为 1,也就是 0。 

3.5 条件运算符 

“?:”为条件判断,类似于 if else,例如 assign a = (i>8)?1’b1:1’b0 ;判断 i 的值是否大于 8,如果大
于 8 则 a 的值为 1,否则为 0。 

3.6 位运算符 

“~”按位取反,”|”按位或,”^”按位异或,”&”按位与,”^~”按位同或,除了”~”只需要一个操
作数外,其他几个都需要两个操作数,如 a&b,a|b。具体应用在后面的组合逻辑一节中有讲解。

3.8 拼接运算符 

“{ }”拼接运算符,将多个信号按位拼接,如{a[3:0], b[1:0]},将 a 的低 4 位,b 的低 2 位拼接成
6 位数据。另外,{n{a[3:0]}}表示将 n 个 a[3:0]拼接,{n{1’b0}}表示 n 位的 0 拼接。如{8{1’b0}}表示
为 8’b0000_0000. 

3.9 优先级别 

此处记不住运算符的优先级别的话,最好的办法就是写逻辑代码时加()。


总结

简单介绍运算符,最重要的是理解赋值运算与非赋值运算符。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有点大,分为两部分(上和下),还有一个超星阅读器 第1章 EDA设计与Verilog HDL语言概述   1.1 EDA设计概述   1.1.1 EDA技术简介   1.1.2 EDA与传统电子系统设计方法   1.1.3 可编程逻辑器件对EDA技术的要求   1.2 Verilog HDL语言简介   1.2.1 硬件描述语言说明   1.2.2 Verilog HDL语言的历史   1.2.3 Verilog HDL语言的能力   1.2.4 Verilog HDL和VHDL语言的比较   1.2.5 Verilog HDL和C语言的比较   1.3 Verilog HDL语言的描述层次说明   1.3.1 Verilog HDL语言描述能力综述   1.3.2 系统级和算法级建模   1.3.3 RTL级建模   1.3.4 门级和开关级建模   1.4 基于Verilog HDL语言的CPLD/FPGA开发流程   1.5 Verilog HDL语言的可综合与仿真特性   1.5.1 VerilogHDL语句的可综合性说明   1.5.2 Verilog HDL语句的仿真特性说明   1.6 本章小结   1.7 思考题   第2章 Verilog HDL基础与开发平台操作指南   2.1 Verilog HDL程序开发的必备知识   2.1.1数字的表示形式   2.1.2常用术语解释   2.1.3 Verilog HDL程序的优劣判断指标   2.2 Verilog HDL程序设计模式   2.2.1 自顶向下的设计模式   2.2.2层次、模块化模式   2.2.3 IP核的重用   2.3 Xilinx Spartan 3E系列FPGA简介   2.3.1 Spartan 3E系列FPGA简介   2.3.2 Spartan 3E系列FPGA结构说明   2.4 ISE快速入门   2.4.1 ISE操作基础   2.4.2 新建工程   2.4.3 Verilog HDL代码的输入与功能仿真   2.4.4 Xilinx IP核的使用   2.4.5 用户约束输入   2.4.6 综合与实现   2.4.7 器件配置   2.5 ModelSim快速入门   2.5.1 ModelSim仿真软件的安装   2.5.2 在ModelSim中指定Xilinx的仿真库   2.5.3 ModelSim的基本操作   2.6 本章小结   2.7 思考题   第3章 Verilog HDL程序结构   3.1 程序模块说明   3.1.1 Verilog HDL模块的概念   3.1.2 模块的基本结构   3.1.3 端口说明   3.2 Verilog HDL的层次化设计   3.2.1 Verilog HDL层次化设计的表现形式   3.2.2 模块例化   3.2.3 参数映射   3.2.4 在ISE中通过图形化方式实现层次化设计   3.3 Verilog HDL语言的描述形式   3.3.1 结构描述形式   3.3.2 行为描述形式   3.3.3 混合设计模式   3.4 本章小结   3.5 思考题   第4章 Verilog HDL语言基本要素   4.1 标志符与注释   4.1.1 标志符   4.1.2 注释   4.2 数字与逻辑数值   4.2.1 逻辑数值   ……   第5章 面向综合的行为描述语句   第6章 面向验证和仿真的行为描述语句   第7章 系统任务和编译处理语句   第8章 Verilog HDL可综合设计的难点解析   第9章 高级逻辑设计思想与代码风格   第10章 可综合状态机开发实例   第11章 常用逻辑的Verilog HDL实现   第12章 Xilinx硬核模块的调用   第13章 串口接口的Verilog HDL设计   参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值