时序运算模块的VHDL设计 时序电路的结构与特点 内部含有存储器件(触发器、锁存器); 信号变化受时钟控制; 通常采用状态变化进行描述;

Slides:



Advertisements
Similar presentations
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Advertisements

什么是SOPC: SOPC是英文System On a Programmable Chip的缩写,称为片上可编程系统。SOPC将传统的EDA技术、计算机系统、嵌入式系统、数字信号处理等融为一体,综合了各自的优势,且在结构上形成一块芯片。 为什么用SOPC:SOPC是现代电子技术和电子系统设计的发展趋势,建立了电子系统设计的新模式。用户利用SOPC开发平台,自行设计高速、高性能的DSP处理器、特定功能的CPU及其外围接口电路,创建结构最为简洁的电子系统。
《 E D A 技 术》 课 程 教 学 讲授:伍宗富 湖南文理学院电气与信息工程学院 2017年3月2日星期四.
实验四 利用中规模芯片设计时序电路(二).
《 E D A 技 术》 课 程 教 学 讲授:伍宗富 湖南文理学院电气与信息工程学院 2017年3月19日星期日.
第4章 VHDL设计初步.
第五章 触发器 5.1 概述(掌握触发器基本概念) 5.2 SR锁存器(掌握基本结构及动作特点)
Chapter 5 Sequential Logic Circuit
数字逻辑单元设计 何宾
Beginner VHDL Training Class VHDL初学者入门
EPF10K10TI144-4晶片燒錄.
第三章 组合逻辑电路 第一节 组合电路的分析和设计 第二节 组合逻辑电路中的竞争与冒险 第三节 超高速集成电路硬件描述语言VHDL
題目:十六對一多工器 姓名:李國豪 學號:B
VHDL數位電路實習與專題設計 文魁資訊-UE301
时序电路 计数器分析及设计 刘鹏 浙江大学信息与电子工程学院 April 10, 2018 EE141
第四章 同步时序逻辑电路.
VHDL數位電路實習與專題設計 文魁資訊-UE301
8.9二进制振幅键控(ASK) 调制器与解调器设计
VHDL 硬體描述語言 數位電路設計實務 第四章 VHDL 的語言結構.
时序电路 计数器分析及设计 刘鹏 浙江大学信息与电子工程学院 March 31, 2016 EE141
VHDL 硬體描述語言 數位電路設計實務 第六章 函數副程序以及套件程式庫.
EDA原理及应用 何宾
EDA原理及应用 何宾
使用VHDL設計—4位元減法器 通訊一甲 B 楊穎穆.
EDA原理及应用 何宾
时序逻辑电路 -分析.
第九章 数字系统设计 数字系统设计概述 ASM图、MDS图以及 ASM图至MDS图的转换 数字密码引爆器系统设计 数字系统设计实例 小结.
欢迎参加VHDL培训 VHDL培训教程 浙江大学电子信息技术研究所 电子设计自动化(EDA)培训中心
使用VHDL設計—向上&向下計數器 通訊一甲 B 楊穎穆.
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
使用VHDL設計--Moore Machine
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
概述 一、基本要求 1. 有两个稳定的状态(0、1),以表示存储内容; 2. 能够接收、保存和输出信号。 二、现态和次态
第12章 图像边缘检测器的设计与分析 12.1 系统设计要求 12.2 系统设计方案 12.3 主要LPM原理图和VHDL源程序
第二章 Java语言基础.
第五章 VHDL设计基础 本章重点: 本章难点: VHDL程序结构 VHDL的基本数据类型 VHDL的基本描述语句 基本组合逻辑电路设计
14.2 时序逻辑电路的分析 概述 时序逻辑电路是由存储电路和组合逻辑电路共同组成的,它的输出状态不仅与输入有关,还与电路的过去状态有关,即具有存储功能。 输入信号 输出信号 输出方程 驱动方程 描述时序逻辑电路的三个方程 状态方程 存储电路的输入信号 时序逻辑电路构成框图 存储电路的输出信号.
第六章 VHDL设计共享.
第五章 VHDL主要描述语句.
移相正弦信号发生器设计 采用直接数字综合器DDS发生器的设计 原理:图1是此电路模型图
義守大學電機工程學系 陳慶瀚 第4章 VHDL Sequential語法 義守大學電機工程學系 陳慶瀚
使用VHDL設計—4位元ALU電路 通訊一甲 B 楊穎穆.
第一次上机安排 第六周 第七周 周一晚(提高1、2,通信001~012) 周二上(通信014~085) 周四上(通信086~154)
抢答器 设计一个2人抢答器。要求如下: 设计任务 1.两人抢答,先抢为有效,用发光二极 管显示是否抢到优先答题权。
8.4 ADC0809接口电路及程序设计.
数字电子技术 Digital Electronics Technology
计算机学院 数字逻辑实验的要求.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
时序逻辑电路 -分析.
设计示例一 用门级结构描述D触发器:.
數位邏輯設計 VHDL.
中等职业学校教学用书(电子技术专业) 《电工与电子技术基础》 任课教师:李凤琴 李鹏.
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
第九节 赋值运算符和赋值表达式.
实验六 触发器逻辑功能测试 一、实验目的 二、实验仪器 1、熟悉并掌握RS、D、JK触发器的构成、工作原理和 功能测试方法。
长春理工大学 电工电子实验教学中心 数字电路实验 数字电路实验室.
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
《数字电子技术基础》(第五版)教学课件 清华大学 阎石 王红
使用VHDL設計-8x1多工器 通訊一甲 B 楊穎穆.
第4章 触发器.
概述 一、基本要求 1. 有两个稳定的状态(0、1),以表示存储内容; 2. 能够接收、保存和输出信号。 二、现态和次态
第7章 VHDL设计应用实例 7.1 8位加法器的设计 7.2 分频电路 7.3 数字秒表的设计.
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2009年10月22日
FPGA有限状态机设计 王安然.
Programmable Logic System Design
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
第七章 基本逻辑电路设计.
Programmable Logic System Design
Presentation transcript:

