逻辑设计, 顾名思义, 只要理清了 逻辑 和 时序, 剩下的设计只是做填空题而已。

下面给出了有限状态机的标准设计,分别为 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>

最新文章

  1. 【随笔】mvc使用forms身份验证实现登陆
  2. C# Winform 界面中各控件随着窗口大小变化
  3. Iterator&amp;Vector应用实例
  4. mv命令(转)
  5. String,StringBuffer,StringBuilder三者区别
  6. virtualenv -- python虚拟沙盒(linux版本)
  7. Dede cms文章内容管理系统安全漏洞!如何有效防止DEDE织梦系统被挂木马安全设置
  8. php 实现树形结构
  9. VB连接Mysql数据库
  10. AWK 介绍
  11. js智能提示代码
  12. GCC的使用(编译,链接,运行)
  13. css3新增的background属性
  14. Linux - 函数的栈帧
  15. 【django基础补充之URL,视图,模版】
  16. 时序数据库InfluxDB安装及使用
  17. 错误: H.264 bitstream malformed, no startcode found,
  18. 利用 html js判断 客户端是否安装了某个app 安装了就打开 否则跳转到gp
  19. yii2解决资源插件路径不对应问题
  20. linux下 /usr/bin/ld: 找不到 -ldhnetsdk的解决方法

热门文章

  1. [moka同学笔记]yii2.0缓存
  2. flask-uploads扩展的使用笔记
  3. Linux Shell系列教程之(十三)Shell分支语句case … esac教程
  4. Visual Studio 2013下JSON可视化工具
  5. ASP.NET Web API 路由
  6. jquery 监控文本框键盘事件(回车事件),附常用keycode值。
  7. ASP.NET中UEditor使用
  8. SharePoint 自定义WebPart之间的连接
  9. Android 5中不同效果的Toast
  10. 记录一个调了半天的问题:java.lang.SecurityException: Permission denied (missing INTERNET permission?)