文章简介
个人学习总结4 - Verilog最基础部分
个人向!!!
状态机是Verilog常用的内容,某些面试也会涉及到手撕FSM。
参考:数字逻辑基础与Verilog设计(英文原书第3版)McGrawHill Education
参考:机械工业出版社中文翻译版 - 国外电子与电气工程技术丛书
参考:清华大学出版社 - 数字IC设计入门
此文章包括Moore FSM和Mealy FSM两种状态机的编写,Testbench与仿真
个人NTU在读,欢迎指正
基本运算符、基本语法、基本模块编写与仿真可见之前的文章 :)
目录
1. Moore型状态机
- Moore型:每个状态自带输出,即输出只和状态有关,外部的输入只能控制状态转换。
Verilog代码
module test1
(
input clk, rst_n, W, A,
output reg sensor, motor,
output reg [1:0] state
);
//各状态通常定义为本地参数,采用格雷码
localparam IDLE = 2'b00, DETECT = 2'b01, EXECUTION = 2'b11;
//定义当前态和下一态
reg [1:0] next_state;
//状态机本身>>>
//第 1 段,时序逻辑转换状态-----------------
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
state <= IDLE;
else
state <= next_state;
end
//第 2 段,状态转换条件---------------------
always @(*)
begin
case(state)
IDLE:
begin
if(W == 0)
next_state = IDLE;
else if(A == 1)
next_state = DETECT;
else
next_state = IDLE;
end
DETECT:
begin
if(W == 0)
next_state = IDLE;
else if(A == 1)
next_state = EXECUTION;
else
next_state = DETECT;
end