时序电路建模基础

简介: ⭐本专栏针对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_是异步触发事件。如果没有时钟事件,只有异步事件,就会出现语法错误。

参考文献:

  1. Verilog HDL与FPGA数字系统设计,罗杰,机械工业出版社,2015年04月
  2. Verilog HDL与CPLD/FPGA项目开发教程(第2版), 聂章龙, 机械工业出版社, 2015年12月
  3. Verilog HDL数字设计与综合(第2版), Samir Palnitkar著,夏宇闻等译, 电子工业出版社, 2015年08月
  4. Verilog HDL入门(第3版), J. BHASKER 著 夏宇闻甘伟 译, 北京航空航天大学出版社, 2019年03月

欢迎关注公众号【AIShareLab】,一起交流更多相关知识,前沿算法,Paper解读,项目源码,面经总结。

目录
相关文章
|
13天前
|
机器学习/深度学习 自然语言处理 算法
|
13天前
|
数据可视化
R语言实现有限混合模型建模分析
R语言实现有限混合模型建模分析
|
10月前
|
测试技术
分析建模
分析建模
82 0
|
11月前
|
数据可视化 Python
使用PyMC进行时间序列分层建模
在统计建模领域,理解总体趋势的同时解释群体差异的一个强大方法是分层(或多层)建模。这种方法允许参数随组而变化,并捕获组内和组间的变化。在时间序列数据中,这些特定于组的参数可以表示不同组随时间的不同模式。
113 0
|
11月前
|
机器学习/深度学习 并行计算 算法
R-建模 randomForest
本分分享了R语言中 `randomForest` 函数的用法,以供参考
93 0
|
11月前
|
机器学习/深度学习 数据采集 算法
模型设计
模型设计流程
92 0
|
机器学习/深度学习 编解码 测试技术
Absolut! 能不受约束地生成抗体-抗原结构,指导用于抗体特异性预测的机器学习方法
Absolut! 能不受约束地生成抗体-抗原结构,指导用于抗体特异性预测的机器学习方法
|
机器学习/深度学习 算法 前端开发
机器学习的相关概念与建模流程
机器学习的相关概念与建模流程
机器学习的相关概念与建模流程
|
机器学习/深度学习 人工智能 算法
Mila唐建团队开源大分子机器学习平台TorchProtein:分析蛋白质序列及结构数据,仅需一两行代码
Mila唐建团队开源大分子机器学习平台TorchProtein:分析蛋白质序列及结构数据,仅需一两行代码
295 0
|
图形学
学3D建模需要什么基础?
简单来说,学习3D建模大概需要两个基础。 一是美术基础。建模师需要了解人体结构,像是肌肉线条、皮肤纹理之类的;然后还需要一定的 审美能力,没有审美怎么能制作出好看的模型呢?所以审美也很重要。 二是电脑使用基础。学习建模会接触到不少应用软件的学习,建模常用的软件有3DMax、 MAYA、C4D、ZBrush等。也不是需要全部都学会,学会其中几个必要的,用着顺手的就行。
424 0
学3D建模需要什么基础?