时序运算模块的VHDL设计 时序电路的结构与特点 内部含有存储器件(触发器、锁存器); 信号变化受时钟控制; 通常采用状态变化进行描述; 采用进程进行设计;

同步时序电路的信号变化特点 同步时序电路以时钟信号为驱动; 电路内部信号的变化(或输出信号的变化)只发生在特定的时钟边沿; 设计要点: 时钟边沿的检测; 输出赋值的控制:是否改变、如何改变。

同步时序电路的时钟控制 采用进程描述可以有效控制执行条件,进程中的条件控制可以将时钟信号(clk)做为控制信号,只有当时钟信号变化时,进程才执行;在时钟条件不满足时,任何输入信号的变化对电路(进程)不起作用;

VHDL中的时钟检测方式 VHDL通常采用属性语句检测时钟边沿; 与时钟有关的属性语句: clk'event :boolean,clk有变化时为true; clk‘last_value:bit,clk在变化之前的值;注意:上述属性语句只能在子结构中应用(作为局部量)。

VHDL中的时钟检测方式 例:上升沿的检测: clk'event and clk='1' ; clk'event and clk'last_value='0' ; 在由上升沿导致的进程执行时,上述两个表达式的值都为true;而在由其他输入变化导致的进程执行时,上述表达式的值就是faith;

时序电路的基本单元设计 Latch:输出受时钟电平控制,在一段时间内可受输入变化影响发生而变化;(电平控制) flip-flop:输出只在时钟边沿时刻发生变化,输入信号变化不能直接导致输出变化;(边沿控制)

时序电路的基本单元设计 例:D latch的设计 p.678 表 8-4 process(clk,d) begin if clk='1' then q<=d; end if; end process; d和clk的任何变化都会导致进程执行; 仅当clk为1时,d的变化才会导致q的变化;

时序电路的基本单元设计 例:D flip-flop的设计:p.679 表8-6 process (clk,d ) begin if clk'event and clk='1' then q<=d; end if ; end process ; d和clk的任何变化都会导致进程执行; 只有在clk上升沿引发的进程执行中,d的变化才会导致q的变化;

时序电路的基本单元设计 触发沿选择与清零设置问题: process(clk,clr) begin if clr='1' then q<='0'; elsif clk'event and clk='1' then q<=d; end if; end process; 异步清零,上升沿触发;

时序电路的基本单元设计 触发沿选择与清零设置问题: process(clk,clr) begin if clk'event and clk='0' if clr='0' then q<='0'; else q<=d; end if; end process; 下降沿触发,同步清零;

时序电路的基本单元设计 采用wait语句进行时钟检测: process begin wait on clk; if clk='1' then q<=d; end if ; end process ;

