数字系统设计与VHDL课程大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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