您的当前位置:首页正文

基于VHDL数控分频器设计

来源:九壹网
 目录

一、设计任务与要求………………………………………………………3 二、总体框图…………………………………………………………………3 三、选择器件…………………………………………………4 四、功能………………………………………………………5

1、数控分频器………………………………………………………………5 2、BCD译码器………………………………………………………………6 3、扫描器……………………………………………………………………11 4、3-8译码器………………………………………………………………13 5、7段数码管显示译码器…………………………………………………16

五、总体设计电路图…………………………………………19

1总体(顶层)电路原理图………………………………………………19 2仿真结果…………………………………………………………………19 3管脚分配图………………………………………………………………20 4.硬件连接情况……………………………………………………………20

六.心得体会…………………………………………………20

数控分频器设计

一、设计任务与要求

数控分频器的功能就是当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,以实现所需的输出频率。 基本功能:

1、实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。如输入10010000,即对输入的时钟信号进行144分频,如输入01001000,即对输入的时钟信号进行72 分频。

2、输出的波形应为占空比位50%的方波。

3、有显示功能,显示当前的分频比,即,输入的二进制数的大小。

二、总体框图 数控分 频器 输出波形 3—8译BCD译码器 扫描器 7段数码管显示译码器 码器

总体框图

设计思路:数控分频器用计数值可并行预置的加法器设计完成,当在输入端给定不同输入数据时将对输入的时钟信号有不同的分频比。把输入端输入的八位二进

2

制数直接通过BCD译码器转换为十位BCD码表示的十进制数,通过扫描器对3个数码管进行选通扫描,最后7段数码管显示译码器对选中数码管的赋值进行译码,并驱动数码管显示该数据。

模块的功能:

1、数控分频器:实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。如输入10010000,即对输入的时钟信号进行144分频。

2、BCD译码器:把输入端的8位2进制数转换成10位BCD码表示的十进制数。

3、扫描器:when “000”=>daout<=dout(3 downto 0);

when “001”=>daout<=dout(7 downto 4);

when “010”=>daout<=dout(3 downto 2)<=\"00\";

daout(1 downto 0)<=dout(9 downto 8);

when others=>null;

4、3-8译码器:当sel=0时,q=11111110;选择个位数码管亮。 当sel=1时,q=11111101;选择十位数码管亮。 当sel=2时,q=11111011;选择百位数码管亮。

5、7段数码管显示译码器:把BCD码表示的十进制数转换成驱动数码管显示的段信号,使数码管显示数字。

三、选择器件

1、装有QuartusII软件的计算机一台。

2、芯片:使用altera公司生产的Cyclone系列芯片,如EP1C12Q240C8芯片

Cyclone的配置器件 器件数量 配置器件 EP1C3 EPCS1 EPCS4 EPC2 EPC4 EPC8 EPC16 1 1 1 1 1 1 EP1C4 1 1 1 1 1 1 EP1C6 1 1 1 1 1 1 EP1C12 N/A 1 2 1 1 1 EP1C20 N/A 1 2 1 1 1 图2 Cyclone器件的配置器件。

此次设计实验采用ALTERA公司的cyclone系列的FPGA芯片EP1C12,设计和仿真采用ALTERA公司的QUARTUS II软件,EP1C12各项参数参照上表。 Cyclone的性能特性 (1)、新的可编程体系结构,实现低成本设计。

3

(2)、嵌入式存储器资源支持多种存储器应用和数字信号处理(DSP)实现 (3)、专用外部存储器接口电路,支持与DDR FCRAM和SDRAM器件以及SDR SDRAM存储器的连接。 (4)、支持串行总线和网络接口以及多种通信协议 片内和片外系统时序管理使用嵌入式PLL (5)、支持单端I/O标准和差分I/O技术,LVDS信号数据速率高达640Mbps。 (6)、处理功耗支持Nios II 系列嵌入式处理器 (7)、采用新的串行配置器件的低成本配置方案 (8)、Quartus II 软件OpenCore评估特性支持免费的IP功能评估 3、EDA实验箱一个。

4、下载接口是数字芯片的下载接口(JTAG)主要用于FPGA芯片的数据下载。 5、拨码开关。

6、7段数码管显示.

将七段数码管的输入,即四位二进制数译十进制的形式显示到数码管上,数码管的每段是高电平,即输出位1时对应的灯就亮,输出位出0灯就灭,根据灯亮的段读出数字。

