一、数字逻辑回顾:
数字电路中:组合逻辑、时序逻辑
组合逻辑:
时序逻辑:电路逻辑输出值跟当前的输入值和电路的当前状态有关;如何保存当前状态:需要有储存功能的cell,比如:Flip-Flop,Latch
逻辑值:在数字电路中,1个bit有四种状态(四值逻辑)
数值的二进制表示:
N比特的无符号二进制取值范围:[0,2N-1]
有符号数的二进制表示:(原码,反码,补码)
数字电路系统一般使用补码表示数值,在数学上加减比较方便
数值的十六进制表示:二进制按照4BIT表示为十六进制
二、什么是Verilog?
Verilog是一种硬件描述语言:用程序设计语言来描述数字电路的功能,提高设计效率。早期数字电路设计是基于原理图输入的,类似电路板的PCB原理图设计
类似的硬件描述语言:
VHDL、SystemVerilog、Chisel
三、Verilog语法:
可综合描述:综合tool能够把verilog描述转化(compile)成基本的数字电路底层cell(与或非gate,寄存器等)的描述。
assign y = a & b;
不可综合描述:综合tool不能把verilog描述转换为基本的数字电路底层cell的描述。
$display(“hello word.\n”)
verilog设计仿真与实现:通过EDA tool,可以在计算机上对verilog设计的功能进行仿真。
常用的仿真工具(所有verilog描述):
1.Modelsim/Questasim(Mentor)
2.VCS(Synopsys)
3.NC-verilog(Candence)
数字电路设计方法学:
Bottom-Up:从底层cell开始,逐渐往上大家功能;
Top-Down:从底层结构,协议算法开始,向下逐步划分功能模块;再细分各功能模块的功能与IO
目前,基于verilog的数字电路谁通常使用Top-Down的设计方法。因为数字IP/IC的规模很大,需要先抽象思维再细化;verilog给数字电路的设计的抽象思维提供了一种设计开发语言,但是:数字设计和软件设计师不同的,需要Think in Hardware,写代码前需要先设计电路结构。
verilog的功能描述:
Top-Dowan描述数字电路功能:通过模块module的层次化设计,实现一个复杂的数字逻辑功能
四、verilog语法详细介绍
标识符:
用于定义code中的各种名字,比如:信号,module,define,parameter;
标识符由:字符,数字,下划线组成;
首字母必须是字母或者下划线;
标识符是区分大小写的;
信号名字建议与信号功能相对应:rstn,clk_core,mem_cs,mem_we,mem_dout,mem_din,mem_addr;
关键字:
常用关键字:
注释:
注释一行:以“ // ”开始,到行末;
注释多行:以“ /* ”开始,到“ */ ”为止的所有内容;
数据物理类型:
线性数据:用于连续赋值语句(assign)描述组合逻辑或者module间的信号连接线;
wire型:
wire a; //1bit位宽
wire [3:0] b; //4bit
wire [7:0] c; //8bit
assign a = 1'b0; //连续赋值语句
assign c = 8'h5a; //8bit的十六进制数
tri0/tri1 :带下拉、上拉电阻的线性,没有驱动时,会有默认的值0/1,一般综合代码不用;
tri0 s0;
tri1 [20:0] s1;
寄存器类型:
用于过程赋值语句(always、initial)描述组合逻辑或者时序逻辑(寄存器);
wire [3:0] din;
reg [3:0] d0; //4bit
reg d1;//1bit
initial begin //过程赋值语句
d1 = 0; #10;
d1 = 1;
end
always(posedge clk)begin //clk端一般就是寄存器
if(d1) d0 <= din;
end