FPGA学习心得--01

1. Verilog

1.1 数字表示形式

例 : 多 少 位 的 什 么 进 制 数 → 4 ′ d 8 ( 4 位 的 十 进 制 数 8 ) 例:多少位的什么进制数 \rightarrow 4'd8 (4位的十进制数8) 4d8(48)
如果将 ′ ' 一撇读作汉字 的 的 ,Verilog的数字表示语法符合口头语言的习惯。

1.2 数据类型

Verilog作为硬件描述语言,数据类型与硬件有直接对应关系。

数据类型介绍符号
寄存器可以理解为一个抽象化的数据存储单元,这与其他编程语言的变量概念很相近,只是Verilog以硬件寄存器作为变量的实现载体,而高级编程语言将使用一段内存来存储变量值(或是CPU中的寄存器)reg、integer、real
线网连接各个硬件功能单元的连线wire
参数有点类似于高级编程语言中的宏定义parameter

1.3 运算符

1.3.1 算数运算符

种类和功能和C其他编程语言一样。
值得注意的是,乘除运算在底层实现时往往会比较消耗资源

1.3.2 拼接运算符

这个运算符是Verilog特有的运算符,作用是将两个信号绑定为一个信号,例如:
{ a , b } → 将 a , b 两 个 信 号 拼 接 起 来 作 为 一 个 新 信 号 \{a, b\} \rightarrow 将a, b两个信号拼接起来作为一个新信号 {a,b}a,b

1.3.3 赋值

符号=<=
含义阻塞赋值语句并行赋值语句
介绍在always块中,该赋值语句只有当前面的语句都执行完毕后才会执行,和其他顺序执行的编程语言中赋值语句功能相同在always块中和其他语句并行执行,不等待上一条语句的执行结果
应用场景1. assign语句
2. 不带时钟的always块(组合逻辑)
带时钟的always块

1.3.4 其他

关系运算符; 逻辑运算符; 三目运算符 (条件运算符); 移位运算符

1.4 程序框架

model model_name (
	input	input_var_name
	output	output_var_name
	...
	);
	
parameter PAR_NAME	=123
reg	[:]		reg_name
wire		wire_name

assign	wire_name = ...

always @(posedge clk) begin
	if (...)
	else if (...)
	else
	end begin
		case(...)
			... : ...;
			... : ...; 
			...
			default : ;
		endcase
	end
end

endmodule

上面的伪代码定义了Verilog一个模块,begin、end的作用与C语言中的 " { } " "\{ \}" "{}"作用相同,begin、end代码段中的语句是顺序执行的(并行赋值语句是例外)。为了保证代码的规范性,即使逻辑判断分支中仅有一条语句,也可以用begin、end打包起来。

1.5 锁存器

锁存器与寄存器的最大区别是:锁存器属于组合逻辑,输出电平变化仅与输入信号有关,不受时钟约束。
锁存器对输入脉冲敏感,容易产生毛刺,这种瞬时的不确定性在后级电路中引发的BUG难以察觉。
另外由于FPGA中没有现成的锁存器资源,消耗底层资源。
锁存器产生的原因往往是代码逻辑不完整。例如,if语句缺少else与之对应,case语句中没有default等。

1.6 状态机

1.6.1 状态机适用的场景

某项工作需要按照固定的流程或步骤来完成,工作过程中总在各个阶段之间切换。例子:升降机。

1.6.2 状态机的优势

开发人员在编写代码时不需要考虑到所有状态的排列组合,仅需要考虑各个工作状态或工作阶段之间的转换条件。例如:升降机的控制程序不需要各个楼层分别编写,而是通过状态机来完成开关门、上升下降等动作。

1.6.3 状态机的分类

状态机全称“有限状态机”。在电路实现上可以看作组合电路和时序电路的组合,状态机的各个状态往往是时序电路,而状态之间的切换和输出往往是组合逻辑实现的。根据状态机的输出是否和输入相关,状态机又分成“摩尔型状态机”和“米勒型状态机”。

状态机分类介绍
米勒型状态机(Mealy)组合逻辑的输出不仅取决于当前状态还取决于状态机的输入
摩尔型状态机(Moore)组合逻辑的输出仅取决于当前的状态

在这里插入图片描述

米勒型状态机示意图(该插图来自正点原子教程)

在这里插入图片描述

摩尔型状态机示意图(该插图来自正点原子教程)

1.6.4 状态机在Verilog中的写法

1.6.4.1 二段式

一个always模块适用同步时序描述状态转移。
另一个always模块采用组合逻辑判断状态转移条件,以及描述状态机输出。

1.6.4.2 三段式

一个always模块使用同步时序描述状态转换
一个always模块使用组合逻辑判断状态转移条件
最后一个always模块用于描述状态机输出,可以采用时序电路,也可以使用组合电路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值