FPGA学习(第7节)-Verilog状态机(状态按条件切换)
来源:互联网 发布:mac查看cad图纸的软件 编辑:程序博客网 时间:2024/05/18 16:16
好的设计思路,扎实的设计基础是Verilog设计电路的重点。
之前我们学习了Verilog计数器设计
计数器学习链接:http://blog.csdn.net/fengyuwuzu0519/article/details/72568727
这一节来看状态机设计。
一、状态机设计要点
1、概述
(2)状态机的转移图
(3)结构:
(4)设计标准
(5)状态机三段设计方法
第一:
第二:
第三:
(6)三段状态机设计注意点
二、Verilog实现状态机练习题
(1)简单的状态切换
实现思路:三段
代码
module exercise37(clk,rst_n,en,state_c);parameter STATE_WID = 2;parameter IDLE = 2'b00;parameter S1 = 2'b01;parameter S2 = 2'b10;input clk;input rst_n;input en;output [STATE_WID-1:0] state_c; reg [STATE_WID-1:0] state_c;reg [STATE_WID-1:0] state_n;always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin state_c<=IDLE; end else begin state_c<=state_n; endendalways @(*)begin case(state_c) IDLE:begin if(en==1'b1)begin state_n=S1; end else begin state_n=IDLE; end end S1:begin if(en==1'b1)begin state_n=S2; end else begin state_n=S1; end end S2:begin if(en==1'b1)begin state_n=IDLE; end else begin state_n=S2; end end default:begin state_n=state_c; end endcaseendendmodule(2)根据条件切换状态
代码实现:
module state2(clk,rst_n,en,state_c);parameter STATE_WID = 2;parameter IDLE = 2'b00;parameter S1 = 2'b01;parameter S2 = 2'b10;input clk;input rst_n;input en;output [STATE_WID-1:0] state_c; reg [STATE_WID-1:0] state_c;reg [STATE_WID-1:0] state_n;always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin state_c<=IDLE; end else begin state_c<=state_n; endendalways @(*)begin case(state_c) IDLE:begin if(en==1'b1)begin state_n=S1; end else begin state_n=IDLE; end end S1:begin if(count==4)begin state_n=S2; end else begin state_n=S1; end end S2:begin if(count==6)begin state_n=IDLE; end else begin state_n=S2; end end default:begin state_n=state_c; end endcaseendalways @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin count <= 0; end else if(state_c==S1)begin if(count==4) count <= 0; else count <= count + 1; end else if(state_c==S2)begin if(count==6) count <= 0; else count <= count + 1; end else begin count <= 0; endendendmodule
(3)状态机实现流水灯
module led(clk,rst_n,led); input clk ; input rst_n ; output reg [3:0]led ; reg [1:0] state_c; reg [1:0] state_n;parameter IDLE = 2'b00; parameter S1 = 2'b01; parameter S2 = 2'b10; reg [31:0] count; always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin state_c<=IDLE; end else begin state_c<=state_n; end end always @(*)begin case(state_c) IDLE:begin if(count==49999999)begin state_n=S1; end else begin state_n=IDLE; end end S1:begin if(count==49999999)begin state_n=S2; end else begin state_n=S1; end end S2:begin if(count==49999999)begin state_n=IDLE; end else begin state_n=S2; end end default:begin state_n=state_c; end endcase end always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin led <= 4'b1111; end else if(state_c==S1)begin led=4'b0011; end else if(state_c==S2)begin led=4'b1100; end else begin led <= 4'b1111; end end always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin count <= 0; end else begin if(count==49999999) count <= 0; else count <= count + 1; end end endmodule
阅读全文
1 0
- FPGA学习(第7节)-Verilog状态机(状态按条件切换)
- FPGA学习(第9节)-Verilog设计电路大串讲(误区+组合逻辑+时序逻辑+状态机设计)
- FPGA学习(第3节)-Verilog实现LED流水灯+基础入门语法+Modelsim仿真技巧+计数器+状态机+分频
- FPGA之verilog第一天学习(00011101序列产生器)
- Verilog、FPGA学习(一)
- 【FPGA】Verilog状态机设计
- 【FPGA】Verilog状态机设计
- FPGA学习(第6节)-Verilog计数器(实现流水灯+实现数码管秒表)
- FPGA学习(第8节)-Verilog设计电路的时序要点及时序仿真
- FPGA 学习之路(八)状态机
- 状态机(二):Verilog状态机实现
- FPGA学习(第10节)-模块的例化-Verilog层次化设计实现LED流水灯
- FPGA之verilog学习第一天(时分秒数字时钟)
- verilog状态机学习笔记
- FPGA从零开始-Verilog语法学习笔记(一)
- FPGA学习笔记(一)Verilog语法基础
- FPGA学习笔记 Verilog HDL语句(基础)
- FPGA学习(第5节)-看电路图写出Verilog代码(乘法运算+自加一+模块实例化等)
- 07数据库设计
- Android Studio 默认keystore 以及自定义keystore
- 上传问题之AttributeError: '_socketobject' object has no attribute 'set_tlsext_host_name'
- 关于近些日子的一些问题小结
- 08关联查询(多表查询)
- FPGA学习(第7节)-Verilog状态机(状态按条件切换)
- 软件测试(Software testing)
- 20、包含min函数的栈
- Oracle存储过程
- 线程互斥与线程同步
- Spring的bean的继承
- 09存储过程
- 用C语言实现通讯录文件存储的版本
- Ant打包脚本