四、功能模块

1、数控分频器

dvfclkd[7..0]fout

图1数控分频器逻辑符号

逻辑功能:用计数值可并行预置的加法计数器设计完成,当输入端输入的8位二进制数不同时,有不同的分频比。

VHDL程序

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity dvf is

port ( clk : in std_logic;

d : in std_logic_vector( 7 downto 0); fout :out std_logic ); end;

architecture one of dvf is signal full : std_logic; begin

p_reg: process(clk)

variable cnt8 : std_logic_vector(7 downto 0); begin

if clk'event and clk='1' then

4

inst

if cnt8= \"11111111\" then cnt8 := d; full <='1';

else cnt8 :=cnt8 + 1; full <= '0'; end if; end if;

end process p_reg ; p_div: process(full)

variable cnt2 : std_logic; begin

if full'event and full ='1' then cnt2 :=not cnt2;

if cnt2= '1' then fout<='1'; else fout<='0'; end if; end if;

end process p_div; end;

仿真结果:

图2 数控分频器仿真图 仿真分析:

波形仿真结果如上图所示,图中d[7..0]表示8位2进制输入端,fout为对时钟端的分频(大小与输入端2进制数大小相同)。

2、BCD译码器

bin2bcddin[7..0]bcd[9..0]inst1 图3 BCD译码器逻辑符号

5

逻辑功能:把0-255这256个用8位2进制数表示的十进制数转换成用10位BCD码表示的十进制数。

VHDL程序

library ieee;

use ieee.std_logic_1164.all; entity bin2bcd is

port(din:in std_logic_vector(7 downto 0); bcd:out std_logic_vector(9 downto 0) );

end bin2bcd;

architecture fun of bin2bcd is begin

process(din) begin

case din is

when \"00000000\"=>bcd<=\"0000000000\"; when \"00000001\"=>bcd<=\"0000000001\"; when \"00000010\"=>bcd<=\"0000000010\"; when \"00000011\"=>bcd<=\"0000000011\"; when \"00000100\"=>bcd<=\"0000000100\"; when \"00000101\"=>bcd<=\"0000000101\"; when \"00000110\"=>bcd<=\"0000000110\"; when \"00000111\"=>bcd<=\"0000000111\"; when \"00001000\"=>bcd<=\"0000001000\"; when \"00001001\"=>bcd<=\"0000001001\"; when \"00001010\"=>bcd<=\"0000010000\"; when \"00001011\"=>bcd<=\"0000010001\"; when \"00001100\"=>bcd<=\"0000010010\"; when \"00001101\"=>bcd<=\"0000010011\"; when \"00001110\"=>bcd<=\"0000010100\"; when \"00001111\"=>bcd<=\"0000010101\"; when \"00010000\"=>bcd<=\"0000010110\"; when \"00010001\"=>bcd<=\"0000010111\"; when \"00010010\"=>bcd<=\"0000011000\"; when \"00010011\"=>bcd<=\"0000011001\"; when \"00010100\"=>bcd<=\"0000100000\"; when \"00010101\"=>bcd<=\"0000100001\"; when \"00010110\"=>bcd<=\"0000100010\"; when \"00010111\"=>bcd<=\"0000100011\"; when \"00011000\"=>bcd<=\"0000100100\"; when \"00011001\"=>bcd<=\"0000100101\"; when \"00011010\"=>bcd<=\"0000100110\";

6

