实验一 实用计数器的VHDL设计

更新时间:2023-10-08 17:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 实用计数器的VHDL设计

一. 实验目的

熟悉quartusII的VHDL文本设计流程全过程,学习计数器的设计,仿真,进一步了解异步的概念。

二. 实验原理

实用的D触发器除含有时钟端CLK外,还含有异步清零端CLR和时钟使能端ENA。这里的异步并非时序逻辑的异步,而是指独立于时钟控制的复位控制端,在任何时候,只要CLR=’1’,此时D触发器的输出端即可清零,与时钟信号无关。

三. 程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS

PORT(CLK,RST,EN,LOAD:IN STD_LOGIC; DATA : IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC); END CNT10;

ARCHITECTURE BEHAV OF CNT10 IS BEGIN

PROCESS(CLK,RST,EN,LOAD)

VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

IF RST='0' THEN Q :=(OTHERS=>'0'); ELSIF CLK'EVENT AND CLK='1' THEN IF EN='1' THEN

IF(LOAD='0') THEN Q:= DATA; ELSE IF Q<9 THEN Q:=Q+1; ELSE Q:=(OTHERS=>'0'); END IF; END IF; END IF; END IF;

IF Q=\ ELSE COUT<='0'; END IF; DOUT <=Q; END PROCESS; END BEHAV;

四. 程序分析

该程序的进程语句中含有两个独立的IF语句。第一个IF语句是非完整性条件语句,因而将产生计数器时序电路;第二个IF语句产生一个纯组合逻辑的多路选择器。

五. RTL电路图

六. 工作时序图

通过对上图的观察可知:

(1) 当计数器使能EN为高电平时允许计数;RST低电平时计数器

被清零。

(2) 图中出现的加载信号LOAD由于是同步加载控制信号,其第一

个负脉冲恰好在CLK的上升沿处,故将5加载于计数器,此后由5到9,出现了第一个进位脉冲。由于LOAD第二个负脉冲未在CLK上升沿处,故没有发生加载操作,而第3,第4个负脉冲都出现了加载操作,这是因为它们都处于CLK上升沿处。

实验二 LPM计数器模块使用方法

一. 实验目的

熟悉调用quartusII中的LPM计数器,掌握流程的设置以及时序仿真。

二. 实验原理

掌握LPM计数器的调用方法,流程的测试,同类宏模块的一般使用方法及不同特性的仿真测试方法。

三. 设计过程

(1)LMP_COUNTER计数器模块文本调用

实验三 基于LPM的流水线乘法累加器设计

一.实验目的

熟悉调用quartusII中的LPM计数器,掌握流程的设置以及时序仿真。通过一个八位流水线乘法累加器的实例介绍顶层原理图工程,VHDL文本描述和宏功能块为原理图元件的输入和设计方法。

二.实验原理

通过TOOLS中的MegaWizard Plug- In Manager命令分别生成LPM加法器模块,乘法模块及寄存器模块。最后有序的将他们连接在一起构成八位乘法累加器顶层文件。

三.设计过程

(1)LPM加法器模块设置调用

begin

adda<='0'; lock_t<=lock; com:process(cs,eoc) begin case cs is when

s0=>ale<='0';

start<='0';oe<='0';lock<='0';next_state<=s1; when

s1=>ale<='1';

start<='1';oe<='0';lock<='0';next_state<=s2; when s2=>ale<='0'; start<='0';oe<='0';lock<='0'; if (eoc='1') then next_state<=s3; else next_state<=s2; end if; when

s3=>ale<='0';

start<='0';oe<='1';lock<='0';next_state<=s4; when

s4=>ale<='0';

start<='0';oe<='1';lock<='1';next_state<=s0; when

others=>ale<='0';

start<='0';oe<='0';lock<='0';next_state<=s0; end case; end process com;

reg:process(clk,rst) begin if rst='1' then cs<=s0;

elsif clk'event and clk='1' then cs<=next_state; end if;

end process reg;

latch1:process(lock) begin

if lock='1' and lock'event then regl<=d; end if; end process latch1; q<=regl; end behav;

实验九 序列检测器之状态机设计

一.实验目的

1、进一步熟悉和掌握Quartus软件的各模块功能的使用方法。 2、加深对VHDL语言的了解,熟悉VHDL语言的语法特点,深刻了解Quartus软件仿真中出现的各种问题并能加以解决。 3、学习使用和查看状态转换图。

二.实验原理

状态机用于序列检测器的设计比之其他方法更能显示其优越性。序列检测器可用于一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。

三.设计程序(见附录) 四.设计过程及结果分析

(1)产生的symbol

(2)时序波形图

(3)状态图

五. 附录

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY SCHK IS

PORT (DIN,CLK,RST:IN STD_LOGIC; SOUT:OUT STD_LOGIC); END SCHK;

ARCHITECTURE behav OF SCHK IS

TYPE states IS(s0,s1,s2,s3,s4,s5,s6,s7,s8); SIGNAL ST,NST: states :=s0; BEGIN

COM:PROCESS(ST,DIN) BEGIN CASE ST IS

