格力晶弘冰箱怎么样冰箱BCD-470WPQG 宽702.5深775高1860

【 FPGA 】(4)
状态机是fpga设计中极其重要的一种技巧,掌握状态机的写法可以使fpga的开发事半功倍。
下面记录一下状态机的基本知识理论。
三种状态机实现代码:
// 一段式状态机
module style1_fsm(i_clk, rst_n, i1, i2, o1, o2, err);
input i_clk, rst_n, i1, i2;
output o1, o2,
parameter [3:0] IDLE = 4'b0001,
= 4'b0010,
= 4'b0100,
ERROR= 4'b1000;
reg o1, o2,
always @(posedge i_clk or negedge rst_n)
if(!rst_n) begin
state &= IDLE;
{o1, o2, err} &= 3'b000;
case(state)
IDLE: begin
if(!i1) begin
{o1, o2, err} &= 3'b000;
state &= IDLE;
if(i1 & i2) begin
{o1, o2, err} &= 3'b100;
state &= S1;
if(i1 & !i2) begin
{o1, o2, err} &= 3'b111;
state &= ERROR;
if(!i2) begin
{o1, o2, err} &= 3'b100;
state &= S1;
if(i1 & i2) begin
{o1, o2, err} &= 3'b010;
state &= S2;
if(!i1 & i2) begin
{o1, o2, err} &= 3'b111;
state &= ERROR;
if(i2) begin
{o1, o2, err} &= 3'b010;
state &= S2;
if(i1 & !i2) begin
{o1, o2, err} &= 3'b000;
state &= IDLE;
if(!i1 & !i2) begin
{o1, o2, err} &= 3'b111;
state &= ERROR;
ERROR: begin
if(i1) begin
{o1, o2, err} &= 3'b111;
state &= ERROR;
if(!i1) begin
{o1, o2, err} &= 3'b000;
state &= IDLE;
default:begin
{o1, o2, err} &= 3'b000;
state &= IDLE;
// 两段式状态机
module style2_fsm(i_clk, rst_n, i1, i2, o1, o2, err);
input i_clk, rst_n, i1, i2;
output o1, o2,
parameter [3:0] IDLE = 4'b0001,
= 4'b0010,
= 4'b0100,
ERROR= 4'b1000;
reg o1, o2,
reg [3:0] curr_state, next_
always @(posedge i_clk or negedge rst_n) begin
if(!rst_n)
curr_state &= IDLE;
curr_state &= next_
always @(curr_state or i1 or i2) begin
case(curr_state)
IDLE: begin
if(!i1) begin
next_state = IDLE;
if(i1 & i2) begin
next_state = S1;
if(i1 & !i2) begin
ERROR_OUT;
next_state = ERROR;
if(!i2) begin
next_state = S1;
if(!i1 & i2) begin
ERROR_OUT;
next_state = ERROR;
if(i1 & i2) begin
next_state = S2;
if(i2) begin
next_state = S2;
if(i1 & !i2) begin
next_state = IDLE;
if(!i1 & !i2) begin
ERROR_OUT;
next_state = ERROR;
ERROR: begin
if(i1) begin
ERROR_OUT;
next_state = ERROR;
if(!i1) begin
next_state = IDLE;
default:begin
next_state &= IDLE;
task IDLE_OUT;
{o1, o2, err} = 3'b000;
task S1_OUT;
{o1, o2, err} = 3'b100;
task S2_OUT;
{o1, o2, err} = 3'b010;
task ERROR_OUT;
{o1, o2, err} = 3'b111;
// 三段式状态机
module style3_fsm(i_clk, rst_n, i1, i2, o1, o2, err);
input i_clk, rst_n, i1, i2;
output o1, o2,
parameter [3:0] IDLE = 4'b0001,
= 4'b0010,
= 4'b0100,
ERROR= 4'b1000;
reg o1, o2,
reg [3:0] curr_state, next_
always @(posedge i_clk or negedge rst_n)
if(!rst_n)
curr_state &= IDLE;
curr_state &= next_
always @(curr_state or i1 or i2)
case(curr_state)
IDLE: begin
next_state = IDLE;
if(i1 & i2) next_state = S1;
if(i1 & !i2) next_state = ERROR;
next_state = S1;
if(i1 & i2) next_state = S2;
if(!i1 & i2) next_state = ERROR;
next_state = S2;
if(i1 & !i2) next_state = IDLE;
if(!i1 & !i2) next_state = ERROR;
ERROR: begin
next_state = ERROR;
next_state = IDLE;
default:begin
next_state = IDLE; // 不加这个default项 输出会一直是000!!!
always @(posedge i_clk or negedge rst_n)
if(!rst_n)
{o1, o2, err} &= 3'b000;
else begin
case(next_state)
IDLE: {o1, o2, err} &= 3'b000;
S1: {o1, o2, err} &= 3'b100;
S2: {o1, o2, err} &= 3'b010;
ERROR: {o1, o2, err} &= 3'b111;
default:{o1, o2, err} &= 3'b000;//不加这个default 复位前信号都为不定值X
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:191053次
积分:5611
积分:5611
排名:第3757名
原创:121篇
转载:21篇
评论:72条
**************************************
欢迎大家一起交流、探索,共同进步!
原创文章,转载请注明出处!
交流范围:嵌入式、Linux、图像处理等。
**************************************最好写成一个总的状态机,下面带多个小的状态机。每个状态机都不要有太多状态。
UID979234&帖子17&精华0&积分0&资产0 信元&发贴收入85 信元&推广收入0 信元&附件收入0 信元&下载支出166 信元&阅读权限10&在线时间14 小时&注册时间&最后登录&
这个问题好,求指导啊
UID3786&帖子424&精华0&积分17493&资产17493 信元&发贴收入2085 信元&推广收入0 信元&附件收入5 信元&下载支出1626 信元&阅读权限120&在线时间629 小时&注册时间&最后登录&
最好写成一个总的状态机,下面带多个小的状态机。每个状态机都不要有太多状态。
tigerjade 发表于
& &赞这位。。。
UID989186&帖子660&精华1&积分29574&资产29574 信元&发贴收入4350 信元&推广收入0 信元&附件收入2801 信元&下载支出1467 信元&阅读权限80&在线时间1304 小时&注册时间&最后登录&
UID583402&帖子98&精华0&积分2026&资产2026 信元&发贴收入505 信元&推广收入207 信元&附件收入1412 信元&下载支出640 信元&阅读权限50&在线时间56 小时&注册时间&最后登录&
分为小的功能模块,然后每个功能模块用fsm实现。
UID1229484&帖子24&精华0&积分163&资产163 信元&发贴收入135 信元&推广收入0 信元&附件收入0 信元&下载支出32 信元&阅读权限10&在线时间9 小时&注册时间&最后登录&
三段式状态机,先画好状态转移图,其他都好说。复杂的,最好是自顶向下来设计
UID420407&帖子650&精华0&积分949&资产949 信元&发贴收入3300 信元&推广收入0 信元&附件收入596 信元&下载支出3075 信元&阅读权限30&在线时间453 小时&注册时间&最后登录&
赞总控状态机,下设分段状态机
UID965677&帖子187&精华0&积分8170&资产8170 信元&发贴收入1000 信元&推广收入0 信元&附件收入0 信元&下载支出770 信元&阅读权限50&在线时间514 小时&注册时间&最后登录&
同问啊,思路大概也明白,但有的时候当需要判断的控制变量比较多的时候,对速度的影响还是很大的,这方面不知道有什么比较好的办法
UID1177736&帖子107&精华0&积分2931&资产2931 信元&发贴收入720 信元&推广收入0 信元&附件收入0 信元&下载支出399 信元&阅读权限50&在线时间324 小时&注册时间&最后登录&
& &为什么要用三段式状态机?
[通过 QQ、MSN 分享给朋友]
欢迎访问 TI SLL(信号链)专区您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
基于FPGA的采样状态机的设计与仿真本科毕业论文鸵.doc 34页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
需要金币:300 &&
基于FPGA的采样状态机的设计与仿真本科毕业论文鸵.doc
你可能关注的文档:
··········
··········
南京林业大学本科毕业设计(论文)题目:基于FPGA的采样状态机的设计与仿真学院:机械电子工程学院专业:测控技术与仪器学号:学生姓名:万海洋指导教师:黄石红职称:副教授二O一一年5月24日 摘要采样是数字系统设计中的重要环节,而传统的A/D器件采样多是用CPU或单片机完成的。这些方法编程简单,但控制周期长,速度慢。而有限状态机(FiniteStateMachine,FSM)在数字系统设计中应用十分广泛,随着电子技术日新月异的发展。大规模系统与电路的出现,传统的手工设计状态机已经不可能,而基于FPGA的VHDL语言描述状态机是大势所趋。基于FPGA语言描述的硬件设计,能够充分利用A/D采样的速度快的高性能,有效提高工作效率与精度。关键词:EDAVHDLFPGA采样状态机数码管显示AbstractDigitalsamplingisanimportantpartofsystemdesign,andtraditionalA/DsamplingdevicewithaCPUormicrocontrollermostlycompleted.Thesemethodsaresimpletoprogram,butthecontrolcycleislongandslow.TheFSM(FiniteStateMachine,FSM)inthedesignofdigitalsystemsiswidelyused,withtherapiddevelopmentofelectronictechnology.Theemergenceoflarge-scalesystemsandcircuits,thetraditionalmanualdesignstatemachineshavebeenimpossible,andFPGA-basedVHDLlanguagetodescribethestatemachineisageneraltrend.FPGA-basedhardwaredescriptionlanguagedesignedtotakefulladvantageofA/Dsamplingspeed,high-performance,higherefficiencyandaccuracy. Keywords:EDAVHDLFPGAstatemachinedigitaldisplay第一章:绪论 11.1研究目的及意义: 11.2国内外同类研究概况: 11.3研究内容: 2第二章:EDA技术及其开发工具简介 32.1EDA技术简介 32.2Quartus简介 32.3设计的基本逻辑门例子 42.4本章小结 6第三章:VHDL语言基础 73.1VHDL语言简介 73.2VHDL语言设计例子 73.3本章小结 8第四章:FPGA基础 94.1CPLD分类 94.2FPGA简介 94.3本章小结 11第四章:有限状态机的基本概念 125.1有限状态机设计硬件的优势 125.2有限状态机的设计的一个代码例子 125.3状态机的时序逻辑进程 135.4 本章小结 14第五章:基于FPGA的采样状态机 156.1设计总体思路 156.2采样模块的设计 156.2.1AD0809的整体功能说明 156.2.20809的引脚功能说明 166.2.3AD0809的VHDL语言说明 176.3分频模块 196.4显示模块 196.5程序及仿真 206.5.1程序 206.5.2仿真及原理图 276.6本章小结 28总结 29致谢 30参考文献 31 第一章:绪论1.1研究目的及意义:从小型电子系统到大规模电路系统设计中,状态机是最典型、应用最广泛的时序电路模块,如何设计一个稳定可靠的状态机是我们必须面对的问题.传统的状态机设计方法复杂,首先要进行繁琐的状态化简,状态分配,状态编码,然后求输出与激励函数,最后画时序图或波形图。而利用VHDL硬件设计描述语言设计状态机,只需利用状态转移图进行状态机的描述即可。且由于状态机能构成性能良好的同步时序逻辑模块,能够做到结构相对简单,设计方案相对固定。而基于FPGA的FSM设计使用同步时序方式设计,提高设计的稳定性,消除毛刺。通过VHDL语言的描述,不仅仅便于阅读,理解,维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。1.2国内外同类研究概况:在国外,目前利用EDA技术设计电路已成为主流,其中,Verilog公司开发的VerilogHDL作为当今国际主流的HDL语言,在芯片的前端设计中有着广泛的应用。而最具代表性的是美国国防部开发的VHDL语言。国内外利用VHDL语言设计状态机例子有很多,因为大部分数字系统都可以分为控制单元和数据单元两个部分,控制单元的主体是一个状态机,它接收外部信
正在加载中,请稍后...21ic官方微信 -->
最新搜索:
您现在的位置是: > > >
推荐星级:
已有 209171 个资源
学习fpga很有用,供初学者设计状态机参考。用分下载的,现在免分分享给大家!~
部分文件列表
fpga中有限状态机.pdf
该用户分享的资料
该资料最近下载的用户您的位置: &
FPGA设计中状态机稳定问题的研究
优质期刊推荐

我要回帖

更多关于 格力冰箱 的文章

 

随机推荐