when \"00011011\"=>bcd<=\"0000100111\"; when \"00011100\"=>bcd<=\"0000101000\"; when \"00011101\"=>bcd<=\"0000101001\"; when \"00011110\"=>bcd<=\"0000110000\"; when \"00011111\"=>bcd<=\"0000110001\"; when \"00100000\"=>bcd<=\"0000110010\"; when \"00100001\"=>bcd<=\"0000110011\"; when \"00100010\"=>bcd<=\"0000110100\"; when \"00100011\"=>bcd<=\"0000110101\"; when \"00100100\"=>bcd<=\"0000110110\"; when \"00100101\"=>bcd<=\"0000110111\"; when \"00100110\"=>bcd<=\"0000111000\"; when \"00100111\"=>bcd<=\"0000111001\"; when \"00101000\"=>bcd<=\"0001000000\"; when \"00101001\"=>bcd<=\"0001000001\"; when \"00101010\"=>bcd<=\"0001000010\"; when \"00101011\"=>bcd<=\"0001000011\"; when \"00101100\"=>bcd<=\"0001000100\"; when \"00101101\"=>bcd<=\"0001000101\"; when \"00101110\"=>bcd<=\"0001000110\"; when \"00101111\"=>bcd<=\"0001000111\"; when \"00110000\"=>bcd<=\"0001001000\"; when \"00110001\"=>bcd<=\"0001001001\"; when \"00110010\"=>bcd<=\"0001010000\"; when \"00110011\"=>bcd<=\"0001010001\"; when \"00110100\"=>bcd<=\"0001010010\"; when \"00110101\"=>bcd<=\"0001010011\"; when \"00110110\"=>bcd<=\"0001010100\"; when \"00110111\"=>bcd<=\"0001010101\"; when \"00111000\"=>bcd<=\"0001010110\"; when \"00111001\"=>bcd<=\"0001010111\"; when \"00111010\"=>bcd<=\"0001011000\"; when \"00111011\"=>bcd<=\"0001011001\"; when \"00111100\"=>bcd<=\"0001100000\"; when \"00111101\"=>bcd<=\"0001100001\"; when \"00111110\"=>bcd<=\"0001100010\"; when \"00111111\"=>bcd<=\"0001100011\"; when \"01000000\"=>bcd<=\"0001100100\"; when \"01000001\"=>bcd<=\"0001100101\"; when \"01000010\"=>bcd<=\"0001100110\"; when \"01000011\"=>bcd<=\"0001100111\"; when \"01000100\"=>bcd<=\"0001101000\"; when \"01000101\"=>bcd<=\"0001101001\"; when \"01000110\"=>bcd<=\"0001110000\";

7

when \"01000111\"=>bcd<=\"0001110001\"; when \"01001000\"=>bcd<=\"0001110010\"; when \"01001001\"=>bcd<=\"0001110011\"; when \"01001010\"=>bcd<=\"0001110100\"; when \"01001011\"=>bcd<=\"0001110101\"; when \"01001100\"=>bcd<=\"0001110110\"; when \"01001101\"=>bcd<=\"0001110111\"; when \"01001110\"=>bcd<=\"0001111000\"; when \"01001111\"=>bcd<=\"0001111001\"; when \"01010000\"=>bcd<=\"0010000000\"; when \"01010001\"=>bcd<=\"0010000001\"; when \"01010010\"=>bcd<=\"0010000010\"; when \"01010011\"=>bcd<=\"0010000011\"; when \"01010100\"=>bcd<=\"0010000100\"; when \"01010101\"=>bcd<=\"0010000101\"; when \"01010110\"=>bcd<=\"0010000110\"; when \"01010111\"=>bcd<=\"0010000111\"; when \"01011000\"=>bcd<=\"0010001000\"; when \"01011001\"=>bcd<=\"0010001001\"; when \"01011010\"=>bcd<=\"0010010000\"; when \"01011011\"=>bcd<=\"0010010001\"; when \"01011100\"=>bcd<=\"0010010010\"; when \"01011101\"=>bcd<=\"0010010011\"; when \"01011110\"=>bcd<=\"0010010100\"; when \"01011111\"=>bcd<=\"0010010101\"; when \"01100000\"=>bcd<=\"0010010110\"; when \"01100001\"=>bcd<=\"0010010111\"; when \"01100010\"=>bcd<=\"0010011000\"; when \"01100011\"=>bcd<=\"0010011001\"; when \"01100100\"=>bcd<=\"0100000000\"; when \"01100101\"=>bcd<=\"0100000001\"; when \"01100110\"=>bcd<=\"0100000010\"; when \"01100111\"=>bcd<=\"0100000011\"; when \"01101000\"=>bcd<=\"0100000100\"; when \"01101001\"=>bcd<=\"0100000101\"; when \"01101010\"=>bcd<=\"0100000110\"; when \"01101011\"=>bcd<=\"0100000111\"; when \"01101100\"=>bcd<=\"0100001000\"; when \"01101101\"=>bcd<=\"0100001001\"; when \"01101110\"=>bcd<=\"0100010000\"; when \"01101111\"=>bcd<=\"0100010001\"; when \"01110000\"=>bcd<=\"0100010010\"; when \"01110001\"=>bcd<=\"0100010011\"; when \"01110010\"=>bcd<=\"0100010100\";

