有限状态机HDL模板
逻辑设计, 顾名思义, 只要理清了 逻辑 和 时序, 剩下的设计只是做填空题而已。
下面给出了有限状态机的标准设计,分别为 VHDL 和 Verilog 代码
1 有限状态机

2 VHDL模板一
library IEEE;
use ieee.std_logic_1164.all; --! 1) 端口定义
entity <entity_name> is
port
(
DIN : in <data_type>;
RST : in std_logic;
CLK : in std_logic;
DOUT : out <data_type>
);
end <entity_name>; --! 2) 状态定义
architecture <arch_name> of <entity_name> is type state is (IDLE, ST1, ST2, ...);
signal c_state, n_state : state; begin --! 3) 时序逻辑
pfsmsyn: process (rst, clk)
begin
if (rst = '') then
c_state <= IDLE;
elsif (clk'event and clk='') then
c_state <= n_state;
endif;
end process; --! 4) 组合逻辑
pfsmlogic: process (din, c_state)
begin
case c_state is
when IDLE =>
if (din = ...) then
dout <= <value>; -- 输出
c_state <= state1; -- 状态
else ...
end if;
when ST1 =>
... ...
... ...
... ...
when others =>
... ... end case;
end process; end <arch_name>;
3 Verilog模板一
// 1) 端口声明
module fsm(clk, rst, ctrl, dout);
input clk, rst, ctrl;
output [n-:] dout; // n 取决于输出值的位数
reg [n-:] dout; // 2) 状态定义
parameter IDLE = , ST1 = , ST2 = , ST3 = , ....;
reg [m-:] c_state, n_state; // m 取决于‘“状态”数量的位数 // 3) 时序逻辑
always @ (posedge clk or posedge rst)
begin: SEQ
if (rst)
c_state = IDLE;
else
c_state = n_state;
end // 4) 组合逻辑
module @ (ctrl or c_state)
begin: COMB
case (c_state)
IDLE: begin
dout = <value0>;
n_state = ST1;
end
ST1: begin
dout = <value1>;
n_state = ST2;
end
ST2:
. . . . . .
. . . . . .
. . . . . .
endcase
end endmodule
参考资料:
<Circuit Design with VHDL> chapter 8 State Machines
<HDL Chip Design>
有限状态机HDL模板的更多相关文章
- 基于Unity有限状态机框架
这个框架是Unity wiki上的框架.网址:http://wiki.unity3d.com/index.php/Finite_State_Machine 这就相当于是“模板”吧,自己写的代码,写啥都 ...
- 基于Verilog HDL整数乘法器设计与仿真验证
基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...
- 有限状态机FSM(自动售报机Verilog实现)
有限状态机FSM(自动售报机Verilog实现) FSM 状态机就是一种能够描述具有逻辑顺序和时序顺序事件的方法. 状态机有两大类:Mealy型和Moore型. Moore型状态机的输出只与当前状态有 ...
- 如何高效的编写Verilog HDL——进阶版
博主之前写过一篇文章来谈论如何高效的编写Verlog HDL——菜鸟版,在其中主要强调了使用Notepad++来编写Verilog HDL语言的便捷性,为什么说是菜鸟版呢,因为对于新手来说,在还没有熟 ...
- gVim编辑器 模板篇
上文介绍了gVim的常用操作,这次总结一下我自己常用的模板. 安装和配置好gVim后,在Program Files (x86)\Vim目录下有个“_vimrc”文件,双击选择gVim软件打开,在里面添 ...
- html5引擎开发 -- 引擎消息中心和有限状态机 - 初步整理 一
一 什么是有限状态机 FSM (finite-state machine),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型.他对于逻辑以及 ...
- 转载.怎样在Quartus II中转化HDL文件为bsf文件?
步骤1 新建或打开Quartus II工程,用QII自带文本编辑器打开HDL文件. 图1 用QII自带的文本编辑器打开HDL文件 步骤2 选择File>Create / Update>Cr ...
- 算法复习——网络流模板(ssoj)
题目: 题目描述 有 n(0<n<=1000)个点,m(0<m<=1000)条边,每条边有个流量 h(0<=h<35000),求从点 start 到点 end 的最 ...
- win7+vim搭建+verilog HDL IDE
参考地址:http://www.huangdc.com/421 参考文章为2016年,部分更新贴于文章内了 安装下载vim vim在win下叫gvim,下载地址:https://www.vim.org ...
随机推荐
- spring注解配置启动过程
最近看起spring源码,突然想知道没有web.xml的配置,spring是怎么通过一个继承于AbstractAnnotationConfigDispatcherServletInitializer的 ...
- javascript indexOf startWith
判断字符串是否以XX开头 1.切割转换 var str = "ababaa",tags = jquery.trim(str); 2. indexOf方法运行 !tags.i ...
- 类库LinqToExcel的介绍
LinqToExcel是一个.net framework平台下开源项目,它主要实现了LINQ的语法查询Excel电子表格.类型之前的LINQToXXX如果你是LINQ语法糖爱好者那最适 ...
- ASP.NET WebAPI 13 Filter
Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是Actionr的执行注入额外的逻辑,以达到横切注入的目的. IFilter 在WebAPI中所以的Filter都实现了IFilter ...
- eclipse:File->New没有Android Application Project的解决办法
我的Eclipse版本是:Kepler Service Release 1,截图: 解决步骤: 1.单击Window,选择Customize Perspective,如图: 2.勾选Android A ...
- SQL Server Merge语句的使用
Merge关键字在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插 ...
- 【转】Android Studio中通过快捷键来提取提取方法
今天来给大家介绍一个非常有用的Studio Tips,有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再放在一个单独的方法里,通常我们的做法是复制粘贴,现在我来教给大家一个非常简洁 ...
- Android自定义控件之轮播图控件
背景 最近要做一个轮播图的效果,网上看了几篇文章,基本上都能找到实现,效果还挺不错,但是在写的时候感觉每次都要单独去重新在Activity里写一堆代码.于是自己封装了一下.本篇轮播图实现原理原文出处: ...
- Android Small插件化框架解读——Activity注册和生命周期
通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特 ...
- Swift面向对象基础(上)——Swift中的类和结构体(下)
学习来自<极客学院> import Foundation class User { var name:String var age:Int init(name:String,age:Int ...