内容发布更新时间 : 2024/12/23 19:30:09星期一 下面是文章的全部内容请认真阅读。
六十进制计数器
一.实验目的
1.掌握文本与原理图相结合的层次设计方法。 2.掌握六十进制计数器设计。
二.实验仪器及设备
计算机、Quartus II。
三.实验原理
利用层次设计方法:
底层采用文本输入方法,设计十进制和六进制计数器; 顶层用原理图设计六十进制计数器。 以下是个模块的对应元件:
.
四.实验内容及注意事项
1.根据给定的元件符号,使用VHDL编写源代码。 2.层次设计,底层以文本形式设计六进制和十进制。
3.原理图的设计方法设计六十进制计数器。
4.仿真完成后,将顶成原理图文件转换为VHDL文本文件。 5.给出波形仿真。
6.对比若将cqi设置为信号后的仿真波形,进行分析。
注意:
1.VHDL描述十进制和六进制计数器时注意进位的输出。 2.顶层设计六十进制计数器的时候,注意线的选择。
(6进制vhdl文本)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count6 IS
PORT (clk,rst,en:IN STD_LOGIC;
cq:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); cout:OUT STD_LOGIC); END count6;
ARCHITECTURE behave OF count6 IS BEGIN
PROCESS(clk,rst,en)
VARIABLE cqi:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF rst='1' THEN cqi:=(OTHERS=>'0');cout<='0'; ELSIF (clk'EVENT and clk='1')then IF en='1' THEN
IF cqi<5 THEN cqi:=cqi+1;cout<='0'; ELSE cqi:=(others=>'0');cout<='1'; END IF; END IF; END IF; cq<=cqi;
END PROCESS; END behave;
六进制计数器的源程序count6(十进制计数器count10与此类似)
(10进制vhdl文本)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count10 IS
PORT(clk,rst,en:IN STD_LOGIC;
cq:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT:OUT STD_LOGIC); END count10;
ARCHITECTURE behave OF count10 IS BEGIN
PROCESS(clk,rst,en)
VARIABLE cqi:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF rst='1' THEN cqi:=(OTHERS=>'0');COUT<='0'; ELSIF(clk' EVENT and clk ='1') then IF en='1' THEN
IF cqi<9 THEN cqi:=cqi+1;cout<='0'; ELSE cqi:=(others=>'0');cout<='1'; END IF; END IF; END IF; cq<=cqi;
END PROCESS; END behave;
五.实验报告
1.将顶层原理图转换为VHDL文本。
(60进制vhdl文本)
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
ENTITY count60 IS PORT (
clk : IN STD_LOGIC; rst : IN STD_LOGIC; en : IN STD_LOGIC;
overflow : OUT STD_LOGIC;
high_cnt_val : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); low_cnt_val : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
END count60;
ARCHITECTURE bdf_type OF count60 IS
COMPONENT count10
PORT(clk : IN STD_LOGIC; rst : IN STD_LOGIC; en : IN STD_LOGIC; COUT : OUT STD_LOGIC;
cq : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );
END COMPONENT;
COMPONENT count6
PORT(clk : IN STD_LOGIC; rst : IN STD_LOGIC; en : IN STD_LOGIC; cout : OUT STD_LOGIC;
cq : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );