zoukankan      html  css  js  c++  java
  • nexys4ddr数码管动态扫描Verilog例程

    题目:实现数码管动态扫描功能,将十六个开关的值以十六进制的方式在4个数码管上同时显示出来。

    `timescale 1ns / 1ps
    
    module top(
        clk, sw, seg, an
        );
           //FPGA时钟
         input [15:0] sw;       // 16位拨动开关,其中SW[0]可用于作为复位信号rst
          input  clk;      
         output [7:0] seg;      // 8段数码管驱动,低电平有效
         output [7:0] an;       // 8段数码管片选信号,低电平有效
         wire [31:0] data;      //待显示内容
         wire clk1000Hz, clk100Hz, clk10Hz, clk1Hz;//1000/100/10/1Hz的时钟
          FrequencyDivider U_FRQNCYDVD(clk, clk1000Hz, clk100Hz, clk10Hz, clk1Hz);//分频器
         SevenSegDisp U_DISP(clk1000Hz, sw,seg, an);
    module FrequencyDivider (clk, clk1000Hz, clk100Hz, clk10Hz, clk1Hz);//分频器
        input  clk;              // 系统时钟
        output reg  clk1000Hz;  // 分频后的时钟1000Hz
        output reg  clk100Hz;   //分频后的时钟100Hz
        output reg  clk10Hz;    //分频后的时钟10Hz
        output reg  clk1Hz;     // 分频后的时钟1Hz
        parameter      N1000 = 50_000;          // 1000Hz的时钟,N=fclk/fclk_N
        parameter      N100 = 50_000_0;          // 1000Hz的时钟,N=fclk/fclk_N
        parameter      N10 = 50_000_00;          // 1000Hz的时钟,N=fclk/fclk_N
        parameter      N1 = 50_000_000;         // 1Hz的时钟,N=fclk/fclk_N
        reg [31:0]      counter1000, counter100, counter10, counter1;  /* 计数器变量,通过计数实现分频。
                                                    当计数器从0计数到(N/2-1)时,
                                                    输出时钟翻转,计数器清零 */
        always @(posedge clk)  begin              // 时钟上升沿
            if(counter1000==N1000) begin
                clk1000Hz <= ~clk1000Hz;
                counter1000 <= 32'h0;
            end            
            else 
                counter1000 <= counter1000 + 1;
        end
        
        always @(posedge clk)  begin              // 时钟上升沿
            if(counter100==N100) begin
                clk100Hz <= ~clk100Hz;
                counter100 <= 32'h0;
            end            
            else 
                counter100 <= counter100 + 1;
        end
        
        always @(posedge clk)  begin              // 时钟上升沿
            if(counter10==N10) begin
                clk10Hz <= ~clk10Hz;
                counter10 <= 32'h0;
            end            
            else 
                counter10 <= counter10 + 1;
        end
        
        always @(posedge clk)  begin              // 时钟上升沿
            if(counter1==N1) begin
                clk1Hz <= ~clk1Hz;
                counter1 <= 32'h0;
            end            
            else 
                counter1 <= counter1 + 1;
        end
    endmodule
    `timescale 20ms / 1ms
    module SevenSegDisp(clk,sw,seg,an);
        input clk;
        input [15:0] sw;       // 16位拨动开关
        output [7:0] seg;      // 7段数码管驱动,低电平有效
        output [7:0] an;       // 7段数码管片选信号,低电平有效
       
        reg [1:0] q; 
        wire [3:0] data;
        initial
        begin
        q=2'b00; 
        end
    //    Counter8 U_CNT(clk,q); 
        always @(posedge clk )  begin
              q<=q+1;
              if (q==2'b11) q= 2'b00;
              else  q =  q;
              end   
                 
        Mem U_MEM (q,sw,data);
        Decoder3_8 U_D38(q, an);   //片选 
        SevenSegDecoder U_SSD1(data,seg);  //8段码
        
    
    endmodule
    `timescale 20ms / 1ms
    
    module Mem (num,sw,data);
        input [1:0] num;
        input [15:0] sw;
        output [3:0] data;
        reg [3:0] mem [3:0];
    //    initial
    //    begin
    //       assign sw=16'h0000;
    //    end
         assign data = mem[num];
        always @(*) begin
            mem[0] = sw[3:0];
            mem[1] = sw[7:4];
            mem[2] = sw[11:8];
            mem[3] = sw[15:12];
        end
       
    endmodule
    `timescale 20ms / 1ms
    
    module Decoder3_8(num, sel);
        input  [1: 0] num;       // 数码管编号:0~7
        output reg [7:0] sel;       // 7段数码管片选信号,低电平有效
    
        always @(num) begin
            case(num)
                3'd0: sel = #10000000 8'b11111110;
                3'd1: sel = #10000000 8'b11111101;
                3'd2: sel =  #10000000 8'b11111011;
                3'd3: sel =  #10000000 8'b11110111; 
                default: sel = 8'b11111111;
            endcase
        end
    
    endmodule
    module SevenSegDecoder(
        data, segments    
    );
        input [3:0]  data;
        output [7:0]  segments;
        
        assign segments = {dp, cg, cf, ce, cd, cc, cb, ca};
        
        reg dp, cg, cf, ce, cd, cc, cb, ca;
        always @(data) begin
                case(data)
                    4'h0: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0000_0011;
                    4'h1: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1001_1111;
                    4'h2: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0010_0101;
                    4'h3: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0000_1101;
                    4'h4: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1001_1001;
                    4'h5: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0100_1001;
                    4'h6: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0100_0001;
                    4'h7: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0001_1111;
                    4'h8: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0000_0001;
                    4'h9: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0001_1001;
                    4'ha: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0001_0001;
                    4'hb: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1100_0001;
                    4'hc: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1110_0101;
                    4'hd: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1000_0101;
                    4'he: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0110_0001;
                    4'hf: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b0111_0001;
                    default: {ca, cb, cc, cd, ce, cf, cg, dp} = 8'b1111_1111;
                endcase
            end
    
    endmodule
    set_property -dict { PACKAGE_PIN E3    IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz
    #create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {CLK}];
    
    set_property -dict { PACKAGE_PIN J15   IOSTANDARD LVCMOS33 } [get_ports { sw[0] }]; 
    set_property -dict { PACKAGE_PIN L16   IOSTANDARD LVCMOS33 } [get_ports { sw[1] }]; #IO_L3N_T0_DQS_EMCCLK_14 Sch=sw[1]
    set_property -dict { PACKAGE_PIN M13   IOSTANDARD LVCMOS33 } [get_ports { sw[2] }]; #IO_L6N_T0_D08_VREF_14 Sch=sw[2]
    set_property -dict { PACKAGE_PIN R15   IOSTANDARD LVCMOS33 } [get_ports { sw[3] }]; #IO_L13N_T2_MRCC_14 Sch=sw[3]
    set_property -dict { PACKAGE_PIN R17   IOSTANDARD LVCMOS33 } [get_ports { sw[4] }]; #IO_L12N_T1_MRCC_14 Sch=sw[4]
    set_property -dict { PACKAGE_PIN T18   IOSTANDARD LVCMOS33 } [get_ports { sw[5] }]; #IO_L7N_T1_D10_14 Sch=sw[5]
    set_property -dict { PACKAGE_PIN U18   IOSTANDARD LVCMOS33 } [get_ports { sw[6] }]; #IO_L17N_T2_A13_D29_14 Sch=sw[6]
    set_property -dict { PACKAGE_PIN R13   IOSTANDARD LVCMOS33 } [get_ports { sw[7] }]; #IO_L5N_T0_D07_14 Sch=sw[7]
    set_property -dict { PACKAGE_PIN T8    IOSTANDARD LVCMOS18 } [get_ports { sw[8] }]; #IO_L24N_T3_34 Sch=sw[8]
    set_property -dict { PACKAGE_PIN U8    IOSTANDARD LVCMOS18 } [get_ports { sw[9] }]; #IO_25_34 Sch=sw[9]
    set_property -dict { PACKAGE_PIN R16   IOSTANDARD LVCMOS33 } [get_ports { sw[10] }]; #IO_L15P_T2_DQS_RDWR_B_14 Sch=sw[10]
    set_property -dict { PACKAGE_PIN T13   IOSTANDARD LVCMOS33 } [get_ports { sw[11] }]; #IO_L23P_T3_A03_D19_14 Sch=sw[11]
    set_property -dict { PACKAGE_PIN H6    IOSTANDARD LVCMOS33 } [get_ports { sw[12] }]; #IO_L24P_T3_35 Sch=sw[12]
    set_property -dict { PACKAGE_PIN U12   IOSTANDARD LVCMOS33 } [get_ports { sw[13] }]; #IO_L20P_T3_A08_D24_14 Sch=sw[13]
    set_property -dict { PACKAGE_PIN U11   IOSTANDARD LVCMOS33 } [get_ports { sw[14] }]; #IO_L19N_T3_A09_D25_VREF_14 Sch=sw[14]
    set_property -dict { PACKAGE_PIN V10   IOSTANDARD LVCMOS33 } [get_ports { sw[15] }]; #IO_L21P_T3_DQS_14 Sch=sw[15]
    
    ##7 segment display
    
    set_property -dict { PACKAGE_PIN T10   IOSTANDARD LVCMOS33 } [get_ports { seg[0] }]; #ca
    set_property -dict { PACKAGE_PIN R10   IOSTANDARD LVCMOS33 } [get_ports { seg[1] }]; #cb
    set_property -dict { PACKAGE_PIN K16   IOSTANDARD LVCMOS33 } [get_ports { seg[2] }]; #cc
    set_property -dict { PACKAGE_PIN K13   IOSTANDARD LVCMOS33 } [get_ports { seg[3] }]; #cd
    set_property -dict { PACKAGE_PIN P15   IOSTANDARD LVCMOS33 } [get_ports { seg[4] }]; #ce
    set_property -dict { PACKAGE_PIN T11   IOSTANDARD LVCMOS33 } [get_ports { seg[5] }]; #cf
    set_property -dict { PACKAGE_PIN L18   IOSTANDARD LVCMOS33 } [get_ports { seg[6] }]; #cg
    set_property -dict { PACKAGE_PIN H15   IOSTANDARD LVCMOS33 } [get_ports { seg[7] }]; #dp
    
    set_property -dict { PACKAGE_PIN J17   IOSTANDARD LVCMOS33 } [get_ports { an[0] }]; #an[0]
    set_property -dict { PACKAGE_PIN J18   IOSTANDARD LVCMOS33 } [get_ports { an[1] }]; #an[1]
    set_property -dict { PACKAGE_PIN T9    IOSTANDARD LVCMOS33 } [get_ports { an[2] }]; #an[2]
    set_property -dict { PACKAGE_PIN J14   IOSTANDARD LVCMOS33 } [get_ports { an[3] }]; #an[3]
    set_property -dict { PACKAGE_PIN P14   IOSTANDARD LVCMOS33 } [get_ports { an[4] }]; #an[4]
    set_property -dict { PACKAGE_PIN T14   IOSTANDARD LVCMOS33 } [get_ports { an[5] }]; #an[5]
    set_property -dict { PACKAGE_PIN K2    IOSTANDARD LVCMOS33 } [get_ports { an[6] }]; #an[6]
    set_property -dict { PACKAGE_PIN U13   IOSTANDARD LVCMOS33 } [get_ports { an[7] }]; #an[7]
  • 相关阅读:
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 实现业务
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 开发流程
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 报表系统集成说明
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 处理报表
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 数据访问
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 分布式应用
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 实现插件
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 对象设计器使用帮助
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET平台开发指南 数据层开发
    Jquery 中的CheckBox、 RadioButton、 DropDownList、CheckBoxList、RadioButtonList的取值赋值
  • 原文地址:https://www.cnblogs.com/kwinwei/p/9017624.html
Copyright © 2011-2022 走看看