时序电路的基本单元设计 采用wait语句进行时钟检测: process begin wait until clk='0'; q<=d; end process;

关于寄存器生成的控制问题 寄存器的作用是在输入信号变化时,保持输出信号不变;当程序设计中隐含这一要求时,就会在综合时引入寄存器; 寄存器只在满足一定条件时才允许改变输出值,因此只能通过条件判断语句才会引入寄存器;

关于寄存器生成的控制问题 例1:寄存器的引入 process(clk,d) begin if clk='1' then q<=d; else q<='0'; end if; end process;

关于寄存器生成的控制问题 例1:寄存器的引入 process(clk,d) begin if clk='1' then q<=d; else q<='0'; end if; end process;

关于寄存器生成的控制问题 例2:双输出D触发器的设计比较: library ieee;use ieee.std_logic_1164.all; entity vdffqqn is port (d,clk: in std_logic; q,qn: out std_logic); end vdffqqn; architecture beh of vdffqqn is signal qi:std_logic; begin process end beh;

关于寄存器生成的控制问题 例2:双输出D触发器的设计比较1: process(clk) begin if (clk'event and clk='1') then qi <= d; q <= qi; qn <= not qi; end if; end process;

关于寄存器生成的控制问题 例2:双输出D触发器的设计比较2: process(clk) begin if (clk'event and clk='1') then qi<=d; q<=d; qn<=not qi; end if; end process;

关于寄存器生成的控制问题 例2:双输出D触发器的设计比较3: process(clk) begin if (clk'event and clk='1') then q <= d; qn<= not d; end if; end process;

关于寄存器生成的控制问题 例2:双输出D触发器的设计比较4: process(clk) begin if (clk'event and clk='1') then qi<=d; end if; q<= qi; qn<= not qi; end process;

关于寄存器的设计准则 (1)一个进程中只引入一个寄存器(组);只含有一条时间测试语句;只对时间的一个边沿进行测试; (2)引入寄存器的优选语句应该是IF/THEN语句,因为该语句更容易控制寄存器的引入;在该语句中只应设置一条边沿测试描述分句;

关于寄存器的设计准则 (3)严格控制带时间测试语句的IF/THEN语句中赋值语句的数量,将不必要的语句放到该语句以外; (4)在各类条件控制语句中,注意控制条件的完整性,避免因漏掉条件而生成寄存器; (5)在过程中不能设计寄存器。

寄存器的设计实例 16位锁存寄存器设计 p.680 表8-8 带有时钟使能控制和输出三态控制; library ieee; use ieee.std_logic_1164.all;   entity kreg16 is port ( clk,clken,oe,clr: in std_logic; d:in std_logic_vector(1 to 16); q: out std_logic_vector(1 to 16)); end kreg16;

寄存器的设计实例 architecture beh of kreg16 is signal iq: std_logic_vector(1 to 16); begin process ( clk,clr,oe,iq) if clr='1' then iq<=(others=>'0');

寄存器的设计实例 elsif clk'event and clk='1' then if clken = '1' then iq<=d; end if; end if ; if oe='1' then q <= iq; else q<=(others=>'Z'); end if; end process ; end beh;

根据输出函数的形式,可以分为moore机和mealy机两类。 有限状态机FSM的设计 时序电路的结构与特点 根据输出函数的形式,可以分为moore机和mealy机两类。

Moore: y = f(s) Mealy: y = f(s0,x) 通常采用状态转换图表达电路信号的变化: Moore: y = f(s) Mealy: y = f(s0,x)

对每一个现态,利用选择语句,根据控制条件x决定转换次态; FSM的设计要点 定义枚举类型表达不同的状态特点; 设置信号表达现有状态和转换的状态; 对每一个现态,利用选择语句,根据控制条件x决定转换次态; 根据现态和x决定输出y。

状态转换图如下所示,要求设置reset控制,能直接使状态处于s0。 Moore机设计:例1 例1 简单的Moore状态机设计 状态转换图如下所示,要求设置reset控制,能直接使状态处于s0。

Moore机设计:例1 library ieee; use ieee.std_logic_1164.all; entity statmach is port(clk,input,reset: in std_logic; output: out std_logic); end statmach;

Moore机设计:例1 architecture beh of statmach is type state_type is (s0,s1); --采用枚举法设置状态 signal st: state_type; --表达当前的状态 begin process(clk) --设置时钟控制模块 if reset='1' then st<=s0;--异步复位 elsif clk'event and clk='1' then --边沿检测

output<='1' when st=s1 else'0'; Moore机设计:例1 case st is --根据现态决定下一状态 when s0 => st<=s1; when s1 => if input='1' then st<=s0; end if; end case; end process; output<='1' when st=s1 else'0'; --根据状态决定输出 end beh;

该状态机有5个状态,转换图如下所示:其中输入控制ID为4位二进制数,在图中表达为16进制数; Moore机设计:例2 例2 Moore状态机的设计 该状态机有5个状态,转换图如下所示:其中输入控制ID为4位二进制数,在图中表达为16进制数;

Moore机设计:例2 library ieee; use ieee.std_logic_1164.all; entity moore2 is port(clk,rst: in std_logic; id: in std_logic_vector(3 downto 0); y: out std_logic_vector(1 downto 0)); end moore2;

Moore机设计:例2 architecture beh of moore2 is signal st: std_logic_vector(2 downto 0);--状态表达 --各状态命名并根据输出的特点进行赋值 constant s0:std_logic_vector(2 downto 0):="000"; constant s1:std_logic_vector(2 downto 0):="010"; constant s2:std_logic_vector(2 downto 0):="011"; constant s3:std_logic_vector(2 downto 0):="110"; constant s4:std_logic_vector(2 downto 0):="111"; begin

Moore机设计:例2 process(clk,rst) --状态转移关系 begin if rst='1' then st<=s0; --异步复位 elsif clk'event and clk='1' then --时钟边沿判断 case st is when s0=> if id=x"3" then st<=s1; else st<=s0; end if; when s1=> st<=s2; when s2=> if id=x"7" then st<=s3; end if;

elsif id=x"9" then st<=s4; Moore机设计:例2 when s3=> if id=x"7" then st<=s0; elsif id=x"9" then st<=s4; end if; when s4=> if id=x"b" then st<=s0; end if; when others=>st<=s0; end case; end process; y<=st(1 downto 0); --输出方程 end beh;

Moore机设计:例3 例3 简单状态机设计( 教材7.4 /9.2.1) 初始态:z=0 连续2个触发沿A=1,则z=1; 例3 简单状态机设计( 教材7.4 /9.2.1) 初始态:z=0 连续2个触发沿A=1,则z=1; 若z=1且b=1, 则z保持1。

Moore机设计:例3 例3 简单状态机设计( 教材7.4 /9.2.1)

elsif a='1' then sreg<=a1; Moore机设计:例3 architecture beh of smexamp is type sreg_type is (init,a0,a1,ok0,ok1); signal sreg:sreg_type; begin process(clk) if clk'event and clk='1' then case sreg is when init => if a='0' then sreg<=a0; elsif a='1' then sreg<=a1; end if;

Moore机设计:例3 when a0 => if a='0' then sreg<=ok0; elsif a='1' then sreg<=a1; end if; when a1 => if a='0' then sreg<=a0; elsif a='1' then sreg<=ok1; when ok0 => if a='0' then sreg<=ok0; elsif a='1' and b='0' then sreg<=a1; elsif a='1' and b='1' then sreg<=ok1;

Moore机设计:例3 when ok1 => if a='0' and b='0' then sreg<=a0; elsif a='0' and b='1' then sreg<=ok0; elsif a='1' then sreg<=ok1; end if; when others =>sreg<=init; end case; end process;

with sreg select --根据状态决定输出 Moore机设计:例3 with sreg select --根据状态决定输出 z<= '0' when init|a0|a1, '1' when ok0|ok1, '0' when others; end beh; 综合结果如下:

Moore机设计:例4 通过对状态图的分析,可以简化: 使用1个寄存器专门存放触发时的输入a; 则状态可以减少到3个;结构也简化了。

Moore机设计:例4 architecture beh of smexamp is type sreg_type is (init,looking,ok); signal sreg:sreg_type; signal lasta:std_logic; begin process(clk) if clk'event and clk='1' then lasta<=a;

Moore机设计:例4 case sreg is when init => sreg<=looking; when looking => if a=lasta then sreg<=ok; else sreg<=looking; end if; when ok => if b='1' then sreg<=ok; elsif a=lasta then sreg<=ok; else sreg<=looking; when others =>sreg<=init; end case;

Moore机设计:例4 end if; end process; with sreg select z<= '1' when ok, '0' when others; end beh;