Verilog流水灯实验报告.docxVIP

  • 183
  • 0
  • 约3千字
  • 约 11页
  • 2020-03-09 发布于江西
  • 举报
流水灯实验报告 实验二 流水灯 一、  实验目的 学会编写一个简单的流水灯程序并掌握分频的方法。熟悉 Modelsim 仿真软件的使用。 二、 实验要求 用 Quartus 编写流水灯程序,在 Modelsim 软件中进行仿真。 三、 实验仪器和设备 硬件:计算机 软件:Quartus、Modelsim、(UE) 四、 实验内容 将时钟周期进行分频。 编写 Verilog 程序实现 LED 等依次亮灭,用 Modelsim 进行仿真,绘制波形图。 五、 实验设计 (一)分频原理 已知时钟周期 f 为 50MHz,周期 T 为 1/f,即 20ns。若想得到四分频计数器,即周期为 80ns 的时钟,需要把时钟进行分频。即每四个时钟周期合并为一个周期。原理图如图 1 所示。 clk rst_n clk_4 图 1 四分频原理图 (二)流水灯设计思路 实现 4 盏 LED 灯依次隔 1s 亮灭,即周期为 1s; 计算出频率 f 为 1/T=1Hz; 设置计数器 cnt,当检测到 clk 上升沿时开始计数,当 cnt 计数到 24_999_999 时, clk_4 跳变为 1,LED 灯亮起,当 cnt 计数 49_999_999 时,clk_4 置 0,LED 灯熄灭。 4、给 LED 赋初值 4’b0001,第一盏灯亮。 5、利用位拼接,实现循环。 (三)设计框图 FPGAcnt FPGA cnt clk LED  LED 图 2 设计基本框图 (四)位拼接的用法 若输入 a=4b1010,b=3b101 ,c=4b0101,想要使输出 d=5b10001 用位拼接,符号“{ }”:d={b[2:1],c[1],a[2:1]} 即把 b 的低 1~2 位 10,c 的低 1 位 0,a 的低 1~2 位 01 拼接起来,得到 10 0 01。 流水灯 4b0001 4b0010 4b0100 4b1000 相当于把低三位左移,并最高位放在最低位。 用位拼接可写为: led={led[2:0], led[3]}; 低三位 最高位 六、 实验方法和步骤 (一)时钟分频 编写分频程序。 编写测试程序。 进行仿真,波形如图 3 所示。 图 3 分频仿真结果 (二)流水灯 1、编写分频程序。 3、 编写测试程序。 3、进行仿真,为了节约时间和方便观察波形,将计数器值分别改为 24、49 跳转。波 形如图 4 所示。 图 4 流水灯仿真结果 七、 实验参考程序 (一) 时钟分频 1、程序文件 module div_clk( //模块名与文件名一致。定义端口列表, input wire clk, //输入线型 input wire rst_n, output reg clk_4 //输出定义为寄存器型 ); reg[3:0] cnt; //中括号定义位宽,定义中间变量 cnt always@(posedge clk) if(rst_n==0) cnt = 0; //复位为 0,计数器也为 0 else if(cnt==3) //当计数器=3 时清零(可用 else if) cnt = 0; else cnt = cnt+1; //计数器自加 1 always@(posedge clk) if(rst_n==0) clk_4 = 0; //复位为 0.clk_4 为 0 else if(cnt==1) clk_4 = 1; //当计数器为 1 时,时钟跳变为 1 else if(cnt==3) clk_4 = 0; //当计数器为 3 时,时钟跳变为 0 endmodule 2、测试文件 `timescale 1ns/1ns module tb_div_clk(); reg clk; reg rst_n; wire clk_4; initial begin clk = 0; rst_n = 0; #100 rst_n = 1; end always #5 clk=~clk; div_clk div_clk_inst( .clk(clk), .rst_n(rst_n), .clk_4(clk_4) ); endmodule (二) 流水灯 1、 程序文件 module LSD( //模块名与文件名一致。定义端口列表, input wire clk, //输入线型 input wire rst_n, output reg[3:0] led ); reg[25:0] cnt; //中括号定义位宽,定义中间变量 cnt reg clk_4; always@(posedge clk) if(rst_n==0) cnt = 0; //复位为 0,计数器也为 0 else if(cnt==49_999_999) //当计数器=49999999

文档评论(0)

1亿VIP精品文档

相关文档