找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6463|回復(fù): 1
收起左側(cè)

FPGA學(xué)習(xí)-高性能計(jì)數(shù)器IP核調(diào)用與驗(yàn)證

[復(fù)制鏈接]
ID:108531 發(fā)表于 2016-3-12 22:42 | 顯示全部樓層 |閱讀模式

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

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

 

 

 

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

 

 

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

4、仿真程序

/* 實(shí)驗(yàn)名稱:計(jì)數(shù)器IP核驗(yàn)證

 * 程序功能:每5個(gè)時(shí)鐘周期計(jì)數(shù)一次,當(dāng)計(jì)數(shù)10次后輸出一個(gè)高電平

 */

 

`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 給一次高電平,計(jì)數(shù)一次并通過 q 輸出

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

    .cout(cout),    // 當(dāng)計(jì)數(shù)器溢出或者計(jì)數(shù)到指定的數(shù)值會(huì)輸出一個(gè)時(shí)鐘周期的高電平

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

    );

   

    initial clk = 1;

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

   

    initial begin

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

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

            cin = 0;                       

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

            cin = 1;

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

                   

        end

       

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

       

        #(`clock_period * 200);            // 延時(shí)200個(gè)時(shí)鐘周期

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

   

    end

 

endmodule 

 

5、輸出的波形



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


 

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

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

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

 */

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

    input cin;       

    input clk;

    output cout;

    output[7:0] q;

   

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

    // 計(jì)數(shù)器0

    count_ip count_ip0(

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

    .clock(clk),        // 時(shí)鐘

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

    .cout(cout0),        // 當(dāng)計(jì)數(shù)器溢出了,cout就會(huì)觸發(fā)一個(gè)時(shí)鐘的高電平

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

    );

    // 計(jì)數(shù)器1

    count_ip count_ip1(

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

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

    .clock(clk),        // 時(shí)鐘

    .cout(cout),        // 當(dāng)計(jì)數(shù)器1溢出了,就會(huì)輸出一個(gè)時(shí)鐘的高電平

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

    );

endmodule   

 

 

8、仿真源程序

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

 * 程序功能:測(cè)試級(jí)聯(lián)過后的計(jì)數(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 給一次高電平,計(jì)數(shù)一次并通過 q 輸出

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

    .cout(cout),        // 當(dāng)計(jì)數(shù)器溢出或者計(jì)數(shù)到指定的數(shù)值會(huì)輸出一個(gè)時(shí)鐘周期的高電平

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

    );

   

    initial clk = 1;

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

   

    initial begin

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

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

            cin = 0;                       

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

            cin = 1;

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

                   

        end

       

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

       

        #(`clock_period * 200);                // 延時(shí)200個(gè)時(shí)鐘周期

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

   

    end

 

endmodule   

 

 

9、波形圖(圖中 q 顯示的值是無符號(hào)十進(jìn)制)

 

10、電路圖

 

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

 

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:108615 發(fā)表于 2016-3-14 00:29 | 顯示全部樓層
教程很好,收藏保存了,51黑論壇有你更精彩。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表