【MAX10初体验】PLL及闪烁LED

作者: lucky88717
上传时间为: 2015-01-26 09:24 AM
2015-01-26
阅读:

、MAX10横向对比

       MAX10不叫CPLD了,因为他多了一些FPGA的特性如DSP、RAM还有高端片子才带有的ADC,虽然内置的ADC不算多高级,但12位1MHz的速度对付普通应用也绰绰有余,另外可以借助TSD采集片内温度。

                 EP4CE6(10)E22C8与10M08SAE144C8GES的对比

器件EP4CE6E22C8EP4CE10E22C810M08SAE144C8GES
内核电压1.2V1.2V3.3V
LEs6272103208064
User I/O9292101
片内RAM276480423936387020
9bit乘法器304648
PLL221
User Flash--2555904
ADC--1
TSD(测温二极管)--1

      经过对比,安全、可靠、高集成又廉价。如果max10供货得当,有理由不换么。


二、MAX10 初体验——PLL及闪烁LED

        爱板网MAX10的板子,晒全家福:

           

        上程序:

        

module pll_led(
input wire i_clk,
input wire i_rst_n,
output wire [4:0]o_led,
output wire [4:0]o_clk
);
wire clk200;
wire clk150;
wire clk100;
wire clk50;
wire clk25;
wire locked;
wire rst;
reg [31:0]cnt200;
reg [31:0]cnt150;
reg [31:0]cnt100;
reg [31:0]cnt50;
reg [31:0]cnt25;
reg led200;
reg led150;
reg led100;
reg led50;
reg led25;

pll u_pll (
	.areset		(~i_rst_n),
	.inclk0		(i_clk),
	.c0			(clk200),//200
	.c1			(clk150),//150
	.c2			(clk100),//100
	.c3			(clk50 ),//50
	.c4			(clk25 ),//25
	.locked		(locked)
);

assign o_clk = {clk200,clk150,clk100,clk50,clk25};

assign rst = ~(i_rst_n & locked);

always@(posedge clk200 or posedge rst)
if(rst)
	begin
		cnt200 <= 32'd0;
		led200 <= 1'b1;
	end
else if(cnt200 == 32'd200000000)
	begin
		cnt200 <= 32'd1;
		led200 <= ~led200;
	end
else
	cnt200 <= cnt200 + 32'd1;
	
always@(posedge clk150 or posedge rst)
if(rst)
	begin
		cnt150 <= 32'd0;
		led150 <= 1'b1;
	end
else if(cnt150 == 32'd150000000)
	begin
		cnt150 <= 32'd1;
		led150 <= ~led150;
	end
else
	cnt150 <= cnt150 + 32'd1;
	
always@(posedge clk100 or posedge rst)
if(rst)
	begin
		cnt100 <= 32'd0;
		led100 <= 1'b1;
	end
else if(cnt100 == 32'd100000000)
	begin
		cnt100 <= 32'd1;
		led100 <= ~led100;
	end
else
	cnt100 <= cnt100 + 32'd1;
	
always@(posedge clk50 or posedge rst)
if(rst)
	begin
		cnt50 <= 32'd0;
		led50 <= 1'b1;
	end
else if(cnt50 == 32'd50000000)
	begin
		cnt50 <= 32'd1;
		led50 <= ~led50;
	end
else
	cnt50 <= cnt50 + 32'd1;
	
always@(posedge clk25 or posedge rst)
if(rst)
	begin
		cnt25 <= 32'd0;
		led25 <= 1'b1;
	end
else if(cnt25 == 32'd25000000)
	begin
		cnt25 <= 32'd1;
		led25 <= ~led25;
	end
else
	cnt25 <= cnt25 + 32'd1;
	
assign o_led = {led200,led150,led100,led50,led25};

endmodule

        时钟及管脚约束:

#***************#
# Create Clock  #
#***************#

set_time_format -unit ns -decimal_places 3
create_clock -name {in50}   -period 20.000 -waveform { 0.000 10.000 } [get_ports {i_clk}]
create_clock -name {clk200} -period 5.000  -waveform { 0.000 2.500  } [get_nets {u_pll|altpll_component|auto_generated|wire_pll1_clk[0]}]
create_clock -name {clk150} -period 6.666  -waveform { 0.000 3.333  } [get_nets {u_pll|altpll_component|auto_generated|wire_pll1_clk[1]}]
create_clock -name {clk100} -period 10.000 -waveform { 0.000 5.000  } [get_nets {u_pll|altpll_component|auto_generated|wire_pll1_clk[2]}]
create_clock -name {clk50}  -period 20.000 -waveform { 0.000 10.000 } [get_nets {u_pll|altpll_component|auto_generated|wire_pll1_clk[3]}]
create_clock -name {clk25}  -period 40.000 -waveform { 0.000 20.000 } [get_nets {u_pll|altpll_component|auto_generated|wire_pll1_clk[4]}]

三、个人感受:

       1.下载sof和其他altera家的fpga无差异,在转换pof格式时需要选择下载到片内flash,而mode在下载器件选择的右侧,给人的感觉就是下载器件的模式,不得不先选择器件在选择mode,但是器件内没有片内flash,找了半天,最后发现器件不用选,直接选mode,片内flash藏在了最下面。无力再吐槽……

              

        2.关于pof的下载速度(是的没看错继续吐槽userflash),太漫长了。目测EPCS的写入速度是片内flash的十几倍,没1分钟都下载不完(原装下载器,我试了我自己的下载器更慢)。虽然编程过程毕竟不影响使用,一想到后面自己的程序要读写userflash,顿时感觉不好了。同样是flash,能不能再慢点。 

        3.作为一款高集成度的新片子,确实很有潜力代替cyclone的小容量市场,希望这些简单的小问题不会影响片子的投产。


后续将继续测评ADC和User Flash……

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示