课程设计报告
题 目 用
VHDL 设计十六路彩灯控制器
课 程 名 称 创新电子系统设计 院 部 名 称 信息技术学院 专 业 电子信息工程 班 级 08电子信息工程(1)班 学 生 姓 名 学 号 课程设计地点 实验楼 课程设计学时 60学时 指 导 教 师
金陵科技学院教务处
一、课程设计目的与要求 (3)
二、课程设计的题目及内容 (3)
三、设计过程 (4)
3.1 模块设计 (4)
3.2时序制电路模块程序及器件原理图 (5)
3.3 显示模块电路程序及器件原理图 (6)
3.4 顶出模块设计程序及器件原理图 (8)
四、设计结果 (10)
(1)仿真波形图 (10)
①时序控制模块仿真波形: (10)
②显示模块仿真波形: (10)
③多路彩灯控制仿真波形: (10)
(2)管脚连接对应表 (11)
(3)硬件实物图 (11)
五、总结 (13)
一、课程设计目的与要求
“创新电子系统设计”课程是专业教学计划中设置的独立实践环节,其主要目的为加强对学生创新意识、创新精神和创新能力的培养,鼓励和倡导学生积极参加学科竞赛、课外科技和科研活动、创造发明活动和各类社会实践活动,提高学生综合素质,促进学生个性发展。
要求学生能在老师的指导下,自主完成一个较复杂综合电子系统设计与制作的全过程,或者通过参加各类各级和通信、电子相关课外科技活动及竞赛得到真正的实战训练。
二、课程设计的题目及内容
题目:用VHDL语言设计十六路彩灯控制器
内容:1.设计一个多路彩灯控制器,十六种彩灯能循环变化,有清零开关,可以变化彩灯闪动频率即是可以选择快慢两种节拍。
2.整个系统有三个输入信号,分别为控制快慢的信号OPT,复位清零信号CLR,输出信号是16路彩灯输出状态。系统框图如:
图 2.1.1 系统总体框图
3.主要模块组成:时序控制电路模块和显示电路模块,时序控制电路是根据输入信号的设置得到相应的输出信号,并将此信号作为显示电路的时钟信号;显示电路输入时钟信号的周期,有规律的输出设定的六种彩灯变化类型。
三、设计过程
3.1 模块设计
时序控制模块:CLK为输入时钟信号,电路在时钟上升沿变化;CLR为复位清零信号,高电平有效,一旦有效时,电路无条件的回到初始状态;OPT为频率快慢选择信号,低电平节奏快,高电平节奏慢;CLKOUT为输出信号,CLR 有效时输出为零,否则,随OPT信号的变化而改变。
我们假设时序控制电路所产生的控制时钟信号的快慢两种节奏分别为输入时钟信号频率的1/4和1/8,因而输出时钟控制信号可以通过对输入时钟的计数来获得。当opt为低电平时,输出没经过两个时钟周期进行翻转,实现四分频的快节奏;当opt为高电平时,输出每经过四个时钟周期进行翻转,实现把八分频的慢节奏。
显示控制电路的模块框图如图所示,输入信号clk和clr的定义与时序控制电路一样,输入信号led[15...0]能够循环输出16路彩灯16种不同状态的花型。对状态的所对应的彩灯输出花型定义如下:
S0:0000000000000000
S1:0001000100010001
S2:0010001000100010
S3:0011001100110011
S4:0100010001000100
S5:0101010101010101
S6:0110011001100110
S7:0111011101110111
S8:1000100010001000
S9:1001100110011001
S10:1010101010101010
S11:1011101110111011
S12:1100110011001100
S13:1101110111011101
S14:1110111011101110
S15 :1111111111111111
多路彩灯在多种花型之间的转换可以通过状态机实现,当复位信号clr有效时,彩灯恢复初始状态s0,否则,每个时钟周期,状态都将向下一个状态发生改变,并对应输出的花型,这里的时钟周期即时时序控制电路模块产生的输出信号,它根据opt信号的不同取值得到两种快慢不同的时钟频率。
图3.1.1 花型循环转变示意原理图3.2时序制电路模块程序及器件原理图
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity metronome is --定义实体
port(
clk: in std_logic; --时钟信号
clr: in std_logic; --复位信号
opt: in std_logic; --快慢控制信号
clkout: out std_logic --输出时钟信号
);
end metronome;
architecture rtl of metronome is
signal clk_tmp: std_logic;
signal counter: std_logic_vector(1 downto 0); --定义计数器begin
process(clk,clr,opt)
begin
if clr='1' then --清零clk_tmp<='0';
counter<="00";
elsif clk'event and clk='1' then
if opt='0' then --四分频,快节奏if counter="01" then
counter<="00";
clk_tmp<=not clk_tmp;
else
counter<=counter+'1';
end if;
else --八分频,慢节奏if counter="11" then
counter<="00";
clk_tmp<=not clk_tmp;
else
counter<=counter+'1';
end if;
end if;
end if;
end process;
clkout<=clk_tmp; --输出分频后的信号
end rtl;
图 3.2.1 时序控制原理图
3.3 显示模块电路程序及器件原理图
library ieee;
use ieee.std_logic_1164.all;
entity output is
port(
clk: in std_logic; --输入时钟信号
clr: in std_logic; --复位信号
led: out std_logic_vector(15 downto 0)); --彩灯输出
end output;
architecture rtl of output is
type states is --状态机状态列举(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15); signal state: states;
begin
process(clk,clr)
begin
if clr='1'then
state<=s0;
led<="0000000000000000";
elsif clk'event and clk='1'then
case state is
when s0=>
state<=s1;
when s1=>
state<=s2;
led<="0001000100010001";
when s2=>
state<=s3;
led<="0010001000100010";
when s3=>
state<=s4;
led<="0011001100110011";
when s4=>
state<=s5;
led<="0100010001000100";
when s5=>
state<=s6;
led<="0101010101010101";
when s6=>
state<=s7;
led<="0110011001100110";
when s7=>
state<=s8;
led<="0111011101110111";
when s8=>
state<=s9;
led<="1000100010001000";
when s9=>
state<=s10;
led<="1001100110011001";
when s10=>
state<=s11;
led<="1010101010101010";
when s11=>
state<=s12;
led<="1011101110111011";
when s12=>
state<=s13;
led<="1100110011001100";
when s13=>
state<=s14;
led<="1101110111011101";
when s14=>
state<=s15;
led<="1110111011101110";
when s15=>
state<=s1;
led<="1111111111111111";
end case;
end if;
end process;
end rtl;
图 3.3.1 显示模块器件图
3.4 顶出模块设计程序及器件原理图library ieee;
use ieee.std_logic_1164.all;
entity cotop is
port (
clk: in std_logic;
clr: in std_logic;
opt:in std_logic;
led: out std_logic_vector(15 downto 0)); --八路彩灯输出end colorled;
architecture rtl of colorled is
component metonome is --定义元件:时序控制电路port(
clk: in std_logic;
clr: in std_logic;
opt:in std_logic;
clkout: out std_logic);
end component metonome;
component output is --定义元件:显示电路port(
clk: in std_logic;
clr: in std_logic;
led: out std_logic_vector(7 downto 0));
end component output;
signal clk_tmp: std_logic;
begin
u1:metonome port map(clk,clr,opt,clk_tmp); --例化时序控制模块u2:output port map(clk_tmp,clr,led); --例化显示电路模块end rtl;
图3.4.1 顶出模块原理图
四、设计结果
(1)仿真波形图
①时序控制模块仿真波形:
图 4.1.1时序控制模块仿真波形
从图中可以看出,当复位信号为高电平时,电路时钟输出清零,当快慢信号OPT 为低电平时,时序控制电路四分频起作用,当快慢信号OPT为高电平时,时序控制电路八分频起作用,仿真结果符合电路要求。
②显示模块仿真波形:
图 4.1.2显示模块仿真波形
当复位信号有效时彩灯输出为零,否则,显示电路在十六种不同状态间转换。
③多路彩灯控制仿真波形:
图 4.1.3多路彩灯控制仿真波形
从图中可以看出当OPT为高电平时彩灯状态转换慢,为低电平时转换要快,当复位信号有效时,所用输出都清零。
(2)管脚连接对应表
图 4.2.1管脚连接对应表
(3)硬件实物图
图 4.3.1 硬件实物图
图 4.3.2 硬件实物图
五、总结
本次设计的课题是彩灯控制器的设计,当拿到这个课题的时候经过分析就知道关键是计数器和分频器的使用,分频的方法有很多种,对于同一种功能的实现,用VHDL可以采用多种方式进行描述,每种方式之间各有优劣,本次设计只采用了其中较简单的一种,应尽量用最简洁的语言写出所需功能的程序。
通过这次课程设计对EDA技术有了更进一步的熟悉,VHDL 语言和C语言等其他语言还是有很大的区别。VHDL是EDA技术的重要组成部分,其具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化、结构化设计方面,表现了强大的生命力和应用潜力。其主要的也是最大的优点就在于设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。在实际操作中发现设计和课本上的知识有很大联系,但又高于课本,一个简单的原理要把它应用以及和其他功能综合起来就有些困难。通过设计也巩固了我们的书本知识以及通过借阅书籍和上网查找资料,也丰富了自己对EDA的了解。
不过本次设计也存在一些不足,暴露了自己对EDA的掌握还有所欠缺。在设计过程中,分频分的太大,频率太小的话,频率太大的话,数码管显示速度太快,尝试分频时使用不同的脉冲信号,但没有成功。在反复调试中,最后还是成功了,但原理还不是很清楚。同时,在课程设计过程中通过与老师、同学的交流,也了解了他们对于这门技术的看法和今后这门技术的发展方向,也感谢老师对我设计的指导和同学对我的帮助。总的来说,这次设计还是有所收获的。