數字系統設計練習(二)—— 跑馬燈


一、實驗硬軟件環境:

  1. EDA軟件:Vivado2019
  2. 實驗開發板:Basys3 FPGA套件

二、實驗內容:

  實現如下電路功能:當開關開啟,燈泡輪流閃爍,間隔1s,類似跑馬燈;開關關閉,則燈泡關閉。使用實驗板上的按鍵模擬開關,led模擬燈泡,時鍾使用實驗板提供的clk。草靠實驗板的管腳文件編寫約束文

  注意,LED部分的電路圖如左圖所示,當FPGA輸出為高電平時,相應的LED點亮;否則,LED熄滅。撥碼開關的電路如右圖所示,當開關打到下檔時,表示FPGA的輸入為低電平。

                                                 

三、具體實現

  1. 思路分析:開發板的晶振為100Mhz,則其周期為10ns,初值為0的計數器自加1到100,000,000時為1s,每隔1s時間,led燈轉換一次。
  2. 設計源碼:
     1 `timescale 1ns / 1ps
     2 //////////////////////////////////////////////////////////////////////////////////
     3 // Company: 
     4 // Engineer: 
     5 // 
     6 // Create Date: 2020/09/08 14:18:09
     7 // Design Name: 
     8 // Module Name: Marquee
     9 // Project Name: 
    10 // Target Devices: 
    11 // Tool Versions: 
    12 // Description: 
    13 // 
    14 // Dependencies: 
    15 // 
    16 // Revision:
    17 // Revision 0.01 - File Created
    18 // Additional Comments:
    19 // 
    20 //////////////////////////////////////////////////////////////////////////////////
    21 
    22 module Marquee(switch, clk, led);
    23     input switch, clk;
    24     output reg [3:0] led;
    25     
    26     reg [28:0] count;
    27     
    28     always @(posedge clk)
    29     begin
    30         if(!switch)
    31             begin
    32                 led <= 4'b0001;
    33                 count <= 29'b0;
    34             end
    35         else
    36             begin
    37                 if(count == 29'd100_000_000)
    38                     begin
    39                         count <= 29'b0;
    40                         if(led == 4'b1000)
    41                             led <= 4'b0001;
    42                         else
    43                             led <= (led << 1);
    44                     end
    45                 else
    46                     begin
    47                         count <= count + 1;
    48                         led <= led;
    49                     end
    50             end
    51     end
    52 endmodule
    View Code
  3. 仿真代碼:(需要注意的是,為了便於仿真,設計源碼中的count設置為自加到100,而非100,000,000。)
     1 `timescale 1ns / 1ps
     2 //////////////////////////////////////////////////////////////////////////////////
     3 // Company: 
     4 // Engineer: 
     5 // 
     6 // Create Date: 2020/09/08 15:42:36
     7 // Design Name: 
     8 // Module Name: Marquee_tb
     9 // Project Name: 
    10 // Target Devices: 
    11 // Tool Versions: 
    12 // Description: 
    13 // 
    14 // Dependencies: 
    15 // 
    16 // Revision:
    17 // Revision 0.01 - File Created
    18 // Additional Comments:
    19 // 
    20 //////////////////////////////////////////////////////////////////////////////////
    21 
    22 
    23 module Marquee_tb;
    24     reg switch, clk;
    25     wire [3:0] led;
    26     
    27     Marquee U_Marquee(.switch(switch), .clk(clk), .led(led));
    28     
    29     initial
    30     begin
    31         clk = 0; switch = 0;
    32         
    33         #100 switch = 1;
    34         
    35         #100;
    36     end
    37     
    38     always #10 clk = ~clk;
    39     
    40 endmodule
    View Code
  4. 波形圖:
  5. 約束文件:
     1 set_property PACKAGE_PIN V17 [get_ports switch]
     2 set_property IOSTANDARD LVCMOS33 [get_ports switch]
     3 set_property PACKAGE_PIN W5 [get_ports clk]
     4 set_property IOSTANDARD LVCMOS33 [get_ports clk]
     5 set_property PACKAGE_PIN U16 [get_ports led[0]]
     6 set_property IOSTANDARD LVCMOS33 [get_ports led[0]]
     7 set_property PACKAGE_PIN E19 [get_ports led[1]]
     8 set_property IOSTANDARD LVCMOS33 [get_ports led[1]]
     9 set_property PACKAGE_PIN U19 [get_ports led[2]]
    10 set_property IOSTANDARD LVCMOS33 [get_ports led[2]]
    11 set_property PACKAGE_PIN V19 [get_ports led[3]]
    12 set_property IOSTANDARD LVCMOS33 [get_ports led[3]]
    View Code


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM