完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
` 本帖最后由 郑青松001 于 2014-3-14 14:29 编辑 前言: 首先,使用过FPGA/CPLD的人都知道想要在FPGA里面实现复杂的逻辑状态机是必不可少的,一个项目里面多个状态机是常有的事。当然,这里的前提是没有Nios嵌入式系统。 相信做过SPI或者其他SCI接口的AD芯片的朋友们都与到这样问题,对AD的配置是必不可少的,但是要是每次采集数据都进行PGA,MUX配置完全没有必要(当然读取AD数据的指令是必须的)。要是每次配置AD寄存器,在AD的采样率的范围内很难再提高读取数据的速度。那就得把配置寄存器浪费的时间去掉———合理运用状态机。 同时也适用于其他不用每次配置的逻辑,OK...废话不多说,直接上代码,有图有真相。 源文件 module test( clk, a, b, c ); input clk; output a,b,c; reg a,b,c; reg[4:0] flag_cnt; parameter s0=3'd0, s1=3'd1, s2=3'd2, s3=3'd3, s4=3'd4; reg[2:0] state; reg flag; always@(posedge clk) begin case(state) s0: begin state<=s2; c<=0; a<=0; b<=0; flag<=0; end s1: begin state<=s2; c<=0; a<=0; b<=0; end s2: begin if(!flag) begin flag<=1; a<=1; b<=0; state<=s3; end else begin state<=s3; b<=1; a<=0; end end s3: begin state<=s4; end s4: begin state<=s1; c<=1; end default: begin state<=s0; end endcase end endmodule 测试文件 `timescale 1ns/1ps module tb(); reg clk; wire a,b,c; always#(10) begin clk=~clk; end initial begin clk=0; end test_11 U_test_11( .clk (clk), .a (a), .b (b), .c (c) ); endmodule 状态机: 仿真: 续。。。。:代码很简单,重在于这种思想。同时也给大家分享个刚学FPGA的时候容易犯的错误。 部分代码--关键在于flag. reg flag; //刚开始学的是以为很多寄存器上电默认就是低电,其实关键还是得看综合工具综合出来的逻辑电路 always@(posedge clk) begin case(state) s0: begin state<=s1; c<=0; a<=0; b<=0; end s1:begin if(!flag) begin //以为一开始为低电平,判断完成 flag<=1; //执行一次 a<=1; b<=0; state<=s2; end else begin state<=s2; b<=1; a<=0; end end s2: begin state<=s3; end s3: begin state<=s0; c<=1; end default: begin state<=s0; end endcase end !!!!请初一看RTL视图上面的D触发器flag,输入的D接的是高电平,if(!flag)的状态是进不去的。 本着乐于分享的态度,发表一些个人的一点看法。同时也欢迎乐于分享的朋友加入FPGA/DSP高速设计交流群(374590107) http://url.cn/RVeC1C 后续每周五(偶尔可能有例外)将原创一些FPGA的一些IP核的使用(包括ALtera官方的以及opencore上面的开源IP),FPGA入门比较容易犯的错误,Dsp Builder的使用,nios II的使用以及其他方面,欢迎大家一起讨论学习。 第二期:1小时学会用FPGA实现FFT运算 https://bbs.elecfans.com/forum.ph ... 0047&fromuid=849251 (出处: 中国电子技术论坛) ` |
|
相关推荐
12 个讨论
|
|
好,最近一直在写状态机……学习学习
|
|
|
|
|
|
认真 学习了。以后跟着你学习了。
|
|
|
|
|
|
谢谢楼主分享!!!
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 06:59 , Processed in 0.662914 second(s), Total 61, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号