新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > 【從零開始走進FPGA】美好開始——我流啊流啊流

        【從零開始走進FPGA】美好開始——我流啊流啊流

        作者: 時間:2015-01-26 來源:網絡 收藏

          (2)clk_design.v模塊設計

        本文引用地址:http://www.104case.com/article/268641.htm

          由于系統輸入時鐘是50Mhz,若以50MHz的速度變換LED等,人眼壓根分辨不出來。因此利用分頻原理,來對50MHz進行分頻,而適應人眼。本模塊將50MHz分頻至10Hz,人眼分辨的極限是25Hz,因此10Hz能感覺得到(可以隨機修改)。Led_en的頻率計算公式:clk_led_en = 50_000000/(49_000000+1) = 10Hz,具體代碼如下:

          module clk_design

          (

          input clk,

          input rst_n,

          output led_en

          );

          reg [22:0] cnt; //49_99999,100ms

          parameter LED_CNT = 49_999999;

          always@(posedge clk or negedge rst_n)

          begin

          if(!rst_n)

          cnt <= 23'd0;

          else if(cnt < LED_CNT)

          cnt <= cnt + 1'b1;

          else

          cnt <= 23'd0;

          end

          assign led_en = (cnt == 23'd49_99999) ? 1'b1 : 1'b0;

          endmodule

          模塊沒有分頻產生10Hz的頻率,而是生成了10Hz的使能時鐘,目的是防止時鐘滿天飛,使得 內部布局布線紊亂,影響全局功能。雖然如此簡單的工程可以不用考慮,但是“習慣了嚴謹便成為了一種風范”,因此使用使能時鐘,來對具體的時序進行操作。具體使能時鐘、門控時鐘的異同、優劣將會在后續章節中解說。

          (3)led_display.v模塊設計

          根據輸入的led_en使能信號,來操作led燈的效果,此處采用最簡單的算法——遞增進位。代碼如下所示:

          module led_display

          (

          input clk,

          input rst_n,

          input led_en,

          output reg [5:0] led_data

          );

          always@(posedge clk or negedge rst_n)

          begin

          if(!rst_n)

          led_data <= 6'b0;

          else if(led_en)

          led_data <= led_data + 1'b1;

          else

          led_data <= led_data;

          end

          endmodule

          (4)從新修改water_led_design頂層文件,添加相關例化模塊。最后結果如下:

          module water_led_design

          (

          input clk, //global clock 50MHz

          input rst_n, //global clock reset

          output [5:0] led_data //user led interface

          );

          //-------------------------

          //generater clock 10Hz

          wire led_en;

          clk_design clk_design_inst

          (

          .clk (clk),

          .rst_n (rst_n),

          .led_en (led_en)

          );

          //-------------------------

          //set the display of led

          led_display led_display_inst

          (

          .clk (clk),

          .rst_n (rst_n),

          .led_en (led_en),

          .led_data (led_data)

          );

          endmodule

        fpga相關文章:fpga是什么


        c++相關文章:c++教程




        關鍵詞: FPGA Quartus II

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 中牟县| 寻乌县| 隆化县| 梁平县| 沈丘县| 黔江区| 岳西县| 贵州省| 大丰市| 乐平市| 察雅县| 尚义县| 九江市| 德安县| 上蔡县| 胶南市| 洪江市| 淮滨县| 孟津县| 公安县| 松滋市| 万载县| 萨嘎县| 桂平市| 阳新县| 武夷山市| 沁水县| 新巴尔虎右旗| 华安县| 阜新市| 柳州市| 绥中县| 阿坝县| 塔河县| 田阳县| 根河市| 新昌县| 昭平县| 兴文县| 敦煌市| 突泉县|