概述
定时与分频实验
- 实验目的
- 实验要求
- 实验原理
- 程序代码
- 测试用例
- 仿真波形图
- 电路管脚图
- 引脚配置文件
- 工程文件
实验目的
- 熟悉掌握开关和显示灯作为输入和输出设备进行各种实验的方法。
- 掌握灵活运用Verilog HDL 语言进行各种描述与建模的技巧和方法。
实验要求
- 使用合适的描述方式编程实现规定功能的流水灯模块。
- 课前任务:在Xilinx ISE上完成创建工程、编辑程序源代码、编程、综合、仿真、验证,确保逻辑正确性。
- 实验室任务:配置管脚,生成*.bit文件,完成板级验证。
- 撰写实验报告。
实验原理
流水灯的实现方法:
想实现流水灯,只需用一个寄存器来对应开发板上的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;
工程文件
工程文件: 流水灯实验.
关注我即可下载
最后
以上就是迷路冥王星为你收集整理的杭电数字电路课程设计-实验十七-流水灯实验的全部内容,希望文章能够帮你解决杭电数字电路课程设计-实验十七-流水灯实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复