FPGA初学之跑马灯实验

对四只LED以0.2s的频率依次闪烁,实验结果用modelsim观察。
本此涉及到设计一个24位的计数器,来产生0.2s时间的间隔,代码如下:
//跑马灯实验
module flow_led(
input sys_clk,
input rst_n,
output reg [3:0] led //输出的4位的LED
);

//产生24位的计数器cnt
reg [23:0] cnt;

always @(posedge sys_clk or negedge rst_n) begin
if(!rst_n)
cnt <= 1’b0; //复位信号拉低时计数器不工作
else
if(cnt < 24’d10000000)//若复位后计数器得知小于10000000则计数器加一位
cnt <= cnt + 1’b1;
else
cnt <= 24’d0; //若大于10000000则置零
end

always @(posedge sys_clk or negedge rst_n) begin
if(!rst_n)
led <= 4’b0001;
else
if(cnt == 24’d10000000) //当计数器的职位10000000时代表经过0.2s则移位
led <= {led[2:0],led[3]}; //移位寄存器
else
led <= led;
end

endmodule
对其编译,设计激励文件,利用modelsim仿真
激励文件代码如下
`timescale 1 ns/ 1 ns
module flow_led_vlg_tst();
// constants
// general purpose registers

// test vector input registers
reg rst_n;
reg sys_clk;
// wires
wire [3:0] led;

// assign statements (if any)
flow_led i1 (
// port map - connection between master ports and signals/registers
.led(led),
.rst_n(rst_n),
.sys_clk(sys_clk)
);
initial
begin
rst_n=1’b0;
sys_clk=1’b0;
#100 rst_n=~rst_n;

 #20000000 $stop;                  

end
always
// optional sensitivity list
// @(event1 or event2 or … eventn)
begin
#10 sys_clk=~sys_clk;

// --> end
end
endmodule
quartus和modelsim联合仿真具体步骤不讲,不懂可参考https://editor.csdn.net/md/?articleId=107999187
下面展示实验结果
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值