实验三时序逻辑电路的VHDL设计
一、实验目的与要求
1、目的
(1)熟悉VHDL语言的编程方法
(2)学会利用VHDL语言设计实现时序逻辑功能器件的逻辑功能。
(3)总结体会VHDL语言的编程技巧方法
2、要求
(1)调试程序要记录调试过程中出现的问题及解决办法;
(2)给出每个问题的算法或画出流程图;
(3)编写程序要规范、正确,上机调试过程和结果要有记录,并注意调试程序集成环境的掌握及应用,不断积累编程及调试经验;
(4)做完实验后给出本实验的实验报告。
二、实验设备、环境
PII以上计算机,装有QuartusII软件
三、方法与步骤
(一)教师简单回顾所需知识并演示较一个简单功能的实现过程。
1、简单回顾组合逻辑电路的特点及常用逻辑功能器件的功能
2、回顾QuartusII的VHDL操作步骤
3、以JKFF为例,重点演示该时序逻辑单元的VHDL设计过程。
(1)JKFF的参考VHDL源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY JK_FF IS
PORT(J,K:IN STD_LOGIC;
CLK:IN STD_LOGIC;
Q:OUT STD_LOGIC);
END JK_FF;
ARCHITECTURE A OF JK_FF IS
SIGNAL QTMP:STD_LOGIC;
SIGNAL J_K:STD_LOGIC_VECTOR(0 TO 1);
BEGIN
J_K<=J&K;
PROCESS(CLK,J_K)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
CASE J_K IS
WHEN "00"=>NULL;
WHEN "01"=>QTMP<='0';
WHEN "10"=>QTMP<='1';
WHEN "11"=>QTMP<=NOT QTMP;
WHEN OTHERS=>NULL;
END CASE;
END IF;
END PROCESS;
Q<=QTMP;
END A;
四、实验过程、内容、数据处理及分析
按照设计选题编写简单程序
1、可供选择进行设计的时序逻辑电路如下,要求规定课时内至少完成2种逻辑电路的设计。
设计对象选择:各类基本触发器、各种功能的计数器、各种功能的移位寄存器。
(1)1位计数器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity countbasic is
port(clk:in std_logic;
q:buffer std_logic_vector(7 downto 0));
end countbasic;
architecture a of countbasic is
begin
process(clk)
variable qtmp:std_logic_vector(7 downto 0);
begin
if clk'event and clk='1' then
qtmp:=qtmp+1;
end if;
q<=qtmp;
end process;
end a;
(2)移位寄存器
library ieee;
use ieee.std_logic_1164.all;
entity shifter is
port ( data:in std_logic_vector(7 downto 0 );
shift_left:in std_logic;
shift_right:in std_logic;
clk:in std_logic;
reset:in std_logic;
mode:in std_logic_vector(1 downto 0);
qout: buffer std_logic_vector(7 downto 0)); end shifter;
architecture a of shifter is
begin
process
begin
wait until (rising_edge(clk));
if (reset='1') then qout<="00000000";
else case mode is
when "01" =>
qout<=shift_right&qout(7 downto 1);
when "10" =>
qout<=qout(6 downto 0)&shift_left;
when "11" =>qout<=data;
when others=>null;
end case;
end if;
end process;
end a;
对所编写的VHDL程序进行软件仿真,直到仿真结果满足功能要求。
1、功能仿真。
2、选择某一型号器件后时序仿真。
记录正确的源程序与仿真波形。
五、实验结论与问题讨论
1、使用PROCESS时敏感信号的使用原则有哪些?
答:敏感信号的值改变时都必需完成某一功能行为,其参数表需列出用于启动本进程可读入的信号名(当有WAIT语句时例外)。
2、用VHDL描述时钟边沿有哪些方法?比较各自的特点。
答:⑴ wait until (rising_edce(clk))
⑵if clk'event and clk='1'
3、记录、讨论实验过程遇到的问题以及解决的方法。
六、实验心得
通过本次实验,我熟悉了VHDL语言的编程方法,并掌握VHDL语言设计实现时序逻辑功能器件的逻辑功能及敏感信号的使用。