前言:
最近在学习FPGA的知识,因为过了燧原科技的实习面试,需要用FPGA做芯片采样。其实之前就捡起来实验室的开发板学习,但由于资料缺失,并且错误地看了NIOS ii软核的资料,所以导致我一开始没看懂。
后来找到了资料但是Cyclone ii,第二代开发板的,后来好不容易找到了四代开发板的资料,主要是找到了引脚对应的连接原理图。和Verilog源代码,由于此板子已经过去将近十多年,资料十分难找,特在此分享给需要的同学。
黑金EP4CE15 FPGA开发板完整资料,百度网盘链接提取码:5u6i
本文主要是一些杂乱笔记,个人记录并供后来者避。modelsim的破解问题破解后打开一直闪退,于是只能使用Quartus自带的modelsim-altera。
软件问题汇总
Quartus
1。endmodule没有变蓝,因为没有敲enter生成下一行
![image.png](//file.elecfans.com/web2/M00/71/12/pYYBAGNNG52Ab8SVAAACkzbiCx8327.png)
2。pinplanner有多余的引脚删不掉
关掉pinplanner后重新打开,引脚会根据代码更新,实在删不掉的可以不管,只要需要的信号输出引脚对就行
![image.png](//file.elecfans.com/web2/M00/70/82/poYBAGNNI4yAHaexAABV8sb_Jj8333.png)
3。Top level entity的命名需要与其.v文件同名,testbench可以不设置为top level entity,不然编译时会面临forever和while死循环报错等问题
modelsim
2。打开没数据没波形,到下方Transcript中找到错误原因
有数据没波形,点击缩小按钮
![image.png](//file.elecfans.com/web2/M00/70/80/poYBAGNNHlGACiP4AABQ46iqR6E977.png)
波形出来了
![image.png](//file.elecfans.com/web2/M00/71/14/pYYBAGNNHnqAH4VOAABR2CfQv_4514.png)
3。添加被调用模块的信号,直接拖动最左边Instance中被调用模块的名字到右边波形信号一栏就好。
![image.png](//file.elecfans.com/web2/M00/70/81/poYBAGNNHziAAch7AACmjWzJttc974.png)
4,被调用的模块信号中NO data,这大概是因为数据没有更新,或者是程序的bug,再次点击顶层模块/被调用模块的名字,或点击缩小放大按钮
程序一
第一个程序自然是点灯,源代码是流水灯,但对于初学者还是稍微有点难度了,改成了一个间隔点亮的灯。
module led1
(
CLK, RSTn, LED_Out
);
input CLK;
input RSTn;
output LED_Out;
parameter T100MS = 23'd5_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 )
rLED_Out <= 1'b1;
else
rLED_Out <= 1'b0;
assign LED_Out = rLED_Out;
endmodule
![ee5ef93976dc00ecaa4a4aa2ba6f88d.jpg](//file.elecfans.com/web2/M00/70/84/poYBAGNNKZCAWGF4AAKf0cdUKw8637.jpg)
最下侧的灯在闪亮,其余几个灯常亮
又写了个一体化的流水灯程序,
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更吧