找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6340|回復: 1
打印 上一主題 下一主題
收起左側

FPGA學習-高性能計數(shù)器IP核調用與驗證

[復制鏈接]
跳轉到指定樓層
樓主
ID:108531 發(fā)表于 2016-3-12 22:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

1、利用Quartus II自帶的計數(shù)器IP核來熟悉怎么使用Quartus II的IP核。

2、使用計數(shù)器IP核的步驟(具體過程參考視頻,這里貼出幾張比較重要的步驟以及解釋)

 

 

 

這一步不能勾選,否則會出現(xiàn)其他問題(暫時還不明白是咋回事)

 

 

3、生成的原理圖(看不懂、略)

4、仿真程序

/* 實驗名稱:計數(shù)器IP核驗證

 * 程序功能:每5個時鐘周期計數(shù)一次,當計數(shù)10次后輸出一個高電平

 */

 

`timescale 1ns/1ns

`define clock_period    20

 

module count_ip_tb;

 

    reg cin;           

    reg clk;

    wire cout;

    wire[3:0] q;

   

    count_ip count_ip0(

    .cin(cin),        // cin 給一次高電平,計數(shù)一次并通過 q 輸出

    .clock(clk),    // 時鐘頻率

    .cout(cout),    // 當計數(shù)器溢出或者計數(shù)到指定的數(shù)值會輸出一個時鐘周期的高電平

    .q(q)                // cin 為高電平是,更新計數(shù)器的值并通過 q 輸出

    );

   

    initial clk = 1;

    always #(`clock_period/2) clk = ~clk;    // 產(chǎn)生時鐘

   

    initial begin

        repeat(20)begin                // 循環(huán) 20 次

            // 為了方便理解,這部分是我改寫的代碼

            cin = 0;                       

            #(`clock_period * 5);    //cin 維持5個時鐘的低電平   

            cin = 1;

            #(`clock_period);            //cin 維持1個時鐘的高電平

                   

        end

       

        cin = 0;        // 為避免計數(shù)器繼續(xù)計數(shù)輸出,需要將 cin 設置為低電平

       

        #(`clock_period * 200);            // 延時200個時鐘周期

        $stop;                                // 停止執(zhí)行

   

    end

 

endmodule 

 

5、輸出的波形



6、兩個4位計數(shù)器IP核級聯(lián)為8位計數(shù)器


 

7、源程序(注意,這里需要將計數(shù)器IP核設置為 Plain binary 即計數(shù)到最大值

/* 實驗名稱:級聯(lián)計數(shù)器IP核

 * 程序功能:將兩個4位計數(shù)器IP核級聯(lián)實現(xiàn)8位計數(shù)器

 */

module mytest(cin, clk, cout, q);

    input cin;       

    input clk;

    output cout;

    output[7:0] q;

   

    wire cout0;        // 線網(wǎng)類型,暫時理解為導線

    // 計數(shù)器0

    count_ip count_ip0(

    .cin(cin),        // cin 觸發(fā)計數(shù)

    .clock(clk),        // 時鐘

    // 計數(shù)器0的 count 通過 cout0 與計數(shù)器1的 cin 鏈接

    .cout(cout0),        // 當計數(shù)器溢出了,cout就會觸發(fā)一個時鐘的高電平

    .q(q[3:0])        // 輸出計數(shù)器的值為低4位,即表示計數(shù)了多少次

    );

    // 計數(shù)器1

    count_ip count_ip1(

    // cin 的觸發(fā)由計數(shù)器0的cout輸出觸發(fā)

    .cin(cout0),        // 當計數(shù)器0溢出1次這里才計數(shù)1次

    .clock(clk),        // 時鐘

    .cout(cout),        // 當計數(shù)器1溢出了,就會輸出一個時鐘的高電平

    .q(q[7:4])        // 輸出計數(shù)器的值為高4位,即表示多少個計數(shù)器0溢出

    );

endmodule   

 

 

8、仿真源程序

/* 實驗名稱:級聯(lián)計數(shù)器IP核驗證

 * 程序功能:測試級聯(lián)過后的計數(shù)器是否為8位

 */

`timescale 1ns/1ns

`define clock_period    20

 

module mytest_tb;

    reg cin;           

    reg clk;

    wire cout;

    wire[7:0] q;

   

    mytest count_ip(

    .cin(cin),        // cin 給一次高電平,計數(shù)一次并通過 q 輸出

    .clk(clk),        // 時鐘頻率

    .cout(cout),        // 當計數(shù)器溢出或者計數(shù)到指定的數(shù)值會輸出一個時鐘周期的高電平

    .q(q)            // cin 為高電平是,更新計數(shù)器的值并通過 q 輸出

    );

   

    initial clk = 1;

    always #(`clock_period/2)  clk = ~clk;    // 產(chǎn)生時鐘

   

    initial begin

        repeat(300)begin                    // 循環(huán) 20 次

            // 為了方便理解,這部分是我改寫的代碼

            cin = 0;                       

            #(`clock_period * 5);            //cin 維持5個時鐘的低電平   

            cin = 1;

            #(`clock_period);                //cin 維持1個時鐘的高電平

                   

        end

       

        cin = 0;        // 為避免計數(shù)器繼續(xù)計數(shù)輸出,需要將 cin 設置為低電平

       

        #(`clock_period * 200);                // 延時200個時鐘周期

        $stop;                            // 停止執(zhí)行

   

    end

 

endmodule   

 

 

9、波形圖(圖中 q 顯示的值是無符號十進制)

 

10、電路圖

 

11、級聯(lián)8位的好處是可以將兩個計數(shù)器的值進行分離。舉個例子,我們要將兩位計數(shù)的數(shù)字顯示在兩個數(shù)碼管中,那么就可以將計數(shù)器0的輸出端q直接輸出給表示個位的數(shù)碼管,而計數(shù)器1的輸出端q直接輸出給表示十位的數(shù)碼管即可。

 

12、波形圖(設置計數(shù)器計數(shù)到9,十六進制)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:108615 發(fā)表于 2016-3-14 00:29 | 只看該作者
教程很好,收藏保存了,51黑論壇有你更精彩!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表