EGo1下板_简单秒表_2

1. 模块调用关系

r't'l

2. 分频模块clk_use

100MHz进行10_000_000分频

module clk_use(
    output  reg     clk_use,
    
    input   wire    clk_sys,
    input   wire    go,
    input   wire    clr
    );
    
    parameter   clk_count = 10_000_000;
    //parameter   clk_count = 4;
    reg     [23:0]  counter;
    //reg     [3:0]  counter;
    always @ (posedge clk_sys or negedge clr) begin
        if (clr == 1'b0) begin
            counter <=  24'b0;
        end else    begin
            if (go == 1'b1) begin
                if (counter >= clk_count)   counter <=  24'b0;
                else                        counter <=  counter + 1'b1;
            end else begin
                counter <=  counter;
            end
        end
    end
    
    always @ (counter)
        if ( counter == clk_count)  clk_use <=  1'b1;
        else                        clk_use <=  1'b0;
        
endmodule

3. 计数模块watch

00.0~99.9

module watch(
    output  reg     [3:0]   d2,
    output  reg     [3:0]   d1,
    output  reg     [3:0]   d0,
    
    input   wire            clk_use,
    input   wire            clr
    );
    
    
    always @ (posedge clk_use or negedge clr) begin
        if (clr == 1'b0) begin
            d2  <=  4'b0;
            d1  <=  4'b0;
            d0  <=  4'b0;
        end else begin
            if (d0 < 9) 
                d0  <=  d0 + 1'b1;
            else begin
                d0  <=  4'b0;
                if (d1 < 9)
                    d1 <= d1 + 1'b1;
                else begin
                    d1 <= 4'b0;
                    if (d2 < 9)
                        d2 <= d2 + 1'b1;
                    else begin
                        d2  <=  4'b0;
                    end
                end
            end
        end
    end
    
endmodule

4. 数码管显示模块led

这里用了多个组合逻辑和寄存器保存段选信号,但思想还是分时复用

module led(
    output  reg    [7:0]   seg,
    output  reg    [3:0]   an,
    
    input   wire            clk,
    input   wire            rst,
    input   wire    [3:0]   in2, in1, in0
    );
    
	   parameter   seg7_0 = ~8'hc0,    seg8_0 = ~8'h40;
	   parameter   seg7_1 = ~8'hf9,    seg8_1 = ~8'h79;
	   parameter   seg7_2 = ~8'ha4,    seg8_2 = ~8'h24;
	   parameter   seg7_3 = ~8'hb0,    seg8_3 = ~8'h30;
	   parameter   seg7_4 = ~8'h99,    seg8_4 = ~8'h19;
	   parameter   seg7_5 = ~8'h92,    seg8_5 = ~8'h12;
	   parameter   seg7_6 = ~8'h82,    seg8_6 = ~8'h02;
	   parameter   seg7_7 = ~8'hf8,    seg8_7 = ~8'h78;
	   parameter   seg7_8 = ~8'h80,    seg8_8 = ~8'h00;
	   parameter   seg7_9 = ~8'h90,    seg8_9 = ~8'h10;
	   parameter   _err = ~8'hcf;
	   
	   parameter   N = 18;
    
    reg     [7:0]   seg7_data2, seg8_data1, seg7_data0;   
    reg     [N-1 : 0]  regN; 
    reg     [3:0]       hex_in;
    
    always @ (posedge clk or posedge rst)   begin
        if (rst == 1'b0)    begin
            regN    <=  0;
        end else    begin
            regN    <=  regN + 1;
        end
    end
    always @ (*)    begin
        case (regN[N-1: N-2])
            2'b00:  begin
                an  <=  4'b0001;
                seg  <=  seg7_0;
            end
            2'b01:  begin
                an  <=  4'b0010;
                seg  <=  seg7_data0;
            end
            2'b10:  begin
                an  <=  4'b0100;
                seg  <=  seg8_data1;
            end
            2'b11:  begin
                an  <=  4'b1000;
                seg  <=  seg7_data2;
            end
            default:    begin
                an  <=  4'b1111;
                seg  <=  _err;
            end
        endcase
    end
	 
    always @ (*)    begin
        case (in2)
            4'h0:       seg7_data2 <= seg7_0;
            4'h1:       seg7_data2 <= seg7_1;
            4'h2:       seg7_data2 <= seg7_2;
            4'h3:       seg7_data2 <= seg7_3;
            4'h4:       seg7_data2 <= seg7_4;
            4'h5:       seg7_data2 <= seg7_5;
            4'h6:       seg7_data2 <= seg7_6;
            4'h7:       seg7_data2 <= seg7_7;
            4'h8:       seg7_data2 <= seg7_8;
            4'h9:       seg7_data2 <= seg7_9;
            default:    seg7_data2 <= _err;
        endcase
    end
    always @ (*)    begin
        case (in1)
            4'h0:       seg8_data1 <= seg8_0;
            4'h1:       seg8_data1 <= seg8_1;
            4'h2:       seg8_data1 <= seg8_2;
            4'h3:       seg8_data1 <= seg8_3;
            4'h4:       seg8_data1 <= seg8_4;
            4'h5:       seg8_data1 <= seg8_5;
            4'h6:       seg8_data1 <= seg8_6;
            4'h7:       seg8_data1 <= seg8_7;
            4'h8:       seg8_data1 <= seg8_8;
            4'h9:       seg8_data1 <= seg8_9;
            default:    seg8_data1 <= _err;
        endcase
    end
    
    always @ (*)    begin    
        case (in0)
            4'h0:       seg7_data0 = seg7_0;
            4'h1:       seg7_data0 = seg7_1;
            4'h2:       seg7_data0 = seg7_2;
            4'h3:       seg7_data0 = seg7_3;
            4'h4:       seg7_data0 = seg7_4;
            4'h5:       seg7_data0 = seg7_5;
            4'h6:       seg7_data0 = seg7_6;
            4'h7:       seg7_data0 = seg7_7;
            4'h8:       seg7_data0 = seg7_8;
            4'h9:       seg7_data0 = seg7_9;
            default:    seg7_data0 = _err;
        endcase
    end

endmodule

5. 顶层模块top

module top_stop_watch(
    output  wire     [3:0]  an,
    output  wire     [7:0]  seg,
    
    input   wire            clk_sys,
    input   wire            go,
    input   wire            clr
    );
    
    wire            clk_use;

    wire    [3:0]   data2;
    wire    [3:0]   data1;
    wire    [3:0]   data0;
    
    
    clk_use clk_use0 (
            .clk_use(clk_use), 
            .clk_sys(clk_sys), .go(go), .clr(clr)
            );
            
    watch   watch0  (
            .d2(data2), .d1(data1), .d0(data0),
            .clk_use(clk_use), .clr(clr)
            );
    led     led0    (
            .an(an), .seg(seg),
            .clk(clk_sys), .rst(clr), .in2(data2), .in1(data1), .in0(data0)
            );  
                 
endmodule

6. 约束文件con

set_property -dict {PACKAGE_PIN G2 IOSTANDARD LVCMOS33} [get_ports {an[3]}]
set_property -dict {PACKAGE_PIN C2 IOSTANDARD LVCMOS33} [get_ports {an[2]}]
set_property -dict {PACKAGE_PIN C1 IOSTANDARD LVCMOS33} [get_ports {an[1]}]
set_property -dict {PACKAGE_PIN H1 IOSTANDARD LVCMOS33} [get_ports {an[0]}]

set_property -dict {PACKAGE_PIN B4 IOSTANDARD LVCMOS33} [get_ports {seg[0]}]
set_property -dict {PACKAGE_PIN A4 IOSTANDARD LVCMOS33} [get_ports {seg[1]}]
set_property -dict {PACKAGE_PIN A3 IOSTANDARD LVCMOS33} [get_ports {seg[2]}]
set_property -dict {PACKAGE_PIN B1 IOSTANDARD LVCMOS33} [get_ports {seg[3]}]
set_property -dict {PACKAGE_PIN A1 IOSTANDARD LVCMOS33} [get_ports {seg[4]}]
set_property -dict {PACKAGE_PIN B3 IOSTANDARD LVCMOS33} [get_ports {seg[5]}]
set_property -dict {PACKAGE_PIN B2 IOSTANDARD LVCMOS33} [get_ports {seg[6]}]
set_property -dict {PACKAGE_PIN D5 IOSTANDARD LVCMOS33} [get_ports {seg[7]}]

set_property -dict {PACKAGE_PIN P17 IOSTANDARD LVCMOS33} [get_ports clk_sys ]
set_property -dict {PACKAGE_PIN N4 IOSTANDARD LVCMOS33} [get_ports {clr}]
set_property -dict {PACKAGE_PIN R1 IOSTANDARD LVCMOS33} [get_ports {go}]
本科生毕业论文(设计)开题报告书 题 目: 基于FPGA的数字秒表设计 学生姓名: *********** 学 号: ********** 专业班级: 自动化******班 指导老师: ************ 2010年 3 月 20 日 论文(设计)题目 ISP技术及其应用研究 课题目的、意义及相关研究动态: 课题设计的主要目的:运用所学的数字电子技术的基本知识和数字电子电路的设计方法,将数字电子技术的基础知识与EDA技术有机地联系起来,EDA电子仿真软件的仿真功能强大,具有完备的文件库,具有选用元器件创建电路、仿真模拟运行电路的功能,并且在输入信号的加入、输出信号的显示上能完全模拟实际和调制过程中的各种波型和操作过程。此类设计需要在EDA仿真软件上仿真进行,并利用下载工具,下载到特定的硬件设备上,进行实时的运行与验证,来证明所设计的电路的正确性。这样把所学到的理论知识综合的运用到一些较复杂的数字逻辑电路系统中去,使我们在实践基本技能方面得到一次全面系统的锻炼;这样可以使我们了解和掌握现代复杂数字系统芯片的设计方法和所用到的EDA工具,为走上社会进入专业的电子技术公司后,能胜任各种电子产品集成化的实际设计工作打下了坚实的基础。 课题的意义:秒表是一种常见的计时工具,种类比较多。这里用EDA技术设计一种基于FPGA 的数字秒表。它可以为用户提供了传统的PLD技术无法达到的灵活性,带来了巨大的时间效益和经济效益,是可编程技术的实质性飞跃。FPGA还是有其具大的优势比如它的高速性。 相关研究动态:现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA 技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。EDA 设计可分为系统级、电路级和物理实现级。 课题的主要内容(观点)、创新之处: 课题设计的主要内容: 1. 设计任务: 设计一个采用六位LED数码管显示分、秒,0.1s,0.01s计时方式的数字秒表。使用按键开关可实现开始/结束计时操作,及复位清零操作。 2.设计要求: 要求:1、设计方案具有合理性、科学性; 2、系统工作稳定可靠; 3、系统抗干扰性能强; 4、系统硬件电路简单、程序结构明晰。 3.系统功能 1. 有启/停开关,用于开始/结束计时操作 2. 秒表计时长度为59.分59.99秒,超过计时长度,有溢出则报警,计时长度可手动设置。 3. 设置复位开关,在任何情况下只要按下复位开关,秒表都要无条件进行复位清0操作。 4. 用FPGA器件实现,用VHDL语言编程,并进行下载,仿真。 创新之处: 利用EDA技术中最为瞩目的在系统可编程技术进行电子系统的设计的创新之处:1、用软件的方式设计硬件;2、用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成;3、设计过程中可用有关软件进行各种仿真;4、系统可现场编程,在线升级;5、整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值