基于VHDL数控分频器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、设计任务与要求 (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、有显示功能,显示当前的分频比,即,输入的二进制数的大小。
总体框图
设计思路:数控分频器用计数值可并行预置的加法器设计完成,当在输入端给定不同输入数据时将对输入的时钟信号有不同的分频比。把输入端输入的八位二进
制数直接通过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芯片
。
此次设计实验采用ALTERA公司的cyclone系列的FPGA芯片EP1C12,设计和仿真采用ALTERA公司的QUARTUS II软件,EP1C12各项参数参照上表。
Cyclone的性能特性
(1)、新的可编程体系结构,实现低成本设计。
(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、数控分频器
dv f inst
clk
d[7..0]f out
图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
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译码器
bin2bcd
din[7..0]bcd[9..0]
inst1
图3 BCD译码器逻辑符号