8

when \"01110011\"=>bcd<=\"0100010101\"; when \"01110100\"=>bcd<=\"0100010110\"; when \"01110101\"=>bcd<=\"0100010111\"; when \"01110110\"=>bcd<=\"0100011000\"; when \"01110111\"=>bcd<=\"0100011001\"; when \"01111000\"=>bcd<=\"0100100000\"; when \"01111001\"=>bcd<=\"0100100001\"; when \"01111010\"=>bcd<=\"0100100010\"; when \"01111011\"=>bcd<=\"0100100011\"; when \"01111100\"=>bcd<=\"0100100100\"; when \"01111101\"=>bcd<=\"0100100101\"; when \"01111110\"=>bcd<=\"0100100110\"; when \"01111111\"=>bcd<=\"0100100111\"; when \"10000000\"=>bcd<=\"0100101000\"; when \"10000001\"=>bcd<=\"0100101001\"; when \"10000010\"=>bcd<=\"0100110000\"; when \"10000011\"=>bcd<=\"0100110001\"; when \"10000100\"=>bcd<=\"0100110010\"; when \"10000101\"=>bcd<=\"0100110011\"; when \"10000110\"=>bcd<=\"0100110100\"; when \"10000111\"=>bcd<=\"0100110101\"; when \"10001000\"=>bcd<=\"0100110110\"; when \"10001001\"=>bcd<=\"0100110111\"; when \"10001010\"=>bcd<=\"0100111000\"; when \"10001011\"=>bcd<=\"0100111001\"; when \"10001100\"=>bcd<=\"0101000000\"; when \"10001101\"=>bcd<=\"0101000001\"; when \"10001110\"=>bcd<=\"0101000010\"; when \"10001111\"=>bcd<=\"0101000011\"; when \"10010000\"=>bcd<=\"0101000100\"; when \"10010001\"=>bcd<=\"0101000101\"; when \"10010010\"=>bcd<=\"0101000110\"; when \"10010011\"=>bcd<=\"0101000111\"; when \"10010100\"=>bcd<=\"0101001000\"; when \"10010101\"=>bcd<=\"0101001001\"; when \"10010110\"=>bcd<=\"0101010000\"; when \"10010111\"=>bcd<=\"0101010001\"; when \"10011000\"=>bcd<=\"0101010010\"; when \"10011001\"=>bcd<=\"0101010011\"; when \"10011010\"=>bcd<=\"0101010100\"; when \"10011011\"=>bcd<=\"0101010101\"; when \"10011100\"=>bcd<=\"0101010110\"; when \"10011101\"=>bcd<=\"0101010111\"; when \"10011110\"=>bcd<=\"0101011000\";

9

when \"10011111\"=>bcd<=\"0101011001\"; when \"10100000\"=>bcd<=\"0101100000\"; when \"10100001\"=>bcd<=\"0101100001\"; when \"10100010\"=>bcd<=\"0101100010\"; when \"10100011\"=>bcd<=\"0101100011\"; when \"10100100\"=>bcd<=\"0101100100\"; when \"10100101\"=>bcd<=\"0101100101\"; when \"10100110\"=>bcd<=\"0101100110\"; when \"10100111\"=>bcd<=\"0101100111\"; when \"10101000\"=>bcd<=\"0101101000\"; when \"10101001\"=>bcd<=\"0101101001\"; when \"10101010\"=>bcd<=\"0101110000\"; when \"10101011\"=>bcd<=\"0101110001\"; when \"10101100\"=>bcd<=\"0101110010\"; when \"10101101\"=>bcd<=\"0101110011\"; when \"10101110\"=>bcd<=\"0101110100\"; when \"10101111\"=>bcd<=\"0101110101\"; when \"10110000\"=>bcd<=\"0101110110\"; when \"10110001\"=>bcd<=\"0101110111\"; when \"10110010\"=>bcd<=\"0101111000\"; when \"10110011\"=>bcd<=\"0101111001\"; when \"10110100\"=>bcd<=\"0110000000\"; when \"10110101\"=>bcd<=\"0110000001\"; when \"10110110\"=>bcd<=\"0110000010\"; when \"10110111\"=>bcd<=\"0110000011\"; when \"10111000\"=>bcd<=\"0110000100\"; when \"10111001\"=>bcd<=\"0110000101\"; when \"10111010\"=>bcd<=\"0110000110\"; when \"10111011\"=>bcd<=\"0110000111\"; when \"10111100\"=>bcd<=\"0110001000\"; when \"10111101\"=>bcd<=\"0110001001\"; when \"10111110\"=>bcd<=\"0110010000\"; when \"10111111\"=>bcd<=\"0110010001\"; when \"11000000\"=>bcd<=\"0110010010\"; when \"11000001\"=>bcd<=\"0110010011\"; when \"11000010\"=>bcd<=\"0110010100\"; when \"11000011\"=>bcd<=\"0110010101\"; when \"11000100\"=>bcd<=\"0110010110\"; when \"11000101\"=>bcd<=\"0110010111\"; when \"11000110\"=>bcd<=\"0110011000\"; when \"11000111\"=>bcd<=\"0110011001\"; when \"11001000\"=>bcd<=\"0110000100\"; when \"11001001\"=>bcd<=\"0110000101\"; when \"11001010\"=>bcd<=\"0110000110\";