WHEN s0=> IF DIN='1' THEN NST <=s1; ELSE NST<=s0; END IF;

WHEN s1=> IF DIN='1' THEN NST <=s2; ELSE NST<=s0; END IF; WHEN s2=> IF DIN='0' THEN NST <=s3; ELSE NST<=s0; END IF; WHEN s3=> IF DIN='1' THEN NST <=s4; ELSE NST<=s0; END IF; WHEN s4=> IF DIN='0' THEN NST <=s5; ELSE NST<=s0; END IF; WHEN s5=> IF DIN='0' THEN NST <=s6; ELSE NST<=s0; END IF; WHEN s6=> IF DIN='1' THEN NST <=s7; ELSE NST<=s0; END IF; WHEN s7=> IF DIN='1' THEN NST <=s8; ELSE NST<=s0; END IF; WHEN s8=> IF DIN='0' THEN NST <=s3; ELSE NST<=s0; END IF; WHEN OTHERS=>NST<=s0; END CASE; END PROCESS;

REG:PROCESS(CLK,RST) BEGIN IF RST='1' THEN ST<=s0; ELSIF CLK'EVENT AND CLK='1' THEN ST<=NST; END IF; END PROCESS REG;

SOUT<='1' WHEN ST=s8 ELSE '0'; END behav;

三.设计结果及分析

(1)生成symbol

(2)时序波形图

通过分析波形,进一步了解状态机的工作特性。需要注意,reset信号是低电平有效的,而clk是上升沿有效的,所以reset有效脉冲后的第一个时钟脉冲是第二个clk脉冲,第三个脉冲的上升沿后,现态c_st即进入状态S1.同时输出8,即“1000”。

(3)状态图

四.程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY FSM_EXP IS

PORT (CLK,reset :IN STD_LOGIC;

state_inputs :IN STD_LOGIC_VECTOR(0 TO 1); comb_outputs :OUT INTEGER RANGE 0 TO 15); END FSM_EXP;

ARCHITECTURE behav OF FSM_EXP IS TYPE FSM_ST IS (s0,s1,s2,s3,s4); SIGNAL c_st,next_state:FSM_ST; BEGIN

REG:PROCESS (reset,clk) BEGIN IF reset='0' THEN c_st<=s0;

ELSIF CLK='1' AND CLK'EVENT THEN c_st <=next_state; END IF; END PROCESS REG;

COM:PROCESS ( c_st,state_inputs) BEGIN CASE c_st IS

WHEN s0=> comb_outputs <=5;

IF state_inputs =\ ELSE next_state <=S1;END IF; WHEN s1=> comb_outputs <=8;

IF state_inputs =\ ELSE next_state <=S2;END IF; WHEN s2=> comb_outputs <=12;

IF state_inputs =\

ELSE next_state <=S3;END IF; WHEN s3=> comb_outputs <=14;

IF state_inputs =\ ELSE next_state <=S4;END IF;

WHEN s4=> comb_outputs <=9;next_state <=S0; WHEN OTHERS=> next_state <=S0; END case; END PROCESS COM; END behav;

实验八 ADC采样控制设计及多进程结构状态机

一.实验目的

1、进一步熟悉和掌握Quartus软件的各模块功能的使用方法。 2、加深对VHDL语言的了解,熟悉VHDL语言的语法特点,深刻了解Quartus软件仿真中出现的各种问题并能加以解决。 3、学习使用和查看状态转换图

二. 实验原理

本设计中的组合过程可以分为两个组合进程:一个负责状态译码和状态转换,另一个负责对外控制信号输出,从而构成一个三进程结构的有限状态机,其功能与前者一样,但程序结构更加清晰,功能分工更加明确。Moore型状态机的输出仅为当前状态的函数,这类状态机在你输入发生变化时还必须等待时钟的到来,时钟使状态发生变化时才

导致输出的变化,所以比Mealy机要多等待一个时钟周期。

三. 设计程序

见附录

四. 设计结果及分析

(1)生成symbol

(2)时序波形图

上图显示了一个完整的采样周期。复位信号后即进入状态s0,第二个时钟上升沿后,状态机进入状态s1(即cs=s1),由start、ale发出启动采样和地址选通的控制信号。之后,eoc由高电平变为低电平,0809的8位数据输出端呈现高阻态“ZZ”。在状态s2,等待clk数个时钟周期之后,eoc变为高电平,表示转述结束。

(3)状态图

五.附录

library ieee;

use ieee.std_logic_1164.all; entity ADC0809 is

port(d:in std_logic_vector(7 downto 0); clk,rst:in std_logic; eoc :in std_logic; ale :out std_logic; start,oe:out std_logic; adda,lock_t:out std_logic;

q :out std_logic_vector(7 downto 0)); end ADC0809;

architecture behav of ADC0809 is type states is(s0,s1,s2,s3,s4); signal cs,next_state:states:=s0;

signal regl :std_logic_vector(7 downto 0); signal lock :std_logic;

本文来源:https://www.bwwdw.com/article/cryf.html

Top