查看: 8148|回复: 13

打算 学 ALTERA 的 MAX3000系列的 EPM3128

[复制链接]
发表于 2009-6-18 10:32:12 | 显示全部楼层 |阅读模式
关键词: ALTERA
打算 学 ALTERA 的 MAX3000系列的 EPM3128    或EPM5000系列。

作为初学者,选择简单的CPLD做入门。封装100LQFP的。

好希望听听 都是初学者的你的意见。 高手免提!
 楼主| 发表于 2009-6-18 10:45:31 | 显示全部楼层
大家为什么想使用FPGA/CPLD.? 是是什么行业?什么项目? 可以简单说说吗?

我主要是用CPLD 来扩展 I/O口,暂时就这个需要。因此没什么要求,简单学学就OK.
发表于 2009-6-18 11:59:48 | 显示全部楼层
建议LZ将学习经历共享撒~
发表于 2009-6-19 00:06:44 | 显示全部楼层
cpld,太简单了。用原理图输入就可以了。
发表于 2009-6-19 00:18:09 | 显示全部楼层
二者没有简单和复杂之分

一般而言,CPLD是基于Macro Cell的,FPGA是基于LUT
CPLD的delay小并且可以准确预估,非常适合做组合逻辑功能
FPGA基于LUT门密度大,flip-flop更加丰富,适合做时序逻辑
发表于 2009-6-20 13:00:25 | 显示全部楼层
玩玩用3128也无妨。做批量就用epm240吧。价格更便宜,供货也ok,资源更多。
我是想用“免提”和你通话的,可这个破论坛没这功能啊。
发表于 2009-6-20 13:12:06 | 显示全部楼层
epm240 是新品,你说的那个快停产了。
发表于 2009-6-20 13:16:19 | 显示全部楼层
楼上咋不用“免提”,不厚道
 楼主| 发表于 2009-6-22 10:10:14 | 显示全部楼层
EPM240才10元,  240个宏单元.
参考资料:
Using MAX II & MAX 3000A
Devices as a Microcontroller
I/O Expander

比较好入门,程序,说明都很详细。简单学学~
 楼主| 发表于 2009-6-22 12:39:48 | 显示全部楼层
下面是代码

module IO_Expander (CS, RD, WR, RST, CONF, LOAD, MODE,
MCU_IO, IO_PortA, IO_PortB, IO_PortC, IO_PortD);

input CS, RD, WR, RST, CONF, LOAD, MODE;

inout [7:0] MCU_IO, IO_PortA, IO_PortB, IO_PortC, IO_PortD;

wire writeA, writeB, writeC, writeD, read, en_IObuf, reset;
wire [1:0] Latched_Addr;
wire [3:0] inv_address;
wire [7:0] rbuf, wbuf_A, wbuf_B, wbuf_C, wbuf_D, inbuf, outbuf, Latched_en;

latch_io write_instA(.enable(writeA),.reset(reset),.data(MCU_IO),.q(wbuf_A));
latch_io write_instB(.enable(writeB),.reset(reset),.data(MCU_IO),.q(wbuf_B));
latch_io write_instC(.enable(writeC),.reset(reset),.data(MCU_IO),.q(wbuf_C));
latch_io write_instD(.enable(writeD),.reset(reset),.data(MCU_IO),.q(wbuf_D));
latch_io read_inst(.enable(read),.reset(reset),.data(inbuf),.q(rbuf));

reg_Addr register1_load(.enable((CONF & LOAD) | CS),.reset(reset),.data(MCU_IO[1:0]),.q(Latched_Addr));
reg_en register2_load(.enable(CONF | CS),.reset(reset),.data({inv_address[3:0],MCU_IO[5:2]}),.q(Latched_en));

tri_buffer wPortA(.in(wbuf_A),.oe(Latched_en[0]),.out(IO_PortA));
tri_buffer wPortB(.in(wbuf_B),.oe(Latched_en[1]),.out(IO_PortB));
tri_buffer wPortC(.in(wbuf_C),.oe(Latched_en[2]),.out(IO_PortC));
tri_buffer wPortD(.in(wbuf_D),.oe(Latched_en[3]),.out(IO_PortD));
tri_buffer rPort(.in(rbuf),.oe((en_IObuf & ~MODE) | (en_IObuf & CS)),.out(outbuf));

mux4_8bit mux0(.inA(IO_PortA),.inB(IO_PortB),.inC(IO_PortC),.inD(IO_PortD),.sel(Latched_Addr),.mux_out(inbuf));
mux4_1bit mux1(.inA(Latched_en[4]),.inB(Latched_en[5]),.inC(Latched_en[6]),.inD(Latched_en[7]),.sel(Latched_Addr),.mux_out(en_IObuf));

assign inv_address[3:0] = {~MCU_IO[5], ~MCU_IO[4], ~MCU_IO[3], ~MCU_IO[2]};
assign MCU_IO = outbuf;
assign reset = RST | CS;
assign read = RD | CS;
assign writeA = (Latched_Addr[0] | Latched_Addr[1] | WR) | CS;
assign writeB = (~Latched_Addr[0] | Latched_Addr[1] | WR) | CS;
assign writeC = (Latched_Addr[0] | ~Latched_Addr[1] | WR) | CS;
assign writeD = (~Latched_Addr[0] | ~Latched_Addr[1] | WR) | CS;

endmodule
 楼主| 发表于 2009-6-29 10:38:42 | 显示全部楼层
CPLD最大的问题是 烧写寿命短,才100~200次! 学习不方面。使用FPGA就比较好些。

ALTERA的CYCLONE 应该合适(LQFP-100封装的),但是价格比较贵啊!
发表于 2009-6-29 10:49:05 | 显示全部楼层
要做发烧音响,不得不用CPLD 控制时序。
发表于 2009-7-22 09:50:16 | 显示全部楼层
呵呵。。。学习。。
 楼主| 发表于 2009-8-5 18:06:10 | 显示全部楼层
现在觉得一块开发板和一堆简单易懂的例子很重要~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表