前言:
最近在学习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;reg [22:0]Count1; always @ ( posedge CLK or negedge RSTn )if( !RSTn ) Count1 <=23'd0;elseif( Count1 == T100MS ) Count1 <=23'd0;elseCount1 <= Count1 +1'b1;reg rLED_Out; always @ ( posedge CLK or negedge RSTn )if( !RSTn ) rLED_Out <=1'b0;elseif( Count1 >=23'd0&& Count1 <23'd1_250_000)rLED_Out <=1'b1;elserLED_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;elseif( Count1 == T100MS ) Count1 <=23'd0;elseCount1 <= Count1 +1'b1; always @ ( posedge CLK or negedge RSTn )if( !RSTn ) LED_Out <=4'b0000;elseif( Count1 >=23'd0&& Count1 <23'd2_000_000) LED_Out <=4'b0001;elseif( Count1 >=23'd2_000_000&& Count1 <23'd4_000_000) LED_Out <=4'b0010;elseif( Count1 >=23'd4_000_000&& Count1 <23'd6_000_000) LED_Out <=4'b0100;elseif( Count1 >=23'd6_000_000&& Count1 <23'd8_000_000) LED_Out <=4'b1000;elseLED_Out <=4'b0000; endmodule
感觉这边热度不高,网页广告太多,而且后面应该逐渐会偏向于代码,所以考虑后面的内容去CSDN更吧