CPLD在无功补偿控制仪键盘设计中的应用
对复杂可编程逻辑器件(CPLD)内部逻辑功能的描述方式有多种,本系统采用了原理图输入与VHDL语言描述相结合的方式,这样可以发挥两者的优势,加快开发进程。设计时采用层次化设计,描述系统总体功能的最上层使用原理图输入,而原理图中的某些功能模块采用VHDL编写。实际原理图如图2:
图2 键盘逻辑实际原理图
上图中Module 1模块实现分频功能,CLK来自单片机80C196KC的CLKOUT脚,其周期为3个时钟振荡周期,占空比为33%。若单片机用16M晶振,其频率约为:16M/3=5.33M。Module 1 把频率降至约1K,Module 2模块以一秒的间隔使O3~O0依次循环输出低电平进行键盘扫描 。当有键按下时,I3~I0中有一个为低电平,异或门输出1个高电平脉冲,锁存键盘状态并向单片机申请中断。系统为键盘分配的地址空间为0xf100~0xf1ff,在此范围内可读取键盘的扫描码。
由于篇幅有限,以下只给出Module 2的VHDL语句,具体如下:
LIBRARY ieee;
USE ieee.STd_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY Module2 IS
PORT DD定义端口
( clk :IN std_logic;
q :OUT std_logic_vector(3 DOWNTO 0)
);
END Module2;
ARCHITECTURE Module2 of Module2 IS
BEGIN
PROCESS(clk)
VARIBLE sum:integer:=0; DD定义变量sum,初值为0
BEGIN
IF(clk’event AND clk=’1’)THEN
sum:=sum+1; DDclk为上升沿时,sum加1
IF(sum>=5)THEN
sum:=1;
END IF;
END IF;
CASE sum IS DD根据sum输出相应的值
WHEN 1 => q=“1110”;
WHEN 2 => q=“1101”;
WHEN 3 => q=“1011”;
WHEN 4 => q=“0111”;
WHEN THERS => q=“1111”;
END CASE;
END PROCESS;
END Module2;
评论