数字系统设计与VHDL课程大作业

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字系统设计与VHDL课程大作业

霓虹灯电路设计

学院:计算机科学与工程

班级:计算机科学与技术一班

学号:1305010126

姓名:唐艳香

组员:郑林升,袁博,唐艳香

实验内容:

1)使用平台上的8个七段数码管进行显示,即围绕平台上的8个数码管转圈;

2)要求同时显示的段数为1、2、3段可选;

3)可进行顺向、逆向显示(通过某一开关键进行选择);

4)按下复位键后,重新开始旋转;

5)多种点亮方式自选,如全亮等。

总体模块划分:

1)定义输入输出端;

2)由于只有一个主程序,所有模块都直接添加在里面。主程序中可看做复位,旋转方向,旋转速度,旋转块数的小程序结合;

3)建立波形图,进行仿真;

4)绑定引脚,下载程序进行测试;

5)修正小bug。

代码实现:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity water_lamp is

generic(n:integer:=60000);

port(clk_sys:in std_logic;

order:in std_logic;

k:in std_logic;

q:in std_logic;

num:in std_logic_vector(2 downto 0);

L:out std_logic_vector(7 downto 0);

LED:out std_logic_vector(7 downto 0)); end water_lamp;

architecture one of water_lamp is

signal cnt:integer range 0 to n;

signal cnt1:integer range 0 to n;

signal cnt2:integer range 0 to n;

signal clk_new:std_logic;

signal cnm:integer range 19 downto 0;

signal cnm0:integer range 19 downto 0;

signal clk_new1:std_logic;

signal clk_new2:std_logic_vector(0 to 1):="00"; begin

p1:process(clk_sys)

begin

if clk_sys'event and clk_sys='1' then

if cnt

cnt<=cnt+1;

else

cnt<=0;

clk_new<=not clk_new;

end if;

end if;

end process p1;

p2:process(clk_new)

variable LED_tmp:std_logic_vector(7 downto 0); begin

if clk_new'event and clk_new='1' then

if order='0'then

if cnm>0 then

cnm<=cnm-1;

else

cnm<=19;

end if;

else

if cnm<19 then

cnm<=cnm+1;

else

cnm<=0;

end if;

end if;

end if;

end process p2;

p3:process(cnm,num,clk_sys,cnt1,cnt2,clk_new2) begin

if num="001" then

cnm0<=cnm;

elsif num="011" then

if clk_sys'event and clk_sys='1'then

if cnt1

cnt1<=cnt1+1;

else

cnt1<=0;

clk_new1<=not clk_new1;

end if;

end if;

if clk_new1='0' then

else

if cnm=19 then

cnm0<=0;

else

cnm0<=cnm+1;

end if;

end if;

elsif num="111" then

if clk_sys'event and clk_sys='1'then if cnt2

cnt2<=cnt2+1;

else

cnt2<=0;

if clk_new2="00" then

clk_new2<="01";

cnm0<=cnm;

elsif clk_new2="01" then

clk_new2<="10";

if cnm=19 then

cnm0<=0;

else

相关文档
最新文档