我是靠谱客的博主 迷路冥王星,最近开发中收集的这篇文章主要介绍杭电数字电路课程设计-实验十七-流水灯实验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

定时与分频实验

      • 实验目的
      • 实验要求
      • 实验原理
      • 程序代码
      • 测试用例
      • 仿真波形图
      • 电路管脚图
      • 引脚配置文件
      • 工程文件

实验目的

  1. 熟悉掌握开关和显示灯作为输入和输出设备进行各种实验的方法。
  2. 掌握灵活运用Verilog HDL 语言进行各种描述与建模的技巧和方法。

实验要求

  1. 使用合适的描述方式编程实现规定功能的流水灯模块。
  2. 课前任务:在Xilinx ISE上完成创建工程、编辑程序源代码、编程、综合、仿真、验证,确保逻辑正确性。
  3. 实验室任务:配置管脚,生成*.bit文件,完成板级验证。
  4. 撰写实验报告。

实验原理

流水灯的实现方法:
  想实现流水灯,只需用一个寄存器来对应开发板上的LED灯,初始时为寄存器中的某几位赋值为1,则开发板上对应的LED灯亮起。接着只需定时将寄存器进行移位,则开发板上的LED灯也跟着移位,即达到了流水灯的效果。想实现不同模式流水灯的转换,只需根据输入进行不同的寄存器初值赋值,以及采用不同的移位策略即可。

程序代码

module LSD(clk,reset,SW,led);
input clk,reset;
input [1:0] SW;
output
reg [7:0] led;
wire clk_2HZ;
reg [1:0] CZ;
Fdiv F(reset,clk,clk_2HZ);
initial begin led <= 8'b0; end
always @(posedge reset or posedge clk_2HZ) begin
if(reset) begin led<=8'b00000000; end
else if( led== 8'b0)
begin
case(SW)
2'b00:begin led<=8'b10000000;CZ<=SW; end
2'b01:begin led<=8'b00000001;CZ<=SW; end
2'b10:begin led<=8'b00011000;CZ<=SW; end
2'b11:begin led<=8'b10000001;CZ<=SW; end
endcase
end
else if( SW!=CZ)
begin
case(SW)
2'b00:begin led<=8'b10000000;CZ<=SW; end
2'b01:begin led<=8'b00000001;CZ<=SW; end
2'b10:begin led<=8'b00011000;CZ<=SW; end
2'b11:begin led<=8'b10000001;CZ<=SW; end
endcase
end
else begin
case(SW)
2'b00:begin led[7:0] <= {led[0],led[7:1]};end
2'b01:begin led[7:0] <= {led[6:0],led[7]};end
2'b10:begin led[7:4] <= {led[6:4],led[7]};led[3:0] <= {led[0],led[3:1]};end
2'b11:begin led[7:4] <= {led[4],led[7:5]};led[3:0] <= {led[2:0],led[3]};end
endcase
end
end
endmodule
module Fdiv(///分频
input rst_,
input clk_25M,
output reg clk_out
);
reg [31:0] cnt;
initial begin cnt =32'd0; end
initial begin clk_out = 0; end
always @(posedge rst_ or posedge clk_25M) begin
if(rst_) begin
cnt<=32'd0;
clk_out<=1'b0;end
else if (cnt==32'd12499999) begin
clk_out <=~clk_out;
cnt <= 32'd0; end
else begin
cnt<= cnt+1'b1;
clk_out <= 0;
end
end
endmodule

测试用例

always #20 clk=~clk;
initial begin
clk=0;
reset = 0;
SW = 00;
#2000000000;
reset = 0;SW = 01;
#2000000000;
reset = 1;SW = 00;
#1000000000;
reset = 0;SW = 10;
#2000000000;
reset = 0;SW = 11;
#2000000000;
end
endmodule

仿真波形图

在这里插入图片描述
  从波形图可以看出,起初寄存器led[7:0]未赋值,当第一次时钟脉冲累计到阈值时led[7:0]赋值为第一种模式,此后当时钟脉冲再次到达阈值时,led[7:0]进行移位,实现了流水灯的效果。

电路管脚图

在这里插入图片描述
在这里插入图片描述

引脚配置文件

NET "led[7]" IOSTANDARD = LVCMOS18;
NET "led[6]" IOSTANDARD = LVCMOS18;
NET "led[5]" IOSTANDARD = LVCMOS18;
NET "led[4]" IOSTANDARD = LVCMOS18;
NET "led[3]" IOSTANDARD = LVCMOS18;
NET "led[2]" IOSTANDARD = LVCMOS18;
NET "led[1]" IOSTANDARD = LVCMOS18;
NET "led[0]" IOSTANDARD = LVCMOS18;
NET "SW[1]" IOSTANDARD = LVCMOS18;
NET "SW[0]" IOSTANDARD = LVCMOS18;
NET "led[7]" LOC = R1;
NET "led[6]" LOC = P2;
NET "led[5]" LOC = P1;
NET "led[4]" LOC = N2;
NET "led[3]" LOC = M1;
NET "led[2]" LOC = M2;
NET "led[1]" LOC = L1;
NET "led[0]" LOC = J2;
NET "SW[1]" LOC = T3;
NET "SW[0]" LOC = U3;
NET "clk" LOC = H4;
NET "reset" LOC = R4;
NET "clk" IOSTANDARD = LVCMOS18;
NET "reset" IOSTANDARD = LVCMOS18;
NET "reset" PULLDOWN;
NET "SW[1]" PULLDOWN;
NET "SW[0]" PULLDOWN;

工程文件

工程文件: 流水灯实验.
关注我即可下载

最后

以上就是迷路冥王星为你收集整理的杭电数字电路课程设计-实验十七-流水灯实验的全部内容,希望文章能够帮你解决杭电数字电路课程设计-实验十七-流水灯实验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部