创意流水灯设计报告.docx
《创意流水灯设计报告.docx》由会员分享,可在线阅读,更多相关《创意流水灯设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
创意流水灯设计报告
设计报告
团队名虫虫特工队
作者黄红娟王玉川王雁柳沐璇
完成时间2011-7-4
版本号
目录
设计报告1
目录2
图目录3
设计目标4
设计平台4
设计框架4
设计模块描述6
设计实施7
经验教训8
未来工作8
参考文献9
图目录
图1结构图............................................................................................................................5
图2模块图........................................................................................................................5
图3RTL连线图......................................................................................................................6
图4Technology连线图............................................................................................6
图5整个设计的FPGA逻辑资源占用表...........................................................7
图6UCF分配表............................................................................................................7
设计目标
本次实验是通过编写VerilogHDL语言实现创意流水灯的功能,然后下载到SPARTAN-3E板上显示出来。
通过本次设计实验对ISE10.1软件的使用有了进一步的掌握,对VerilogHDL语言的编写规则基本能够熟练应用。
掌握了SPARTAN-3E板上的按钮开关和滑动开关的UCF约束、I/O口分配和I/O口标准,LED灯点亮的条件,时钟信号的提供方法。
设计平台
设计的主要软硬件开发环境:
WindowsXPXilinxISE10.1.03i
软件开发用到了哪些工具,版本:
Xilinx–ISE10.1,DigilentAdept;
硬件开发用到了计算机设备,设备配置,NEXYS2Digilent开发板卡
设计框架
00008个LED灯相间亮
图一结构图
moduleliushui4(
inputreset,
input[3:
0]choose,
inputclk,
outputreg[7:
0]led
);
Reset是复位信号,[3:
0]choose是用来实现case语句的选择的,clk信号是用来实现分频的,整个程序是共用一个时钟信号,实现2的24方分频,8个led灯是输出信号。
设计模块描述
总的模块:
图二模块图
reset是复位信号,[3:
0]choose是用来实现case语句的选择的,clk信号是用来实现分频的,整个程序是共用一个时钟信号,实现2的24方分频,8个led灯是输出信号。
这是总的共用模块,数据方向是从左往右。
设计实施
图三RTL连线图
图四Technology连线图
图五整个设计的FPGA逻辑资源占用表
图六UCF分配表.
经验教训
实验中遇到的问题以及是如何解决的
组员1:
a.在实验中,我们先编写各自的程序,然后在此基础上需要整合,于是我们就用到了case语句。
b.if语句用途局限,我们可以在语句不太长时应用case语句(虽然有点冗长)。
c.程序文件有时候会被覆盖,注意测试文件与程序文件不能重名。
组员2:
a.过程中,会使的语句太少,所以编程时仅使用单一的语句进行编程。
b.always语句中尽量使用异步形式,同步时可能在运行时选择寄存器出现问题。
组员3:
a.如果有两个或两个以上的语句,必须要用begin......end语句
b.复位信号之后,要记得赋初值,要不然回不到初始状态。
组员4:
在程序的整合过程中,怎么使用同一个变量作为计数,而不影响程序的运行。
没有解决。
:
未来工作
虽然能实现一些自己设计的功能,但在程序编写方面还是很不够精简,代码有些繁琐,需是程序更加精炼。
语言方面的知识需要进一步学习。
参考文献
无
moduleliushui4(
inputreset,
input[3:
0]choose,
inputclk,
outputreg[7:
0]led
);
reg[23:
0]count=0;
regen=1;
reg[4:
0]x;
reg[5:
0]state;
reg[2:
0]y;
always@(posedgeclk)
count<=count+1;
always@(posedgecount[23])
case(choose)
4'b0000:
begin
if(!
reset)
led=8'b10101010;
else
led=~led;
end
4'b0001:
begin
if(reset)
led=~led;
elseled=8'b00001111;
end
4'b0010:
begin
if(reset)
begin
if(led==8'b11110000)
led=8'b11100000;
if(led[7:
0]==8'b11100000)
en=0;
if(led[7:
0]==8'b00000111)
en=1;
if(en)
led[7:
0]={led[6:
0],led[7]};
else
led[7:
0]={led[0],led[7:
1]};
end
if(!
reset)led[7:
0]=8'b11110000;
end
4'b0011:
begin
if(reset)
begin
if(led==8'b10000001)
en=1;
if(led==8'b00011000)
en=0;
if(en)
led={led[4],led[7:
5],led[2:
0],led[3]};
else
led={led[6:
4],led[7],led[0],led[3:
1]};
end
else
led=8'b10000001;
end
4'b0100:
begin
if(!
reset)
led=8'b00100010;
if(led==8'b01000100)
en=1;
elseif(led==8'b00100010)
en=0;
if(en)
led[7:
0]={led[6:
0],led[7]};
else
led[7:
0]={led[0],led[7:
1]};
end
4'b0101:
if(!
reset)
begin
led=8'b00000000;
state=4'b0000;
end
else
begin
case(state)
4'b0000:
led=8'b00000001;
4'b0001:
led=8'b00000011;
4'b0010:
led=8'b00000111;
4'b0011:
led=8'b00001111;
4'b0100:
led=8'b00011111;
4'b0101:
led=8'b00111111;
4'b0110:
led=8'b01111111;
4'b0111:
led=8'b11111111;
4'b1000:
led=8'b01111111;
4'b1001:
led=8'b00111111;
4'b1010:
led=8'b00011111;
4'b1011:
led=8'b00001111;
4'b1100:
led=8'b00000111;
4'b1101:
led=8'b00000011;
4'b1110:
led=8'b00000001;
4'b1111:
led=8'b00000000;
default:
led=8'b00000001;
endcase
state=state+1;
end
4'b0110:
begincase(y)3'b000:
led=8'b10000001;3'b001:
led=8'b11000011;3'b010:
led=8'b11100111;3'b011:
led=8'b01111110;3'b100:
led=8'b00111100;3'b101:
led=8'b00011000;3'b110:
led=8'b00000000;3'b111:
led=8'b11111111;endcaseif(!
reset)led=8'b11111111;y=y+1;end
4'b0111:
begincase(y)3'b000:
led=8'b10011001;3'b001:
led=8'b01100110;3'b010:
led=8'b10100101;3'b011:
led=8'b01011010;3'b100:
led=8'b00100100;3'b101:
led=8'b00011000;3'b110:
led=8'b01000010;3'b111:
led=8'b00111100;endcaseif(!
reset)led=8'b11111111;y=y+1;end
4'b1000:
begin
case(x)
5'b00000:
led=8'b10000000;
5'b00001:
led=8'b01000000;
5'b00010:
led=8'b00100000;
5'b00011:
led=8'b00010000;
5'b00100:
led=8'b00001000;
5'b00101:
led=8'b00000100;
5'b00110:
led=8'b00000010;
5'b00111:
led=8'b00000001;
5'b01000:
led=8'b00000011;
5'b01001:
led=8'b00000110;
5'b01010:
led=8'b00001100;
5'b01011:
led=8'b00011000;
5'b01100:
led=8'b00110000;
5'b01101:
led=8'b01100000;
5'b01110:
led=8'b11000000;
5'b01111:
led=8'b11100000;
5'b10000:
led=8'b01110000;
5'b10001:
led=8'b00111000;
5'b10010:
led=8'b00011100;
5'b10011:
led=8'b00001110;
5'b10100:
led=8'b00000111;
5'b10101:
led=8'b00001111;
5'b10110:
led=8'b00011110;
5'b10111:
led=8'b00111100;
5'b11000:
led=8'b01111000;
5'b11001:
led=8'b11110000;
5'b11010:
led=8'b11111000;
5'b11011:
led=8'b01111100;
5'b11100:
led=8'b00111110;
5'b11101:
led=8'b00011111;
5'b11110:
led=8'b00111111;
5'b11111:
led=8'b01111110;
endcase
if(!
reset)
led=8'b11111111;
x=x+1;
end
4'b1001:
if(!
reset)
begin
led=8'b00000000;
state=6'b00000;
end
else
begin
case(state)
6'b000000:
led=8'b00000001;
6'b000001:
led=8'b00000010;
6'b000010:
led=8'b00000100;
6'b000011:
led=8'b00001000;
6'b000100:
led=8'b00010000;
6'b000101:
led=8'b00100000;
6'b000110:
led=8'b01000000;
6'b000111:
led=8'b10000000;
6'b001000:
led=8'b10000001;
6'b001001:
led=8'b10000010;
6'b001010:
led=8'b10000100;
6'b001011:
led=8'b10001000;
6'b001100:
led=8'b10010000;
6'b001101:
led=8'b10100000;
6'b001110:
led=8'b11000000;
6'b001111:
led=8'b11000001;
6'b010000:
led=8'b11000010;
6'b010001:
led=8'b11000100;
6'b010010:
led=8'b11001000;
6'b010011:
led=8'b11010000;
6'b010100:
led=8'b11100000;
6'b010101:
led=8'b11100001;
6'b010110:
led=8'b11100010;
6'b010111:
led=8'b11100100;
6'b011000:
led=8'b11101000;
6'b011001:
led=8'b11110000;
6'b011010:
led=8'b11110001;
6'b011011:
led=8'b11110010;
6'b011100:
led=8'b11110100;
6'b011101:
led=8'b11111000;
6'b011110:
led=8'b11111001;
6'b011111:
led=8'b11111010;
6'b100000:
led=8'b11111100;
6'b100001:
led=8'b11111101;
6'b100010:
led=8'b11111110;
6'b100011:
led=8'b11111111;
default:
led=8'b00000001;
endcase
state=state+1;
end
4'b1010:
begin
case(led)
8'b10000001:
led=8'b11000011;
8'b11000011:
led=8'b11100111;
8'b11100111:
led=8'b11111111;
8'b11111111:
led=8'b00011000;
8'b00011000:
led=8'b00111100;
8'b00111100:
led=8'b01111110;
8'b01111110:
led=8'b00000000;
default:
led=8'b10000001;
endcase
if(!
reset)led=8'b10000001;
end
endcase
endmodule