⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL言语学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与规划,对状况机FSM进行剖析与建模。
文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或许重视大众号【AIShareLab】,回复 FPGA 也可获取。
Verilog行为级描绘用关键词initial或always,但initial是面向仿真,不能用于逻辑综合。always是无限循环句子,其用法为:
always@(事情操控表达式(或灵敏事情表))
begin
块内局部变量的界说;
进程赋值句子;
end
堵塞型赋值句子与非堵塞型赋值句子
在always句子内部的进程赋值句子有两种类型:
- 堵塞型赋值句子(Blocking Assignment Statement)
- 非堵塞型赋值句子(Non-Blocking Assignment Statement)
赋值运算符
赋值运算符(=) :堵塞型进程赋值算符
- 前一条句子没有完成赋值进程之前,后边的句子不可能被履行。
赋值运算符(<=) :非堵塞型进程赋值算符
- 一条非堵塞型赋值句子的履行,并不会影响块中其它句子的履行。
进程赋值句子有堵塞型和非堵塞型
堵塞型用“=”表明,多条句子顺序履行。
begin
B = A;
C = B+1;
end
非堵塞型用“<=”表明,句子块内部的句子并行履行。
begin
B <= A;
C <= B+1;
end
堵塞型进程赋值与非堵塞型进程赋值
//Blocking (=)
initial
begin
#5 a = b;
#10 c = d;
end

//Nonblocking (<=)
initial
begin
#5 a <= b;
#10 c <= d;
end

留意:
- 在可综合的电路规划中,一个句子块的内部不允许一同呈现堵塞型赋值句子和非堵塞型赋值句子。
- 在组合电路的规划中,主张采用堵塞型赋值句子。
- 在时序电路的规划中,主张采用非堵塞型赋值句子。
事情操控句子
用always句子描绘硬件电路的逻辑功用时,在always句子中@符号之后紧跟着“事情操控表达式”。
逻辑电路中的灵敏事情一般有两种类型:电平灵敏事情和边缘触发事情。
在组合逻辑电路和锁存器中,输入信号电平的改变一般会导致输出信号改变,在Verilog HDL中,将这种输入信号的电平改变称为电平灵敏事情。
在同步时序逻辑电路中,触发器状况的改变仅仅发生在时钟脉冲的上升沿或下降沿,Verilog HDL中用关键词posedge(上升沿)和 negedge(下降沿)进行说明,这就是边缘触发事情。
灵敏事情分为电平灵敏事情和边缘触发事情
电平灵敏事情(如锁存器)
always@(sel or a or b)
always@(sel,a,b)
sel、a、b中恣意一个电平发生改变,后边的进程赋值句子将履行一次。
边缘灵敏事情(如触发器)
always@(posedge CP or negedge CR)
CP的上升沿或CR的下降沿来到,后边的进程句子就会履行。
在always后边的边缘触发事情中,有一个事情必须是时钟事情,还能够有多个异步触发事情,多个触发事情之间用关键词 or 进行衔接,例如,句子
always @ (posedge CP or negedge Rd_ or negedge Sd_)
在Verilog 2001规范中,能够使用逗号来代替or。例如,
always @ (posedge CP, negedge Rd_, negedge Sd_)
posedge CP
是时钟事情, negedge Rd_
和negedge Sd_
是异步触发事情。如果没有时钟事情,只有异步事情,就会呈现语法错误。
参考文献:
- Verilog HDL与FPGA数字体系规划,罗杰,机械工业出版社,2015年04月
- Verilog HDL与CPLD/FPGA项目开发教程(第2版), 聂章龙, 机械工业出版社, 2015年12月
- Verilog HDL数字规划与综合(第2版), Samir Palnitkar著,夏宇闻等译, 电子工业出版社, 2015年08月
- Verilog HDL入门(第3版), J. BHASKER 著 夏宇闻甘伟 译, 北京航空航天大学出版社, 2019年03月
欢迎重视大众号【AIShareLab】,一同沟通更多相关知识,前沿算法,Paper解读,项目源码,面经总结。