10

when \"11001011\"=>bcd<=\"0110000111\"; when \"11001100\"=>bcd<=\"0110001000\"; when \"11001101\"=>bcd<=\"0110001001\"; when \"11001110\"=>bcd<=\"0110010000\"; when \"11001111\"=>bcd<=\"0110010001\"; when \"11010000\"=>bcd<=\"0110010010\"; when \"11010001\"=>bcd<=\"0110010011\"; when \"11010010\"=>bcd<=\"0110010100\"; when \"11010011\"=>bcd<=\"0110010101\"; when \"11010100\"=>bcd<=\"0110010110\"; when \"11010101\"=>bcd<=\"0110010111\"; when \"11010110\"=>bcd<=\"0110011000\"; when \"11010111\"=>bcd<=\"0110011001\"; when \"11011000\"=>bcd<=\"1000000000\"; when \"11011001\"=>bcd<=\"1000000001\"; when \"11011010\"=>bcd<=\"1000000010\"; when \"11011011\"=>bcd<=\"1000000011\"; when \"11011100\"=>bcd<=\"1000000100\"; when \"11011101\"=>bcd<=\"1000000101\"; when \"11011110\"=>bcd<=\"1000000110\"; when \"11011111\"=>bcd<=\"1000000111\"; when \"11100000\"=>bcd<=\"1000001000\"; when \"11100001\"=>bcd<=\"1000001001\"; when \"11100010\"=>bcd<=\"1000010000\"; when \"11100011\"=>bcd<=\"1000010001\"; when \"11100100\"=>bcd<=\"1000010010\"; when \"11100101\"=>bcd<=\"1000010011\"; when \"11100110\"=>bcd<=\"1000010100\"; when \"11100111\"=>bcd<=\"1000010101\"; when \"11101000\"=>bcd<=\"1000010110\"; when \"11101001\"=>bcd<=\"1000010111\"; when \"11101010\"=>bcd<=\"1000011000\"; when \"11101011\"=>bcd<=\"1000011001\"; when \"11101100\"=>bcd<=\"1000100000\"; when \"11101101\"=>bcd<=\"1000100001\"; when \"11101110\"=>bcd<=\"1000100010\"; when \"11101111\"=>bcd<=\"1000100011\"; when \"11110000\"=>bcd<=\"1000100100\"; when \"11110001\"=>bcd<=\"1000100101\"; when \"11110010\"=>bcd<=\"1000100110\"; when \"11110011\"=>bcd<=\"1000100111\"; when \"11110100\"=>bcd<=\"1000101000\"; when \"11110101\"=>bcd<=\"1000101001\"; when \"11110110\"=>bcd<=\"1000110000\";

11

when \"11110111\"=>bcd<=\"1001000111\"; when \"11111000\"=>bcd<=\"1001001000\"; when \"11111001\"=>bcd<=\"1001001001\"; when \"11111010\"=>bcd<=\"1001010000\"; when \"11111011\"=>bcd<=\"1001010001\"; when \"11111100\"=>bcd<=\"1001010010\"; when \"11111101\"=>bcd<=\"1001010011\"; when \"11111110\"=>bcd<=\"1001010100\"; when \"11111111\"=>bcd<=\"1001010101\"; when others=>bcd<=null; end case; end process;

end architecture fun;

仿真结果

图4 BCD译码器仿真图 仿真分析:

