西安交通大学实验报告
成绩
第 1 页共 7 页
课程 数电实验 实 验 日 期 2013 年 5 月 16 日 专业班号 电气 19 交报告日期 2013 年 6 月 16 日 姓 名 吴涛 学号 2110401266 同组者:
HDL综合实验
1. 设计要求
1、设计一个完整的数字钟,小时和分钟用数码管显示,秒用发光二极管闪烁显示,每秒闪烁一次。(可增加校时功能)
2. 实验方法和步骤 1) 建立工程文件
File-New Projet-输入工程文件名:Ethan3-选择Family:Spartan 3E;Device:XC3S100E;Package:CP132;Preferred Language:Verilog-Finish。 2) 输入Verilog程序
Project-New Sourse-选Verilog Module-输入文件名:xx-点击Next按钮-确定输入输出引脚如下-点击Next按钮-点击Finish按钮-进入程序输入页面-在module Ethan1中编写相应模块的Verilog程序。
3) 编写约束文件
Project-New Source-选Implantation Constraints File-输入文件名:xx -点击Next按钮-点击Finish按钮-输入ucf文件。
4) 综合、实现及生成编程文件
点击快捷菜单上的Implement按钮-完成综合和实现,正确完成综合和实现后Synthesize-XST和Implement Design前显示正确-双击Generate Programming File生成编译文件xx.bit。正确生成编程文件后Generate Programming File前显示正确。
5) 基于ISim的行为仿真
在配置FPGA之前,也可以对设计内容进行仿真。ISE13软件不支持使用波形生成仿真向量的方法,测试向量的生成必须使用HDL语言进行仿真向量行为的描述,具体方法如下:
(1) 从Implementation切换到Simulation。
(2) Project-New Source-选Verilog Test Fixture-输入文件名:testxx-点Next-点Next-点Finish-显示测试向量模板文件-在测试向量模板中添加测试向量代码。码添加完后开始进行行为仿真:在主窗口左侧的Design窗口中选择Simulation-下拉栏中选行为级Behavioral-双击Behavioral Check Syntax开始行为级语法检查,排除语法错误-双击Simulate Behavior Model启动行为级仿真-弹出ISim仿真窗口-在ISim窗口中选View-Zoom-To Full View-在ISim窗口中按Run All按钮- To Full View。 6) 下载程序
将Basys2板连接至计算机-Tools-iMPACT-出现No iMPACT Project File Exists提示页,点OK-出现ISE iMPACT页面-双击Boundary Scan-在Right click to Add Device or Initialize JTAT chain上点击鼠标右键-选Cable Setup-选Digilent USB JTAG cable-点OK-双击iMPACT Flows菜单中的Create PROM File-点击继续-选中xcf02s-点Add Storage Device-点击继续-输入文件名:xx-点击OK-点击OK-点打开-选择要打开的文件:xx.bit-点No-点OK-双击Generate File生成xx.mcs文件-选Boundary Scan显示区-在空白区域点鼠标右键-选Initialize Chain-选Yes-选xx.bit,点击Open-选No-选择xx.mcs,点Open-点击OK,显示建立的下载链路:
(a) (b)
直接下载到FPGA,选择wt文件,双击Program,显示编程进度条,同时开
发板上的下载指示灯闪烁。(配置到FPGA的信息,断电后将丢失。)
配置到PROM,选择xx.mcs文件,双击Program,显示编程进度条,同时
开发板上的下载指示灯闪烁。此下载过程很慢,因为要写非易失的FLASH,一般
采用SPI接口。配置完成后,可以测试所下载的逻辑功能。断电后程序不会丢失,再次上电程序仍然可以运行。对于单独写PROM这种方式,如果下载完就看结果是不合适的,必须下载完后断电一会点,然后重新上电就可以看到所下载程序的运行结果。
3、实验程序
1)HDL源文件clock.v module clock (
input wire clk, input wire clr, input SetH, input SetM,
input [1:0]FLAG, //? input [5:0]Stime,//?
output Second_flash, output reg[6:0]a_to_g, output reg[3:0]an ); reg [3:0]LED0,LED1,LED2,LED3; reg [1:0]s; reg [3:0]digit; reg [16:0]clkdiv; reg [26:0]q1; reg [3:0]Hour_L; reg [3:0]Hour_H; reg [3:0]Minute_L; reg [3:0]Minute_H; reg sec; integer ss; integer i; //初始化
initial begin Hour_L=3; Hour_H=1; Minute_L=8; Minute_H=5; LED3=Minute_L; LED2=Minute_H; LED1=Hour_L; LED0=Hour_H; end
always@(*)
begin
an=4'b1111;
s<=clkdiv[16:15]; an[s]=0;
case(s)
0:digit<=LED0; 1:digit<=LED1; 2:digit<=LED2; 3:digit<=LED3;
default:digit<=LED3; endcase
case(digit)
0:a_to_g=7'b0000001;
1:a_to_g=7'b1001111; 2:a_to_g=7'b0010010; 3:a_to_g=7'b0000110; 4:a_to_g=7'b1001100; 5:a_to_g=7'b0100100; 6:a_to_g=7'b0100000; 7:a_to_g=7'b0001111; 8:a_to_g=7'b0000000; 9:a_to_g=7'b0001100; 'hA:a_to_g=7'b0001000; 'hB:a_to_g=7'b1100000; 'hC:a_to_g=7'b0110001; 'hD:a_to_g=7'b1000010; 'hE:a_to_g=7'b0110000; 'hF:a_to_g=7'b0111000; default:a_to_g=7'b0000001; endcase end
//主时钟计时
always@(posedge clk) begin
clkdiv<=clkdiv+1; end
//时钟程序,计时加校时 always@(posedge clk or posedge clr) begin
if(clr==1)//调零 begin
q1<=0; LED0=0; LED1=0; LED2=0; LED3=0;
Minute_L<=0; Minute_H<=0; Hour_L<=0; Hour_H<=0; ss<=0; end
else if(FLAG==2'b10) //调分状态 begin
if(SetM) begin
if(Stime<=59) begin
for(i=0;i<6;i=i+1) begin
if(Stime[5:0]-i*10<10) begin
Minute_L<=Stime[5:0]-i*10; Minute_H<=i; i=6; end end end else
begin
Minute_H<=0;//输入大于59置零 Minute_L<=0; end ss<=0;
LED3[3:0]=Minute_L[3:0]; LED2[3:0]=Minute_H[3:0]; end end
else if(FLAG==2'b11) //调时状态解释同上 begin
if(SetH) begin
if(Stime<=23) begin
for(i=0;i<=3;i=i+1) begin
if(Stime[5:0]-i*10<10) begin
Hour_L<=Stime[5:0]-i*10; Hour_H<=i; i=6; end end end else
begin
Hour_L<=0; Hour_H<=0;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于HDL的时序逻辑电路实验在线全文阅读。
相关推荐: