cpld的入门交流之二:秒信号发生器
主页上提供了一个简易型cpld试验电路,我的原意是希望用最简单的电路完成几个简单的cpld程序试验能够快速入门。使用过开发实验
器的网友也许都有这样的过程(我就是其中之一),花了数百元乃至上千元购买一个"开发实验系统"(板一块),下定决心要学,但是买来以后
又不知怎样下手,还是得先看点书,找几个例程看看,然后动手编一个自认为行得通的程序,写进去试验一下?行了,原来就这么简单?的
确是这样,这些新东西貌似复杂,其实一点难度也没有(仅仅入门),于是这块试验板干什么呢?--扔向一边,早知道这样就不用买了...,
可惜,一块试验板的作用有两个:
1。让你觉得化了不少钱下去不学说不过去,总得花点心思学好他,否则对不起这n百元;
2。可以帮你做你的第一个试验,成功,树立起信心,这么简单,我也可以用cpld做产品了。
cpld开发试验板的使命也就结束了。我买的实验板仅仅用过一次,做了一个分频器编完程序写入,插上晶振一看:发光二极管一闪一闪,
而且不同的发光二极管闪烁的速度不一样,刚好按照1248的规律,太顺利了。我也尝试着自己用万能板搭了一个试验电路,cpld用atf1504也
是做了个分频器,同样也是一次成功。
下面我整理了一下我的程序,以供初学者了解vhdl的编程方法,程序非常简单。编程环境使用max+plus iiv10.12,这是一个免费的正版软件
并不是盗版。软件可以到主页上下载,很不错的奥,尤其对我们这些初学者,很容易上手。
-- max+plus ii vhdl on atf1504as - 15js44
-- cpld编程实验之一: 大材小用之秒信号发生器。
-- 在进行编译处理前请修改文件名为ep44.vhd删除程序中的汉字注释,以免引起编译错误。
-- 本程序引脚排列根据简易实验板设定。
--
http://www.xiao-qi.com/ .晓奇工作室. apr.17.2002
-- ////////////////////////////////////////////////////////////////////////////////////
--
-- r r r r r
-- e e e e e
-- s s s s s
-- e e e e e
-- r r r h r r
-- v v v v g g g c g v v
-- e e e c n n n l n e e
-- d d d c d d d k d d d
-- -----------------------------------_
-- / 6 5 4 3 2 1 44 43 42 41 40 |
-- #tdi | 7 39 | reserved
-- reserved | 8 38 | #tdo
-- reserved | 9 37 | reserved
-- gnd | 10 36 | reserved
-- reserved | 11 35 | vcc
-- reserved | 12 atf1504as - 15js44 34 | lede
-- #tms | 13 33 | led
-- reserved | 14 32 | #tck
-- vcc | 15 31 | reserved
-- reserved | 16 30 | gnd
-- reserved | 17 29 | reserved
-- |_ 18 19 20 21 22 23 24 25 26 27 28 _|
-- ------------------------------------
-- r r r r g v r r r r r
-- e e e e n c e e e e e
-- s s s s d c s s s s s
-- e e e e e e e e e
-- r r r r r r r r r
-- v v v v v v v v v
-- e e e e e e e e e
-- d d d d d d d d d
--
-- ////////////////////////////////////////////////////////////////////////////////////
library ieee;
use ieee.std_logic_1164.all;
entity ep44 is
port (
-- 66.666mhz 晶振频率输入
hclk : in std_logic;
-- 分频以后的秒闪信号输出
lede : buffer std_logic:=Ƈ'
led : out std_logic:=Ƈ'
);
end ep44;
architecture a of ep44 is
begin
process ( hclk )
variable tempcnt : integer range 0 to 33333332;
begin
-- 这里没有使用latch锁存,但由于使用了全局时钟,就隐含锁存。因此输出是完整的低频方波
if hclk'event and hclk = Ƈ' then
led <= not lede;
-- 66.666mhz /33333333 = 2 hz
if tempcnt = 0 then
tempcnt := 33333332;
lede <= not lede; -- 取反两次等于一秒
else
tempcnt := tempcnt - 1;
end if;
end if;
end process;
end a;
--/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
atf1504的内部资源比较贫乏,做了上面的工作以后资源已经消耗得差不多了。选择他做入门试验还是很不错的,atmel的芯片的一个最大好处
是它的可擦写次数是一般其他cpld的100倍 == 10000次。而它的价格相对要便宜很多,所以极力推荐使用他。有关max+pluse ii的使用方法请
查看他自带的help,高手们都这么说。
真诚希望eda高手为我们提供成功使用的实用代码或典型代码段,支持初学者加速成长,谢谢先:)
copyright© 1999-2002, 晓奇工作室 e-mail:info@xiao-qi.com
去晓奇的网站上看一看