FPGA-verilog简单讲解

简介: FPGA-verilog简单讲解

信号类型reg&wire


   在程序中需要定义信号类型,一般分为reg(寄存器型)和wire(线型)两种,下面将以一张图来阐明:

image.png

作为input或inout的信号端口只能是wire型,而作为output的信号端口则可以是wire型或者reg型。reg定义的信号通常会被综合成一个寄存器(rigister),但有一个前提,就是reg信号必须是在某个特定信号边沿敏感触发的always语句中被赋值。


reg变量只能在always和initial语句中赋值,wire 只能用于assign,用连续赋值语句,通过模块化的实例输入和输出端口赋值。

阻塞与非阻塞


在Verilog语言中,有两种赋值运算,一种叫阻塞赋值(blocking assignment),其运算符为‘ = ’;另一种叫做非阻塞赋值(non-blocking assignment),其运算符为‘ <= ’;

阻塞赋值:在顺序代码块中使用阻塞赋值语句,如果这一句没有执行完成,则后面的语句不会执行。

非阻塞赋值:在顺序代码块中使用非阻塞赋值语句,则执行这一句的同时,并不会阻碍后面的语句的执行。

如果后一个语句所用到的是前面一个非阻塞赋值语句中的变量,由于这两个语句‘同时’执行,因此后面的一个语句是前面一个语句执行前变量的数值。非阻塞赋值是Verilog作为硬件描述语言与普通编程语言的一个重大区别

例1:阻塞赋值(下面的阻塞例子在代码书写中不能适用,在此列出只为讲述阻塞赋值例子)


always@(posedge clk)

begin

b = a;

c = b;

end

a = 7, b=7, c=7;

a = 4, b=4, c=4;

a = 5, b=5, c=5;

例2:非阻塞赋值

always@(posedge clk)

begin

b <= a;

c <= b;

end

a = 7, b=x, c=x;

a = 4, b=7, c=x;

a = 5, b=4, c=7;

a = 0, b=5, c=4;

一般书写习惯里,assign中用‘ = ’,always中用‘ <= ’。

异步复位&同步释放


  • 概述:

单独使用异步复位或者同步复位均不可靠。异步复位会影响寄存器的“复位时间”,引起设计的稳定性问题,尤其对于状态机的无意识的复位,将导致进入不确定的状态。同步复位也存在类似问题,而且对于不带同步复位专用端口将会增加额外的逻辑资源。


那么如何解决上述问题,一般情况采用异步复位与同步释放的方式,而且复位信号低电平有效,故两全其美。

  • 具体知识:

   异步复位:

何为异步,即复位信号和系统时钟信号的触发可以在任何时刻,两者无任何关系,相互独立。

image.png

同步复位:

何为同步,即复位信号和系统时钟信号同时为“真”的状况下,方可起作用。

image.png

异步复位同步释放:

image.png

目录
相关文章
|
6月前
|
数据格式 异构计算
|
6月前
|
存储
单片机的指令系统
单片机的指令系统
47 1
|
4月前
|
数据采集 传感器 监控
如何在LabVIEW中使用FPGA模块
如何在LabVIEW中使用FPGA模块
105 1
|
4月前
|
存储 异构计算
FPGA入门(3):组合逻辑
FPGA入门(3):组合逻辑
45 0
|
4月前
|
算法 异构计算
FPGA入门(2):Verilog HDL基础语法
FPGA入门(2):Verilog HDL基础语法
31 0
|
6月前
|
芯片 异构计算
FPGA——modelsim上R型指令的仿真
FPGA——modelsim上R型指令的仿真
|
算法 关系型数据库 MySQL
FPGA:Verilog HDL程序的基本结构
FPGA:Verilog HDL程序的基本结构
161 0
FPGA:Verilog HDL程序的基本结构
|
算法 异构计算
m基于FPGA的NBDP系统ARQ单元模块的verilog实现
m基于FPGA的NBDP系统ARQ单元模块的verilog实现
211 0
m基于FPGA的NBDP系统ARQ单元模块的verilog实现
|
异构计算
FPGA 8-3译码器(一)
FPGA 8-3译码器(一)
95 0
FPGA 8-3译码器(一)
|
异构计算
FPGA 8-3译码器(二)
FPGA 8-3译码器(二)
351 0
FPGA 8-3译码器(二)