今天,DE2-115终于拿到手了,按捺不住内心的兴奋,马上试验一下。
一个简单的流水灯程序对照书本写好之后,遇到的第一个问题是如何将程序烧进芯片。不过还好,手头资料算是比较充足的。
1.程序很简单:
//======================================================= // This code is generated by Terasic System Builder //======================================================= module LED_Test( //////////// CLOCK ////////// CLOCK_50, RSTn, //////////// LED ////////// LEDG, LEDR ); //======================================================= // PORT declarations //======================================================= //////////// CLOCK ////////// input CLOCK_50; input RSTn; //////////// LED ////////// output [8:0] LEDG; output [17:0] LEDR; //======================================================= // Structural coding //======================================================= //----1MS定时器 parameter T1MS = 16'd49_999; reg [15:0] Count1; always@(posedge CLOCK_50 or negedge RSTn) if(!RSTn) Count1 <= 16'd0; else if(Count1 == T1MS) Count1 <= 16'd0; else Count1 <= Count1 + 1'b1; //----1S定时器 reg [9:0] Count_MS; always@(posedge CLOCK_50 or negedge RSTn) if(!RSTn) Count_MS <= 10'd0; else if(Count_MS == 16'd1000) Count_MS <= 10'd0; else if(Count1 == T1MS) Count_MS <= Count_MS + 1'b1; //---- reg [26:0] rLED; always@(posedge CLOCK_50 or negedge RSTn) if(!RSTn) rLED <= 27'b0000_0000_0000_0000_0000_0000_001; else if(Count_MS == 16'd1000) begin if(rLED == 27'b0000_0000_0000_0000_0000_0000_000) rLED <= 27'b0000_0000_0000_0000_0000_0000_001; else rLED <= {rLED[25:0],1'b0}; end assign LEDR = rLED[26:9]; assign LEDG = {1'b0,rLED[7:0]}; //由于LEDG8跟它们一排LED不在同一排,所以就分出来置零好了 endmodule
2.仿真
实际上在往板子上烧之前我是没有进行仿真的,不过还是要学一下仿真过程的~
写Testbench
http://maxim.eefocus.com/nightseas/blog/12-03/242395_7df71.html
//模块定义 module LED_tb(); //寄存器定义 reg clk; //顶层模块例化 LED_Test t1 ( .CLOCK_50(clk), .RSTn(RSTn), .LEDG(LEDG), .LEDR(LEDR) ); //激励信号 initial begin clk = 0; forever #10 clk = ~clk; end endmodule
3.引脚配置
由于我是用DE2_115_SystemBuilder自动生成的,省去了引脚配置这一步。
----引脚配置,用图形界面或者.csv或者.tcl
图形界面很简单,下面说说.csv的一般操作,
http://www.cnblogs.com/sunev/archive/2012/03/10/2388705.html
编写:.csv
导入:Assignments -> Import Assignments
下载:
第一步:USB接上笔记本,板子上电,驱动安装——驱动路径是:Quartus_15.015.0quartusdrivers
第二步:下载方式的选择——Jtag或AS
第一种模式为RUN模式,需要将板上RUN/PROG开关(LCD旁)拨到RUN,是用USB-Blaster直接将sof文件烧到 Cyclone FPGA芯片,这样掉电之后就没有了,重启后需要再次烧写。
第二种模式为AS模式,将RUN/PROG开关拨到PROG模式,然后在Qutuars下载模式设置为AS模式,选择pof文件下载,这样直接下载到EPCS64 Configure芯片中,每次复位,会根据EPCS64里面的内容重新烧写Cyclone IV芯片。
刚开始我的程序编译之后是没有生成.pof的,百度之后,这样设置就可以顺利生成了——Quartus => Assignment => Device => Device and Pin Options => Configuration => Use configuration device(check)
这样板子掉电重新Reset之后里面的代码也不会变了~~~
好了,我现在宣布,第一个实验——流水灯很成功!
拿着板子学习跟对着书本学习相比,学习劲头果然大不相同,今天才算是真正的入了个门!