FPGA学习心得--01

1. Verilog

1.1 数字表示形式

例:多少位的什么进制数→4′d8(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模块用于描述状态机输出,可以采用时序电路,也可以使用组合电路。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值