找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

FPGA設(shè)計中的一個小分析

[復(fù)制鏈接]
ID:91350 發(fā)表于 2015-11-1 16:49 | 顯示全部樓層 |閱讀模式

在我看過的很多代碼中,發(fā)現(xiàn)許多人在對變量賦初始值(或常量值)0時的做法各種各樣,現(xiàn)在來分析下這幾種情況對設(shè)計的影響。以對64位變量a賦初始值0為例:

(1)第一種:a <= 64’d0; 對于這種指定變量具體位寬的代碼風(fēng)格,我是直接否定的,因為它不利于參數(shù)化設(shè)計;

(2)第二種:a <= 0;(或a <= (0);)而對于這種直接賦一個0的做法呢,一般情況下對設(shè)計是沒有影響的,而且還能進行參數(shù)化設(shè)計,但是在另外一種情況下是要注意的,就是例化子模塊時對位寬大于32的變量賦0,就會出現(xiàn)意想不到的情況,F(xiàn)在舉個簡單的例子來證實這種情況。假設(shè)在子模塊中對一個64位的輸入變量取反后進行輸出,而在頂層模塊中將子模塊輸出變量的第33位進行輸出,用于硬件led的測試。

頂層模塊:

/**********************************************版權(quán)申明*************************************************
**                                   電子技術(shù)應(yīng)用網(wǎng)站, CrazyBird
**--------------------------------------------文件信息--------------------------------------------------
** 文件名:          led_top.v
** 創(chuàng)建者:          CrazyBird
** 創(chuàng)建日期:        2015-8-2
** 版本號:           v1.0
** 功能描述:        對變量直接賦0的測試
**                   
********************************************************************************************************/
// synopsys translate_off
`timescale 1 ns / 1 ps
// synopsys translate_on
module led_top(
    led_data
    );
    //******************************************************************************
    //                                 輸入/輸出端口定義
    //******************************************************************************
    output                      led_data;
    
    //******************************************************************************
    //                                     變量定義
    //******************************************************************************
    wire        [63:0]          dout;
    
    //******************************************************************************
    //                                     模塊例化
    //******************************************************************************
    led u_led(
        .din(0),
        .dout(dout)
    );
    
    assign led_data = dout[32];
    
    //******************************************************************************
    
endmodule
//*********************************************文件結(jié)束*****************************************************

子模塊:

/**********************************************版權(quán)申明*************************************************
**                                   電子技術(shù)應(yīng)用網(wǎng)站, CrazyBird
**
**--------------------------------------------文件信息--------------------------------------------------
** 文件名:          led.v
** 創(chuàng)建者:          CrazyBird
** 創(chuàng)建日期:        2015-8-2
** 版本號:           v1.0
** 功能描述:        對64位的輸入數(shù)據(jù)取反后輸出
**                   
********************************************************************************************************/
// synopsys translate_off
`timescale 1 ns / 1 ps
// synopsys translate_on
module led(
    din,
    dout
    );
    //******************************************************************************
    //                                 輸入/輸出端口定義
    //******************************************************************************
    input       [63:0]          din;
    output      [63:0]          dout;
    
    //******************************************************************************
    //                                    取反輸出
    //******************************************************************************
    assign  dout = ~din;
    
    //******************************************************************************
    
endmodule
//*********************************************文件結(jié)束*****************************************************

modelsim仿真結(jié)果:

6489175775579.jpg

很顯然,在例化子模塊時對位寬大于32的變量賦0時其實只對低32位賦了0值。

那么這樣的代碼風(fēng)格對設(shè)計實現(xiàn)有沒有影響呢?接著對設(shè)計進行綜合后出現(xiàn)以下警告(也提示只對低32位賦了值):

6489181383302.jpg

最后對設(shè)計進行分配引腳、實現(xiàn)以及生成bit文件并將bit文件下載到紅色颶風(fēng)開發(fā)板上驗證一下,發(fā)現(xiàn)led亮了(高電平點亮的),呵呵,一個不定值居然讓led亮了,我不知道硬件是怎么實現(xiàn)的。

(3)第三種:a <= {(DATA_WIDTH){1’b0}}; 其中DATA_WIDTH是經(jīng)過定義的參數(shù):parameter DATA_WIDTH = 64;對于第三種代碼風(fēng)格我是極力推薦的,因為它既實現(xiàn)參數(shù)化設(shè)計,又不會出現(xiàn)第二種代碼風(fēng)格的情況,具體呢,大家可以親自驗證下,哈哈!


回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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