搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
在线问答5
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Android NDK 入门与实践之 CMake_android ndk cmake
2
Xilinx FPGA:vivado单端RAM实现输出偶数(单端RAM的简单应用)
3
[Unity2D入门教程]简单制作仿植物大战僵尸游戏之①搭建场景_pvzunity素材
4
微信小程序电影列表(一)_微信小程序微电影
5
R语言正则表达式
6
大学生网课搜题神器?7个不限次的公众号和软件分享啦 #媒体#微信#职场发展_搜题免费微信公众号
7
华为OD机试-解码方法(java& c++& python & javascript & golang & c# & c)_模拟一套简化的序列化传输方式,请实现下面的数据编码与解码过程 华为od
8
Error: Cannot find definition for package colmap._cannot find the definition for
9
Spock测试套件入门_spock setup
10
微信小程序如何进行npm导入组件_微信小程序安装npm
当前位置:
article
> 正文
FPGA开发之状态机设计_fpga顺序状态机的设计实验
作者:在线问答5 | 2024-07-02 16:33:16
赞
踩
fpga顺序状态机的设计实验
状态机是许多数字系统的核心部件,是一类重要的时序逻辑电路。通常包括三个部分:
一是下一个状态的逻辑电路,
二是存储状态机当前状态的时序逻辑电路,
三是输出组合逻辑电路。
通常,状态机的状态数量有限,称为有限状态机(FSM)。由于状态机所有触发器的时钟由同一脉冲边沿触发,故也称之为同步状态机。根据状态机的输出信号是否与电路的输入有关分为 Mealy 型状态机和 Moore 型状态机。电路的输出信号不仅与电路当前状态有关,还与电路的输入有关,称为 Mealy 型状态机,即次态=f(
现状,输入
)
,输出
=f
(现状,输入); 而电路的输出仅仅与各触发器的状态,不受电路输入信号影响或无输入,称为 Moore 型状态机,
即
次态
=f(
现状,输 入)
,输出
=f
(现状)。其标准模型如下所示:
状态机的状态转移图,通常也可根据输入和内部条件画出。一般来说,状态机的设计包含下列设计步骤:
• 根据需求和设计原则,确定是 Moore 型还是 Mealy 型状态机;
• 分析状态机的所有状态,对每一状态选择合适的编码方式,进行编码;
• 根据状态转移关系和输出绘出状态转移图;
• 构建合适的状态机结构,对状态机进行硬件描述。
状态机的描述通常有三种方法,称为一段式状态机,二段式状态机和三段式状态机。状态机的描述通常包含以下四部分:
1)利用参数定义语句 parameter 描述状态机各个状态名称,即状态编码。状态编码通常有很多方法包含自然二进制编码,One-hot 编码,格雷编码码等;
2)用时序的 always 块描述状态触发器实现状态存储;
3)使用敏感表和 case 语句(也采用 if-else 等价语句)描述状态转换逻辑;
4)描述状态机的输出逻辑。
下面根据状态机的三种方法,来比较各种方法的优劣。
1、一段式状态机
module detect_1(
input clk_i,
input rst_n_i,
output out_o
);
reg out_r;
//
状态声明和状态编码
reg [1:0] state;
parameter [1:0] S0=2'b00;
parameter [1:0] S1=2'b01;
parameter [1:0] S2=2'b10;
parameter [1:0] S3=2'b11;
always@(posedge clk_i)
begin
if(!rst_n_i)begin
state<=0;
out_r<=1'b0;
end
else
case(state)
S0 :
begin
out_r<=1'b0;
state<= S1;
end
S1 :
begin
out_r<=1'b1;
state<= S2;
end
S2 :
begin
out_r<=1'b0;
state<= S3;
end
S3 :
begin
out_r<=1'b1;
end
endcase
end
assign out_o=out_r;
endmodule
一段式状态机是应该避免使用的,该写法仅仅适用于非常简单的状态机设计,不符合组合逻辑与时序逻辑分开的原则,整个结构代码也不清晰,不利用维护和修改。
2、两段式状态机
module detect_2(
input clk_i,
input rst_n_i,
output out_o
);
reg out_r;
//
状态声明和状态编码
reg [1:0] Current_state;
reg [1:0] Next_state;
parameter [1:0] S0=2'b00;
parameter [1:0] S1=2'b01;
parameter [1:0] S2=2'b10;
parameter [1:0] S3=2'b11;
//
时序逻辑:描述状态转换
always@(posedge clk_i)
begin
if(!rst_n_i)
Current_state<=0;
else
Current_state<=Next_state;
end
//
组合逻辑
:
描述下一状态和输出
always@(*)
begin
case(Current_state)
S0 :
begin
out_r=1'b0;
Next_state= S1;
end
S1 :
begin
out_r=1'b1;
Next_state= S2;
end
S2 :
begin
out_r=1'b0;
Next_state= S3;
end
S3 :
begin
out_r=1'b1;
Next_state=Next_state;
end
endcase
end
assign out_o=out_r;
endmodule
两段式状态机采用两个 always 模块实现状态机的功能,其中一个 always 采用同步时序逻辑描述状态转移,另一个always 采用组合逻辑来判断状态条件转移。两段式状态机是推荐的状态机设计方法。
3、
三段式状态机
module detect_3(
input clk_i,
input rst_n_i,
output out_o
);
reg out_r;
//
状态声明和状态编码
reg [1:0] Current_state;
reg [1:0] Next_state;
parameter [1:0] S0=2'b00;
parameter [1:0] S1=2'b01;
parameter [1:0] S2=2'b10;
parameter [1:0] S3=2'b11;
//
时序逻辑:描述状态转换
always@(posedge clk_i)
begin
if(!rst_n_i)
Current_state<=0;
else
Current_state<=Next_state;
end
//
组合逻辑:描述下一状态
always@(*)
begin
case(Current_state)
S0:
Next_state = S1;
S1:
Next_state = S2;
S2:
Next_state = S3;
S3:
Next_state = Next_state;
default :
Next_state = S0;
endcase
end
//
输出逻辑:让输出
out
,经过寄存器
out_r
锁存后输出,消除毛刺
always@(*)
begin
case(Current_state)
S0,S2:
out_r<=1'b0;
S1,S3:
out_r<=1'b1;
default :
out_r<=out_r;
endcase
end assign out_o=out_r;
三段式状态机在第一个 always 模块采用同步时序逻辑方式描述状态转移,第二个 always 模块采用组合逻辑方式描述状态转移规律,第三个 always 描述电路的输出。通常让输出信号经过寄存器缓存之后再输出,消除电路毛刺。这种状态机也是比较推崇的,主要是由于维护方便,组合逻辑与时序逻辑完全独立。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/在线问答5/article/detail/780217
推荐阅读
article
FPGA
架构笔记_
intel
的
fpga
器件内部最小
逻辑
单元
为...
了解了一些Intel
FPGA
(Altera)和Xilinx
FPGA
的
架构知识,下面是一些简单
的
笔记总结。一、Inte...
赞
踩
article
Xilinx
官方教学视频学习笔记 —— 7
Series
FPGA
Clocking
Resourc...
时钟功能输入(CCIO)每个Bank内都有自己的Clock输入引脚,每个Bank有4个,可配置为单端或差分时钟;这些引脚...
赞
踩
article
xilinx
fpga
ultrascale
器件
GTX
参考
时钟
注意点_
bank115
116
时钟
...
FPGA
GTX
_
bank115
116
时钟
bank115
116
时钟
...
赞
踩
article
基于
FPGA
的
电子
计算器
设计
(下)_
设计
一个
基于
fpga
的
简单
运算器,使之能提供以下
功能
1.完成...
今天给大侠带来
基于
FPGA
的
电子
计算器
设计
,由于篇幅较长,分三篇。今天带来第三篇,下篇,话不多说,上货。导读本篇介绍了一...
赞
踩
article
Xilinx
FPGA
:
vivado
单端
RAM
实现输出
偶数
(
单端
RAM
的简单应用)...
(2)调用IP资源找到
RAM
s&ROMs&B
RAM
s,选择其中的块资源。(1)先创建一个工程。
Xilinx
FPGA
:
v...
赞
踩
article
FPGA
入门————
LED
流水灯(超详细教程)_
led
代码
fpga
...
FPGA
入门————
LED
流水灯(超详细教程)_
led
代码
fpga
led
代码
fpga
...
赞
踩
article
Xilinx
FPGA
:
vivado
实现
超声波
测距
_
vivado
超声波
测距
串口通信...
超声波
模块测出的距离显示在数码管上。对echo信号高脉冲计时。产生trig信号的模块。_
vivado
超声波
测距
串口通信v...
赞
踩
article
altera
fpga
sdi
输出
方案
_
十年
FPGA
开发经验工程师谈
设计
技巧...
从大学时代第一次接触
FPGA
至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、抢答器、密码锁等实...
赞
踩
article
Xilinx
FPGA
——
Vivado
生成bit文件时需要添加的约束_
edit
device
pro...
Vivado
设计过程中生成的bit流文件需要通过特定的配置引脚导入到
FPGA
中。专用配置引脚上的不同电压级别决定了不同的...
赞
踩
article
CXL
over
Ethernet
: A
Novel
FPGA
-
based
Memory Disag...
优化分离式内存的访问。利用
CXL
和RDMA结合的方法,用
CXL
支持本机内存加载/存储访问;利用RDMA进行跨机架的访问,...
赞
踩
article
【
FPGA
+
Nvidia
/算能GPU+AI】自动
驾驶
多核异构实现
16
路车载
摄像头
实时AI分析解...
基于 Xilinx 公司ZYNQ Ultrascale+ MPSoC系列
FPGA
芯片设计,应用于无人
驾驶
、慢速特种车...
赞
踩
article
GPU
,
CPU
,SOC,
DSP
,
FPGA
,
ASIC
,MCU,MPU,GPP,ECU都是啥子_soc ...
上次关于TOPS的问题,似乎得到很多的关注,这里就多讲点自动驾驶芯片的内容上次也聊到了,讨论自动驾驶芯片的意义并非单纯理...
赞
踩
article
Xilinx
7系列
FPGA
高性能(HP)
接口
与
2.5
V/
3.3
V 外设IO
接口
设计
考虑_v7 f...
本文详细介绍了
Xilinx
7系列
FPGA
的HPBank和HRBank
接口
特性,探讨了电阻分压、图腾柱电阻、FET开关、电...
赞
踩
article
FPGA
的
I/O
BANK
介绍
_
fpga
读
不到
对端编号
bank
...
一般
fpga
都分为若干个
bank
例如xilinx
的
高端
fpga
,能分为22甚至更多个
bank
这么做主要是为了提高灵活性因...
赞
踩
article
Xilinx
FPGA
SelectIO
串并转换IP核使用笔记_
fpga
selectlo
ip核配...
IP核参数配置总结页:串行输入,8bit并行输出,single-end信号,速率为SDR,IO时钟驱动缓冲包括了BUFI...
赞
踩
article
Xilinx
FPGA
selectIO
笔记_
xilinx
lvpecl
...
前言内容主要来自ug471,主要记录
FPGA
的文档的学习笔记,参考的内容一个是csdn上的笔记和ug471文档此外还有部...
赞
踩
article
FPGA
SATA
高速存储设计...
今天来讲一篇如何在fpga上实现sata ip,然后利用sata ip实现读写sata 盘的目的,如果需要再速度和容量上...
赞
踩
article
【
FPGA
、
maltab
】基于
FPGA
的
SOQPSK
调制解调技术
的
设计与实现_
soqpsk
编码
原理...
在QPSK中,将基带码元分成I、Q两路,相邻码元
的
最大相位差为180°,这样
的
相位突变在频带受限
的
系统中会引起信号包络
的
...
赞
踩
article
FPGA
-
DFT
(
离散
傅里叶
变换
)—
FFT
(快速
傅里叶
变化)...
以上从原理介绍了
DFT
(
离散
傅里叶
变换
原理),然后再介绍了
FFT
(快速
傅里叶
变换
)以及IP核的使用,和IP核使用参数以及...
赞
踩
article
FPGA
学习笔记2-
FPGA
的
主要
厂商
_
actel
fpga
...
主要
厂商:Xilinx、Altera、Actel、LatticeXilinx最牛逼,Altera被Intel收购,前两家...
赞
踩
相关标签
fpga
fpga开发
计算器
altera fpga sdi输出方案
flowable 流程设计器
mips ram设计
verilog hdl数字集成电路设计原理与应用
设计与验证verilog hdl吴继华
论文阅读
人工智能
汽车
FPGA
Serdes
串并/并串转换
SATA存储
FPGA SATA
FPGA 存储方案
SATA存储方案
690T SATA存储
zynq SATA存储