前言:

最近在学习FPGA的知识,因为过了燧原科技的实习面试,需要用FPGA做芯片采样。其实之前就捡起来实验室的开发板学习,但由于资料缺失,并且错误地看了NIOS ii软核的资料,所以导致我一开始没看懂。

后来找到了资料但是Cyclone ii,第二代开发板的,后来好不容易找到了四代开发板的资料,主要是找到了引脚对应的连接原理图。和Verilog源代码,由于此板子已经过去将近十多年,资料十分难找,特在此分享给需要的同学。

黑金EP4CE15 FPGA开发板完整资料,百度网盘链接提取码:5u6i

本文主要是一些杂乱笔记,个人记录并供后来者避。modelsim的破解问题破解后打开一直闪退,于是只能使用Quartus自带的modelsim-altera。

软件问题汇总

Quartus

1。endmodule没有变蓝,因为没有敲enter生成下一行

2。pinplanner有多余的引脚删不掉

关掉pinplanner后重新打开,引脚会根据代码更新,实在删不掉的可以不管,只要需要的信号输出引脚对就行

3。Top level entity的命名需要与其.v文件同名,testbench可以不设置为top level entity,不然编译时会面临forever和while死循环报错等问题

modelsim

2。打开没数据没波形,到下方Transcript中找到错误原因

有数据没波形,点击缩小按钮

波形出来了

3。添加被调用模块的信号,直接拖动最左边Instance中被调用模块的名字到右边波形信号一栏就好。

4,被调用的模块信号中NO data,这大概是因为数据没有更新,或者是程序的bug,再次点击顶层模块/被调用模块的名字,或点击缩小放大按钮

程序一

第一个程序自然是点灯,源代码是流水灯,但对于初学者还是稍微有点难度了,改成了一个间隔点亮的灯。

module led1

(

CLK, RSTn, LED_Out

);

input CLK;

input RSTn;

output LED_Out;

/*************************************/

parameter T100MS = 23'd5_000_000;//DB4CE15锟斤拷锟斤拷锟斤拷使锟矫的撅拷锟斤拷为50MHz锟斤拷50M*0.01=5_000_000

/*************************************/

reg [22:0]Count1;

always @ ( posedge CLK or negedge RSTn )

if( !RSTn )

Count1 <= 23'd0;

else if( Count1 == T100MS )

Count1 <= 23'd0;

else

Count1 <= Count1 + 1'b1;

/*************************************/

reg rLED_Out;

always @ ( posedge CLK or negedge RSTn )

if( !RSTn )

rLED_Out <= 1'b0;

else if( Count1 >= 23'd0 && Count1 < 23'd1_250_000 )//100ms锟侥碉拷一锟斤拷锟侥凤拷之一锟斤拷锟斤拷锟斤拷锟诫看锟教筹拷11页锟斤拷图2.1C

rLED_Out <= 1'b1;

else

rLED_Out <= 1'b0;

/***************************************/

assign LED_Out = rLED_Out;

/***************************************/

endmodule

最下侧的灯在闪亮,其余几个灯常亮

又写了个一体化的流水灯程序,

module led0_module

(

CLK, RSTn, LED_Out

);

input CLK;

input RSTn;

output reg [3:0] LED_Out;

/*************************************/

parameter T100MS = 24'd8_000_000;//

/*************************************/

reg [23:0]Count1;

always @ ( posedge CLK or negedge RSTn )

if( !RSTn )

Count1 <= 23'd0;

else if( Count1 == T100MS )

Count1 <= 23'd0;

else

Count1 <= Count1 + 1'b1;

always @ ( posedge CLK or negedge RSTn )

if( !RSTn )

LED_Out <= 4'b0000;

else if( Count1 >= 23'd0 && Count1 < 23'd2_000_000 )

LED_Out <= 4'b0001;

else if( Count1 >= 23'd2_000_000 && Count1 < 23'd4_000_000 )

LED_Out <= 4'b0010;

else if( Count1 >= 23'd4_000_000 && Count1 < 23'd6_000_000 )

LED_Out <= 4'b0100;

else if( Count1 >= 23'd6_000_000 && Count1 < 23'd8_000_000 )

LED_Out <= 4'b1000;

else

LED_Out <=4'b0000;

endmodule

感觉这边热度不高,网页广告太多,而且后面应该逐渐会偏向于代码,所以考虑后面的内容去CSDN更吧