FPGA初级实验 verilog let's start (流水灯实验)
FPGA初级实验 verilog let's start (流水灯实验)module countpro(sys_clk,rst_n,led); //接口定义
input sys_clk,rst_n; //输入:系统时钟50MHz,复位输入
output led; //输出:3个led产生流水现象,轮流点亮
reg count; //系统时钟频率过高,需要计数的方式来产生延时,使led保持状态一段时间
reg led; //led低电平点亮
reg flag; //状态转换的入口,发生变化的时候,点亮另外一个led
always @(posedge sys_clk,negedge rst_n)
if(!rst_n) //复位,给寄存器赋初值
begin
flag <= 2'b0;
count <= 26'b0;
end
else //sys_clk上升沿到来
begin
if( count == 26'b11_1111_1111_1111_1111_1111_1110 )
begin
count <= 26'b0; //count归零,便于下次重新开始计数
if(flag == 2'b10) //当flag等于2’b10时,flag归零(实际上,当flag==2’b10时,要在下一次归零,即在flag==2’b11时,马上就变成2’b00,而并非当flag==2’b10时马上变为2’b00;)
flag <= 2'b00;
else //否则flag加一
flag <= flag+2'b01;
end
else
count <= count + 1; //当count没计数到指定值是,count执行加一操作
end
always @(posedge sys_clk)
begin
case(flag) //由于flag会不断变化,并且flag在从一个值变成另一个值的时候,会保持一段很长的时间,我们利用它来产生流水灯现象
2'b00: led <= 3'b011; //点亮第一个灯 低电平点亮
2'b01: led <= 3'b101; //点亮第一个灯 低电平点亮
2'b10: led <= 3'b110; //点亮第一个灯 低电平点亮
default:led <= 3'b111; //一般要设置一个缺省状态,三个led全部灭
endcase
end
endmodule 好东西,我以前的时候也做过,只是用的是AHDL写的!呵呵 这个实验用什么软件可以仿真出来呢??还是要买开发板的呢??我是个初学者,正在看夏老师的《Verilog数字系统设计教程》希望高手大侠多多指点~~~~~ 谢谢楼主!辛苦了 回复 1# vvt
读大学的时候用过protetus仿真平台,这个东西还不错,也不用开发板,上面有单片机、FPGA/CPLD、数码管等,可以直接调用,将这些模块连接在一起后,将程序烧进去既可以观察实验结果,是一个不需要开发板的平台,挺不错,最好去看看!
这下面是protetus的教程! 用状态机写流水灯是很容易的啊 纠错:AHDL≠VHDL,Protetus≠Proteus,Proteus能仿真FPGA吗?好像功能不怎么强大吧,用状态机写流水灯太浪费了,简单的事情,没没有必要搞复杂,分分频,注意时序就OK了 不错的例子 回复 5# xinu2009
貌似proteus一般用于单片机的仿真吧,不能仿真FPGA 好东西,谢谢分享
页:
[1]
2