仿真波形结果如上图所示din[7..0]为输入的8位2进制数,经译码器译码后转换为相应的BCD码。如:输入11111111,输出1001010101.仿真结果完全符合。

3、扫描器

12

SELTMECLK2DOUT[9..0]DAOUT[3..0]SEL[2..0]inst2 图5 扫描器逻辑符号

逻辑功能:通过输入端输入的10位BCD码表示的10进制数扫描决定数码管亮的个数,,然后再对4-7译码器的扫描使数码管显示出相应的输入数据。该扫描器在时钟端位上升沿时开始扫描。

VHDL程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY SELTME IS PORT(

CLK2:STD_LOGIC;

DOUT:IN STD_LOGIC_VECTOR(9 DOWNTO 0);

DAOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END;

ARCHITECTURE FUN OF SELTME IS

SIGNAL count: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN

SEL<=count; PROCESS(CLK2) BEGIN

IF(CLK2'EVENT AND CLK2='1')THEN IF(COUNT>=\"010\")THEN COUNT<=\"000\"; ELSE

COUNT<=COUNT+1; END IF; END IF;

CASE COUNT IS

WHEN \"000\"=>DAOUT<=DOUT(3 downto 0); WHEN \"001\"=>DAOUT<=DOUT(7 downto 4); WHEN \"010\"=>DAOUT(3 downto 2)<=\"00\";

DAOUT(1 DOWNTO 0)<=DOUT(9 DOWNTO 8);

13

WHEN OTHERS=>null; END CASE; END PROCESS; END FUN;

仿真结果:

图6 扫描器仿真图 仿真分析:

波形仿真结果如上图所示,波形图中的DOUT[9..0]为10位BCD码表示的十进制数,SEL[2..0]表示对数码管的选择,根据输入的数据选择数码管亮的个数,通过4-7译码器译码最后在数码管上显示出输入数据的10进制数的大小。 4、3-8译码器

decode3_8SEL[2..0]Q[7..0]inst3 图7 3—8译码器逻辑符号

表1 3—8译码器逻辑功能表 输入端sel 输出端q 000 11111110 001 11111101 010 11111011

14

VHDL程序

LIBRARY ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY decode3_8 IS

PORT(SEL:IN std_logic_vector(2 downto 0); Q:OUT std_logic_vector(7 downto 0)); END decode3_8;

ARCHITECTURE a OF decode3_8 IS BEGIN

Q<=\"11111110\"when sel=0 else \"11111101\"when sel=1 else \"11111011\"when sel=2 else \"11111111\"; END a;

仿真结果

图8 3—8译码器仿真图 仿真分析:

仿真波形结果如上图所示,波形图中sel[2..0]表示输入数据,经译码器译码后输出显示数据。3_8译码器的原理图的输出端为低电平有效,所以如输入为001时,输出为00000010.在电路中选择两个数码管亮。

5、7段数码管显示译码器

15

delednum[3..0]ABCDEFGDP 图9 7段数码管显示译码器逻辑符号

表2 7段数码管显示译码器逻辑功能表 十输入 输入/输出 进输出 制 —— D C B A  ̄  ̄ a b c d e f g 显LT RBI BI/RBO 示 0 1 1 0 0 0 0 1 on on on on on on off 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 x x x x x x x x x 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 off on on off off off off on on off on on off on on on on on off off on off on on off off on on on off on on off on on on off on on on on on on on on off off off off on on on on on on on on on on on off on on 1 2 3 4 5 6 7 8 9 inst4 VHDL程序

LIBRARY ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY deled IS

16

PORT(num:IN std_logic_vector(3 downto 0); A:OUT std_logic; B:OUT std_logic; C:OUT std_logic; D:OUT std_logic; E:OUT std_logic; F:OUT std_logic; G:OUT std_logic; DP:OUT std_logic); END deled;

ARCHITECTURE fun OF deled IS

signal led:std_logic_vector(6 downto 0); BEGIN

A<=led(6); B<=led(5); C<=led(4); D<=led(3); E<=led(2); F<=led(1); G<=led(0); DP<='0';

LED<=\"1111110\"WHEN NUM=\"0000\"ELSE \"0110000\"WHEN NUM=\"0001\"ELSE \"1101101\"WHEN NUM=\"0010\"ELSE \"1111001\"WHEN NUM=\"0011\"ELSE \"0110011\"WHEN NUM=\"0100\"ELSE \"1011011\"WHEN NUM=\"0101\"ELSE \"1011111\"WHEN NUM=\"0110\"ELSE \"1110000\"WHEN NUM=\"0111\"ELSE \"1111111\"WHEN NUM=\"1000\"ELSE \"1111011\"WHEN NUM=\"1001\"ELSE \"1110111\"WHEN NUM=\"1010\"ELSE \"0011111\"WHEN NUM=\"1011\"ELSE \"1001110\"WHEN NUM=\"1100\"ELSE \"0111101\"WHEN NUM=\"1101\"ELSE \"1001111\"WHEN NUM=\"1110\"ELSE \"1000111\"WHEN NUM=\"1111\"; END fun;

仿真结果:

17

图10 7段数码管显示译码器仿真图 仿真分析:

波形仿真结果如上图所示,图中num[3..0]表示输入的四位BCD码,经译码器译码,转化成能驱动数码管显示的驱动信号,最后在数码管上显出数字。如:输入为0001,经译码后输出0110000,最后在数码管上显示数据1.

五、总体设计电路图

1、总体(顶层)电路原理图。

说明:数控分频器用计数值可并行预置的加法器设计完成,当在输入端给定不同输入数据时将对输入的时钟信号有不同的分频比。把输入端输入的八位二进制数直接通过BCD译码器转换为十位BCD码表示的十进制数,通过扫描器对3个数码管进行选通扫描,最后7段数码管显示译码器对选中数码管的赋值进行译码,并驱动数码管显示该数据。

deleddvfnum[3..0]clkd[7..0]INPUTVCCINPUTVCCABCDEFGDPOUTPUTOUTPUTOUTPUTa1a2a3clkd[7..0]foutOUTPUTfoutOUTPUTOUTPUTOUTPUTOUTPUTa4a5a6a7instSELTMEbin2bcdCLK2din[7..0]bcd[9..0]DOUT[9..0]DAOUT[3..0]SEL[2..0]inst4inst2inst1decode3_8VCCvga0vga1OUTPUTSEL[2..0]Q[7..0]OUTPUTq[7..0]vga[3..0]inst3vga2vga3GND

图11 总体设计电路图

18

2、仿真结果

图12总体设计电路仿真图 仿真分析:

对设计的系统进行时序仿真分析,波形仿真结果如上图所示。波形图中的d[7..0]为输入的分频数值,q值为三个数码管位控制译码输入信号即8个输入状态与数控分频器系统所要显示的分频数据输出完全同步。通过FPGA芯片重新编码后送到3个数码管上,依次显示数控分频器系统的输出数据。该设计基本满足设计需求。

3、管脚分配图

图13管脚分配图

19

4、硬件的连接情况:

时钟端clk接到实验箱上对应的时钟端,8个数据输入端接到实验箱上IO9—IO16对应的拨码开关。

5、硬件验证情况

完成编程下载并在EDA实验装置上完成外围电路的搭建,运行系统可看到:随8个按键开关表示数据大小的变化,数码管显示数据发生变化,可显示的数据为0—255这256个数据。硬件测试的结果证明了设计的正确性和可行性。

六.心得体会

通过一个星期的课程设计,我受益颇深。从刚开始的无从下手到有点思路再

到建造起总体框架,我了解了知识的融会贯通,也把以前不熟悉的,不明白的知识弄清楚了,虽然过程艰辛,但当结果出来时自己有一种前所未有的满足感。 想想在设计过程中,自己一遍一遍往老师办公室跑,整天整天的泡在图书馆,把自己不懂得问题都弄明白;一晚上一晚上的熬夜,总结自己每一天的收获。这是对自己的一种历练,我喜欢这样的生活感受,在经过自己全力以赴的努力后完成了一件自己觉得不可能的事,这是对自己最大的满足,也是对自己最大的奖赏。这次我体会到了,当实验箱上的数码管随着我改变拨码开关而显示出不同的正确的数字时,我激动不已。我明白,不管是学习还是生活,问题再多也没有解决的办法多,只要我们肯努力,一定会完成好自己的任务 这次课程设计也让我对我所学专业有了进一步的了解,并且提高了我学习的兴趣,以后,我一定会好好学习我的专业知识,争取做出更多更好的设计。

20

因篇幅问题不能全部显示,请点此查看更多更全内容

Top