2015~2016 学年第一学期
《数字电路与逻辑设计实验(下)》实验报告
题目:基于 CPLD 的简易洗衣机控制器的设计与实现
班 级: 学 号: 班内序号: 学生姓名:
一、设计课题的任务要求
任务要求:
基本要求:
1、 基于 CPLD 的简易洗衣机控制器 的工作步骤为洗涤、漂洗和脱水三个过程,工作
时间分别为:洗涤 30 秒(进 水 5 秒,洗衣 15 秒,排水 5 秒,甩干 5 秒),漂洗 25 秒(进水 5 秒,漂洗 10 秒, 排水 5 秒,甩干 5 秒),脱水 15 秒(排水 5 秒,甩干 10 秒);
2、 用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、 漂洗和脱水;E、洗涤、漂洗和脱水全过程; 3、 用发光二极管显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态
的工作时间,全部过程结束后,应有声音提示使用者,并保持在停止状态,直至再 次开始; 4、 用点阵动画显示洗衣机工作过程中进水、波轮或滚筒转动、排水和甩干等的工作情
况,四种工作情况的动画显示要有区别且尽可能的形象。 5、 用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留
的状态;
提高要求:
1、 三个过程的时间有多个选项供使用者选择。
2、 可以预约洗衣时间。
3、 自拟其它功能。
二、系统设计(包括设计思路、总体框图、分块设计)
A.设计思路:
本程序采用自顶向下的设计方法。先从所需要实现的功能入手,把整个洗衣机的程序分为分频(cp)模块,模式设置(fset)模块,控制(foption)模块和点阵模块(dianzhen)等分别实现,最后再合成一个整的程序。
B.设计过程::
1. 计算机编程:按照上述设计,用VHDL语言进行编程实现,并通过编译,观察资源使用情
况。
2. 系统仿真:通过仿真软件仿真,观察波形图,如果不对,对程序进行反复推敲修改. 3. 下载调试:将程序下载到实验板上,调试各功能看是否满足设计要求。
4. 修改程序:通过计算机仿真和下载调试,发现问题,返回原程序进行修改,再次进行下
载调试,直到成功为止。
C.总体框图:
防抖模块 时钟信号 模式设置模块 暂停模块 分频模块 控制模块 点阵模块 显示报警模块 点阵译码模块 D.状态转移图:
111[E] 100[A] 000[end/wait] 011[D] 010[B] 001[C]
E.分块设计:
分频模块:主要是从1MHZ的时钟,分出多个时钟,分别给控制器、模式选择模块(由
于设有防抖功能故需要加时钟)、数码管译码模块等其他模块用来控制显示或其他。
模式设置模块:主要功能是选择洗衣机的工作模式A ~ E。其中模式选择用按键来实现,
按键加入了防抖功能。按键一次表示A单洗涤,按键俩次表示B单漂洗,按键三次表示C单脱水,按键四次表示D漂洗+脱水,按键五次表示E洗涤+漂洗+脱水,再按键则跳回单洗涤过程,以此类推。并用3个LED灯来显示当前选择的模式。
控制模块:主要功能键开始键和暂停键,分别用来控制洗衣机相应的功能。暂停键按下,
洗衣过程暂停。洗衣完成会产生一个报警信号,蜂鸣器响起,提醒工作已经结束。
点阵模块和点阵译码模块:主要功能键为当洗衣机处于不同工作状态时,控制点阵显
示不同动画,不同动画分别对应进水、洗衣、漂洗、排水、甩干,使其工作状态一目了然。
显示模块:主要功能是译码显示洗衣机倒计时,以及将报警信号输出。 防抖模块:主要功能防止按键时模式选择混乱。
三、仿真波形及波形分析
分频模块仿真:在这里我选择了cp模块进行仿真,由于cp1中分频系数过高难以看
出准确仿真结果,我改用了较小的数字进行仿真,对代码段进行了如下修改—— IF(count=\ --49 count<=\
波形如下得到翻转后的新时钟信号:
防抖模块仿真:主要功能防止按键时模式选择混乱。波形如下所示,按下mode信号对应的按键能使mode0端口产生一个高电平脉冲,作用于控制模块。
模式设置模块仿真:模式设置模块选择洗衣机的工作模式A ~ E。输入一个时钟信号
和一个周期mode信号,能使status信号发生周期性地转移,实现洗衣机五种模式的选择。
点阵模块仿真:给一个时钟信号,当set信号分别为0000,0001,0011,0100,1111
时a0~a7分别输出对应变化的控制点阵图形的信号,不同动画分别对应进水、洗衣、漂洗、排水、甩干,使其工作状态一目了然。
四、功能说明及资源利用情况 A.功能说明:
? 下载完成后,电路板进入等待状态,点阵显示如图欢迎图像。数码管显示默认状态下洗
衣倒计时,此时可选择状态。
? 用一个按键可实现洗衣程
序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、 漂洗和脱水;E、洗涤、漂洗和脱水全过程;按一次按键实现一次相邻状态之间的转移。同时三个发光二极管亮灭分别显示不同状态。
? 拨下“开始”拨码开关
后洗衣机开始运转,数码管显示该运行状态下剩余时间。若此时按下“暂停”键,则洗衣暂停,再次按下“暂停”则洗衣继续。
? 此时点阵动态显示洗衣机的内部工作状态,进水、洗衣、漂洗、排水、甩干分别对应不
同动画。比如进水动画点阵显示是有水流灌入,洗衣机内水平面升高。
? 时间倒计归零之后,洗衣结束,点阵显示表示“OK”的动画,同时蜂鸣器警报响起。
? 由6个数码管分别显示模式选择,各种模式下时间的选择,倒计时时间。由于六个数
码管的8个输入端是并联在一起的,而其共阴极端是相互独立的。所以 采用多个数码管动态扫显示的原理和人的视觉停留误差,使扫描的频率大于50*6=300hz,循环点亮数码管,完成数码管的固定显示。
? 要求功能均已经实现。包括利用数码管来显示倒计时、模式的选择结果,利用发光二极
管指示灯来提示用户先择模式,利用点阵显示动态内部状态。
B.资源利用情况:
如下图一所示,为电路板的端口占用情况;图二为Quartus搭建的端口模拟图
五、故障及问题分析
a.
在编写模式设置模块时,起初没有考虑防抖模块的加入,导致按键不能准确选择模式,之后查找资料,加入防抖模块,成功解决该问题
b. 在起初设计的时候原想用拨码开关来实现暂停的控制,但在实践的时候发现不如按键来
的方便,思考了一下,进行了改动,后来在网上查了些资料,并加进了防抖程序,按键好用多了。
c. 点阵的动画显示也是经历了一个艰难的调试修改过程,经常显示的动画和所想的相差甚
远。最后通过向老师同学请教,查阅资料,一步步的得出了想要的结果.
六、总结和结论
其实在刚开始看到数电实验的选题时,我们小组都挺迷茫,怎么用一个小小的板子去实现一个大型家电的控制?感觉会很困难,没有头绪。加上学期只学习了简单的数电实验,只是一些比较抽象的信号处理,并没有涉及在综合性的与日常生活贴切的部分。而这次是进行复杂的综合实验设计。
我选的是常用的洗衣机。我认为洗衣机设计的难点主要是状态的设计和转移上,它有三个状态,但有5个模式,我采用循环计数的方法巧妙地将5个模式的选择用一个按键来实现。我采用3位2进制编码,分别为100,010,001,110,111来对应5个模式。开始设计时,
确实遇到了不少困难,VHDL的语法不熟练,各个模块的代码需要查阅相关资料才能顺利完成,比如说分频器,防抖模块,数码管显示模块等。我按照老师的指导,采用自顶向下的设计方法,在完成了流程图的设计后,逐步完成每个模块的代码,然后我采用元件例化的方法来将各个模块组合连接,一步步实践。
这次数电实验是我们所学数字电路的一次综合应用,不仅让我们回忆起了先前的一些知识,也督促我们去学习一些新的有关VHDL的知识,这个过程也大大锻炼了我们的学习能力。过程是复杂而艰辛的,但收益颇丰。最后真诚地感谢老师,感谢这次实验!
七、源代码【带注释】
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY washer IS PORT( modin:IN std_logic; clkin:IN std_logic; runin:IN std_logic; psin:IN std_logic;
selout:OUT std_logic_vector(6 downto 1); segout:OUT std_logic_vector(6 downto 0); o_sound:OUT std_logic;
status_out:OUT std_logic_vector(2 downto 0);
ROW : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); COL : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); end;
ARCHITECTURE behave OF washer IS COMPONENT foption PORT(
cp1:IN std_logic; cp2:IN std_logic; scp:IN std_logic;
status:IN std_logic_vector(2 downto 0); run:IN std_logic; ps:IN std_logic;
sel:OUT std_logic_vector(6 downto 1); seg:OUT std_logic_vector(6 downto 0); sound:OUT std_logic;
o_status:OUT std_logic_vector(2 downto 0); dianzhen:OUT std_logic_vector(3 downto 0) );
END COMPONENT; COMPONENT fset
PORT( clk:IN std_logic; run:IN std_logic; mode:IN std_logic;
status:OUT std_logic_vector(2 downto 0) );
END COMPONENT; COMPONENT display PORT(cl:IN std_logic; run:IN std_logic; sound:IN std_logic;
s_status:IN std_logic_vector(2 downto 0); o_status:IN std_logic_vector(2 downto 0); soundout:OUT std_logic;
statusout:OUT std_logic_vector(2 downto 0) );
END COMPONENT; COMPONENT cp PORT(
clk:IN std_logic; cp1:OUT std_logic; scp:OUT std_logic );
END COMPONENT; COMPONENT cp2 PORT(
clk:IN std_logic; cp2:OUT std_logic );
END COMPONENT; COMPONENT pause
PORT( run:IN std_logic; pause:IN std_logic; ps:OUT std_logic );
END COMPONENT; COMPONENT fxiaodou
PORT( clk:IN std_logic; mode:IN std_logic; rp:IN std_logic; modeO:OUT std_logic; rpO:OUT std_logic); END COMPONENT;
COMPONENT dianzhen
PORT( clk : IN STD_LOGIC;--to cp3
set : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
a0,a1,a2,a3,a4,a5,a6,a7 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT; COMPONENT cp3
PORT( clk:IN std_logic; cp3:OUT std_logic); END COMPONENT; COMPONENT cp4
PORT( clk:IN std_logic; cp4:OUT std_logic); END COMPONENT; COMPONENT dotdecode
PORT( CLK : IN STD_LOGIC;
A0,A1,A2,A3,A4,A5,A6,A7 : IN STD_LOGIC_VECTOR(7 DOWNTO 0); ROW : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); COL : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT;
SIGNAL s,c1,c2,c3,c4,p0,p1,m,sc:std_logic; SIGNAL st1,st2:std_logic_vector(2 downto 0); SIGNAL d:std_logic_vector(3 downto 0);
SIGNAL a0,a1,a2,a3,a4,a5,a6,a7:std_logic_vector(7 downto 0); BEGIN u1:cp PORT MAP(clk=>clkin,cp1=>c1,scp=>sc); u2:cp2 PORT MAP(clk=>clkin,cp2=>c2); u3:fxiaodou PORT MAP(clk=>clkin,mode=>modin,rp=>psin,modeO=>m,rpO=>p0); u4:fset PORT MAP(clk=>c1,run=>runin,mode=>m,status=>st1); u5:pause PORT MAP(run=>runin,pause=>p0,ps=>p1); u6:foption PORT MAP(cp1=>c2,cp2=>c1,scp=>sc,status=>st1,run=>runin,ps=>p1,sel=>selout,seg=>segout,sound=>s,o_status=>st2,dianzhen=>d); u7:display PORT MAP(cl=>clkin,run=>runin,sound=>s,s_status=>st1,o_status=>st2,soundout=>o_sound,statusout=>status_out); u8:dianzhen PORT MAP(clk=>c3,set=>d,a0=>a0,a1=>a1,a2=>a2,a3=>a3,a4=>a4,a5=>a5,a6=>a6,a7=>a7); u9:cp3 PORT MAP(clk=>clkin,cp3=>c3); u10:cp4 PORT MAP(clk=>clkin,cp4=>c4); u11:dotdecode PORT MAP(CLK=>c4,A0=>a0,A1=>a1,A2=>a2,A3=>a3,A4=>a4,A5=>a5,A6=>a6,A7=>a7,ROW=>ROW,COL=>COL); END;
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY cp is PORT(
clk:IN std_logic; cp1:OUT std_logic; scp:OUT std_logic ); END;
ARCHITECTURE freq of cp IS
SIGNAL count:std_logic_vector(16 downto 1); SIGNAL c1:std_logic; SIGNAL c2:std_logic;
BEGIN
PROCESS(clk) BEGIN
IF(clk'event and clk='1')then
IF(count=\ count<=\ c1<=not c1; -- c2<=count(15);
ELSE count<=count+1; END IF; END IF; END PROCESS; cp1<=c1; scp<=c2; END;
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY cp2 is PORT(
clk:IN std_logic; cp2:OUT std_logic ); END;
ARCHITECTURE freq of cp2 IS
SIGNAL count:std_logic_vector(24 downto 1);
--49,9999 SIGNAL c:std_logic; BEGIN
PROCESS(clk) BEGIN
IF(clk'event and clk='1')then
IF(count=\ count<=\ c<=not c;
ELSE count<=count+1; END IF; END IF; END PROCESS; cp2<=c; END;
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY fxiaodou IS
PORT( clk:IN std_logic; mode:IN std_logic; rp:IN std_logic; modeO:OUT std_logic; rpO:OUT std_logic); END;
ARCHITECTURE impulse of fxiaodou IS SIGNAL cp:std_logic_vector(2 downto 1); SIGNAL jsq1:std_logic_vector(8 downto 0); SIGNAL jsq2:std_logic_vector(8 downto 0);
BEGIN
PROCESS(clk) BEGIN
IF(clk'event and clk='1')THEN IF(mode='1')THEN
IF(jsq1=\ ELSE jsq1<=jsq1+1; END IF;
IF(jsq1=\ ELSE cp(2)<='0'; END IF;
ELSE IF(jsq1=\ ELSE jsq1<=jsq1-1;
END IF; END IF;
IF(rp='1')THEN
IF(jsq2=\ ELSE jsq2<=jsq2+1; END IF;
IF(jsq2=\ ELSE cp(1)<='0'; END IF;
ELSE IF(jsq2=\ ELSE jsq2<=jsq2-1; END IF; END IF; END IF;
END PROCESS; rpO<=cp(1);
modeO<=cp(2); END;
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY fset IS
PORT( clk:IN std_logic; run:IN std_logic; mode:IN std_logic;
status:OUT std_logic_vector(2 downto 0) ); END;
-------------------------------------------------------- ARCHITECTURE pro of fset IS TYPE all_state IS (s1,s2,s3,s4,s5); SIGNAL state:all_state; BEGIN
PROCESS(clk,mode) BEGIN
IF(mode'event and mode='1')THEN IF(run='0')THEN CASE state IS WHEN s1=>state<=s2;status<=\ WHEN s2=>state<=s3;status<=\ WHEN s3=>state<=s4;status<=\ WHEN s4=>state<=s5;status<=\
WHEN s5=>state<=s1;status<=\ WHEN OTHERS=>state<=s5;status<=\ END CASE; END IF; END IF;
END PROCESS; END;
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY pause IS
PORT( run:IN std_logic; pause:IN std_logic; ps:OUT std_logic ); END;
ARCHITECTURE status of pause IS SIGNAL p:std_logic;
BEGIN
PROCESS(pause) BEGIN
IF(run='0')THEN p<='0';
ELSE IF(pause'event and pause='1')THEN--pause bottom has been pressed p<=not p;--p signal '1' END IF; END IF; END PROCESS; ps<=p; END;
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY foption IS PORT(
cp1:IN std_logic; cp2:IN std_logic; scp:IN std_logic;
status:IN std_logic_vector(2 downto 0); run:IN std_logic;
ps:IN std_logic;
sel:OUT std_logic_vector(6 downto 1); seg:OUT std_logic_vector(6 downto 0); sound:OUT std_logic;
o_status:OUT std_logic_vector(2 downto 0); dianzhen:OUT std_logic_vector(3 downto 0)); END;
ARCHITECTURE run of foption is
SIGNAL time1:std_logic_vector(3 downto 0); SIGNAL time2:std_logic_vector(3 downto 0); SIGNAL time0:std_logic_vector(3 downto 0); SIGNAL ts:std_logic;
SIGNAL selsig:std_logic_vector(6 downto 1); SIGNAL segsig:std_logic_vector(6 downto 0); SIGNAL s:std_logic_vector(2 downto 0); SIGNAL sds:std_logic; SIGNAL sctl:std_logic;
SIGNAL mt1:std_logic_vector(3 downto 0); SIGNAL mt2:std_logic_vector(3 downto 0); SIGNAL jsq:std_logic_vector(3 downto 0);
SIGNAL d:std_logic_vector(3 downto 0):= \
BEGIN
PROCESS(cp1) BEGIN
IF(run='0')THEN
IF(status(2)='1')THEN mt2<=\ ELSIF(status(1)='1')THEN mt2<=\ ELSIF(status(0)='1')THEN mt2<=\ END IF;
s<=status;time1<=mt1;time2<=mt2;sctl<='0';--time1 and time2 show the seg
ELSE
IF(cp1'event and cp1='1')THEN IF(ps='0')THEN
IF(s(2)='1')THEN--100/111 25s
IF(time2=\ d<=\
elsif(time2=\ d<=\
elsif(time2=\
d<=\
elsif(time2=\ d<=\
elsif(time2=\ d<=\ end if;
ELSIF(s(1)='1')THEN--010/011 30s
IF(time2=\ d<=\
elsif(time2=\ d<=\
elsif(time2=\ d<=\
elsif(time2=\ d<=\
elsif(time2=\ d<=\ end if;
ELSIF(s(0)='1')THEN--001 15s
IF(time2=\ d<=\
elsif(time2=\ d<=\
elsif(time2=\ d<=\ end if; END IF;
IF(time1=\
IF(time2=\
IF(s(2)='1')THEN s(2)<='0';
ELSE IF(s(1)='1')THEN s(1)<='0';
ELSE IF(s(0)='1')THEN s(0)<='0';
END IF;END IF;END IF;
IF((s(2)and s(1))='1')THEN time2<=\ ELSE IF((s(1)and s(0))='1')THEN time2<=\D->C 15S
ELSE time2<=\other state so the wash
is end
END IF;END IF;
ELSE time2<=time2-1; time1<=\ END IF;
ELSE time1<=time1-1; --time dec END IF; IF(s(2)='0' and s(1)='0' and s(0)='0' and sctl='1')THEN sds<=scp;jsq<=\ ELSE sds<='0';jsq<=\ END IF; IF(jsq=\ sctl<='0';jsq<=\ ELSE jsq<=jsq+1;sctl<='1'; END IF; END IF; END IF; END IF;
dianzhen <= d; END PROCESS;
------------------------------------- PROCESS(cp2) BEGIN
IF(cp2'event and cp2='1')THEN ts<=not ts;
IF(ts='0')THEN time0<=time1;selsig<=\only the lower Nixie tube light up
ELSE time0<=time2;selsig<=\ END IF; END IF; CASE time0 IS
WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\
WHEN OTHERS=>segsig<=\
END CASE; END PROCESS;
sel<=selsig;seg<=segsig; o_status<=s;sound<=sds;
END;
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY display IS
PORT(cl:IN std_logic; run:IN std_logic; sound:IN std_logic;
s_status:IN std_logic_vector(2 downto 0); o_status:IN std_logic_vector(2 downto 0); soundout:OUT std_logic;
statusout:OUT std_logic_vector(2 downto 0) ); END;
ARCHITECTURE control OF display IS
SIGNAL statussig:std_logic_vector(2 downto 0); SIGNAL soundsig:std_logic;
BEGIN
PROCESS(cl) BEGIN
IF(run='0')THEN soundsig<='0'; statussig<=s_status; ELSE
soundsig<=sound; statussig<=o_status; END IF;
soundout<=soundsig;statusout<=statussig; END PROCESS; END;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY dianzhen IS
PORT(clk : IN STD_LOGIC;--to cp3
set : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
a0,a1,a2,a3,a4,a5,a6,a7 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END dianzhen;
ARCHITECTURE dianzhen OF dianzhen IS
SIGNAL c : INTEGER RANGE 0 TO 49 := 0;
SIGNAL s : STD_LOGIC_VECTOR(3 DOWNTO 0) := \BEGIN
PROCESS(clk) BEGIN
IF (clk'EVENT AND clk = '1') THEN IF (set /= s) THEN c <= 0; s <= set; END IF; CASE set IS
WHEN \ jinshui CASE c IS
WHEN 0 => a7<= \ a0<= \ a1<= \ a2<= \ a3<= \ a4<= \ a5<= \
a6<= \ WHEN 8 => a7<= \ a0<= \ a1<= \ a2<= \ a3<= \ a4<= \ a5<= \
a6<= \ WHEN 16 =>a7<= \ a0<= \ a1<= \ a2<= \ a3<= \ a4<= \ a5<= \
a6<= \
WHEN 24 =>a7<= \ a0<= \ a1<= \ a2<= \ a3<= \ a4<= \ a5<= \
a6<= \ WHEN 32 =>a7<= \ a0<= \ a1<= \ a2<= \ a3<= \ a4<= \ a5<= \
a6<= \ WHEN 40 =>a7<= \ a0<= \ a1<= \ a2<= \ a3<= \ a4<= \ a5<= \
a6<= \ WHEN 49 => c <= 0;
WHEN OTHERS => c <= c + 1; END CASE;
WHEN \ CASE c IS
WHEN 8 => a7<= \ a0<= \ a1<= \ a2<= \ a3<= \ a4<= \ a5<= \
a6<= \ WHEN 16 => a7<= \ a0<= \ a1<= \ a2<= \ a3<= \ a4<= \ a5<= \
END PROCESS; END dianzhen; LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY cp3 is PORT(
clk:IN std_logic; cp3:OUT std_logic ); END;
ARCHITECTURE freq of cp3 IS
SIGNAL count:std_logic_vector(21 downto 1); SIGNAL c1:std_logic; BEGIN
PROCESS(clk) BEGIN
IF(clk'event and clk='1')then
IF(count=\ count<=\ c1<=not c1;
ELSE count<=count+1; END IF; END IF; END PROCESS; cp3<=c1; END;
LIBRARY ieee;
USE ieee.std_logic_1164.all; USE ieee.std_logic_signed.all;
ENTITY cp4 is PORT(
clk:IN std_logic; cp4:OUT std_logic ); END;
ARCHITECTURE freq of cp4 IS
SIGNAL count:std_logic_vector(14 downto 1); SIGNAL c1:std_logic; BEGIN
PROCESS(clk) BEGIN
IF(clk'event and clk='1')then
IF(count=\ count<=\ c1<=not c1;
ELSE count<=count+1; END IF; END IF; END PROCESS; cp4<=c1; END;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY dotdecode IS
PORT(CLK : IN STD_LOGIC;
A0,A1,A2,A3,A4,A5,A6,A7 : IN STD_LOGIC_VECTOR(7 DOWNTO 0); ROW : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); COL : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END;
ARCHITECTURE decode OF dotdecode IS
SIGNAL clk_temp : INTEGER RANGE 0 TO 7;
SIGNAL col_temp : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
PROCESS(CLK) BEGIN
IF (CLK'EVENT AND CLK = '1') THEN CASE clk_temp IS
WHEN 0 => ROW <= \ WHEN 1 => ROW <= \ WHEN 2 => ROW <= \ WHEN 3 => ROW <= \ WHEN 4 => ROW <= \ WHEN 5 => ROW <= \ WHEN 6 => ROW <= \ WHEN 7 => ROW <= \ END CASE;
COL(0) <= col_temp(7); COL(1) <= col_temp(6); COL(2) <= col_temp(5);
COL(3) <= col_temp(4); COL(4) <= col_temp(3); COL(5) <= col_temp(2); COL(6) <= col_temp(1); COL(7) <= col_temp(0); END IF; END PROCESS; END;
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库【含源代码】北邮数电实验洗衣机控制器点阵动态显示VHDL报告在线全文阅读。
相关推荐: