真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

FPGA怎么正確復(fù)位

本篇內(nèi)容主要講解“FPGA怎么正確復(fù)位”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“FPGA怎么正確復(fù)位”吧!

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),金川企業(yè)網(wǎng)站建設(shè),金川品牌網(wǎng)站建設(shè),網(wǎng)站定制,金川網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,金川網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

1. 需不需要復(fù)位?

??看到這個(gè)問題,可能很多同學(xué)會(huì)有點(diǎn)懵,怎么可能不需要復(fù)位?其實(shí)Xilinx FPGA在系統(tǒng)上電配置時(shí),會(huì)有一個(gè)GSR(Global Set/Reset)的信號(hào),這個(gè)信號(hào)有以下幾個(gè)特點(diǎn):

  • 預(yù)布線

  • 高扇出

  • 可靠的

這個(gè)信號(hào)可初始化所有的cell,包括所有的Flip-Flop和BRAM。

FPGA怎么正確復(fù)位

如果我們?cè)诔绦蚶镉米约荷傻膹?fù)位信號(hào),也只能復(fù)位Flip-Flop。

??這個(gè)GSR信號(hào)我們可以在程序中通過實(shí)例化STARTUP直接調(diào)用,但Xilinx并不推薦這么使用。

FPGA怎么正確復(fù)位

主要原因是FPGA會(huì)把像系統(tǒng)復(fù)位這種高扇出的信號(hào)放到高速布線資源上,這比使用GSR要快,而且更容易進(jìn)行時(shí)序分析。

??雖然有GSR,但這并不是說要避免使用復(fù)位信號(hào),以下兩種情況就必須要加復(fù)位:

  • 帶有反饋的模塊,比如IIR這種濾波器和狀態(tài)機(jī),當(dāng)狀態(tài)跑飛了,就需要復(fù)位一下

FPGA怎么正確復(fù)位

  • 應(yīng)用過程中需要復(fù)位的寄存器

??這個(gè)就具體看是什么應(yīng)用了,我們公司的很多寄存器都需要在調(diào)試過程中需要經(jīng)常復(fù)位,像這種復(fù)位就是必須的了。

所以,需不需要復(fù)位完全看設(shè)計(jì)。這里多提一點(diǎn),時(shí)序收斂也是一樣,主要看設(shè)計(jì),而不是約束。 

2.同步復(fù)位 or 異步復(fù)位?

??在HDL中,如果敏感列表中不包含rst,會(huì)被綜合成同步復(fù)位:

always @ ( posedge clk )
begin
    if(rst)
        ...
end
 

如果敏感列表中包含rst,則會(huì)被綜合成異步復(fù)位:

always @ ( posedge clk or posedge rst)
begin
    ...
end

同步復(fù)位的好處,不言而喻,有利于時(shí)序分析,降低亞穩(wěn)態(tài)的幾率,避免毛刺。

同步信號(hào)的缺點(diǎn):

  • 復(fù)位信號(hào)有效電平持續(xù)時(shí)間必須大于時(shí)鐘周期,不然時(shí)鐘可能采不到復(fù)位

  • 在沒有時(shí)鐘的時(shí)候無法復(fù)位

??也有很多同學(xué)會(huì)說同步復(fù)位會(huì)需要額外的資源,但對(duì)于Xilinx的FPGA,是沒有這個(gè)問題的,具體原因后面講。

對(duì)于異步復(fù)位,好處就是同步復(fù)位的反方面:脈沖寬度沒有限制,沒有時(shí)鐘也可以復(fù)位。

缺點(diǎn)就是異步電路,容易引起亞穩(wěn)態(tài),產(chǎn)生毛刺,不利于時(shí)序分析,而且不同觸發(fā)器的復(fù)位時(shí)間可能不同。下面這個(gè)圖中,在A時(shí)刻接收到復(fù)位信號(hào)拉低的FF可以在下一個(gè)時(shí)鐘上升沿時(shí)就釋放復(fù)位狀態(tài),但C時(shí)刻接收到復(fù)位信號(hào)拉低的FF則在下下個(gè)時(shí)鐘上升沿時(shí)才能釋放復(fù)位狀態(tài)。

FPGA怎么正確復(fù)位

按照White Paper上所講,99.99%的概率這種情況都不會(huì)發(fā)生,但如果你剛好碰到一次這種現(xiàn)象,那你就是那0.01%。

下面我們來舉一個(gè)例子來說明同步復(fù)位和異步復(fù)位,F(xiàn)PGA為V7,代碼如下:

module rst_demo(
 input clk,
 input rst1,
 input rst2,
 input in1,
 input in2,
 output reg out1,
 output reg out2);

 always @ ( posedge clk )
 begin
    if(rst1)
        out1 <= 1'b0;
    else
        out1 <= in1;
 end

 always @ ( posedge clk or posedge rst2 )
 begin
    if(rst2)
        out2 <= 1'b0;
    else
        out2 <= in2;
 end

 endmodule

綜合后的schematic如下圖:

FPGA怎么正確復(fù)位

可以看出來,同步復(fù)位和異步復(fù)位都是占用一個(gè)Storage Element,我們?cè)谥暗囊黄恼轮兄v過Storage Element可以配置為L(zhǎng)atch,同樣的,也可以配置為FDRE和FDCE,而且在7Series手冊(cè)中也并未提到配置成FDRE或FDCE時(shí)是否會(huì)占用更多資源(比如,7Series的FPGA中,一個(gè)Slice中有8個(gè)Storage Element,如果其中一個(gè)被配置成了Latch,那有4個(gè)Storage Element是不能用的),因此在Xilinx的FPGA中,同步復(fù)位和異步復(fù)位在資源占用上,并沒有區(qū)別。

3.高復(fù)位 or 低復(fù)位?

??很多處理器上的復(fù)位都是低復(fù)位,這也導(dǎo)致了很多同學(xué)在使用復(fù)位信號(hào)時(shí)也習(xí)慣使用低復(fù)位了。但從我們上一節(jié)所講中可以看出,無論是同步復(fù)位還是異步復(fù)位,復(fù)位信號(hào)都是高有效,如果采用低復(fù)位,還需要增加一個(gè)反相器。

??如果接收到其他處理器發(fā)過來的低有效復(fù)位信號(hào),我們最好在頂層模塊中翻轉(zhuǎn)復(fù)位信號(hào)的極性,這樣做可以將反相器放入IO Logic中,不會(huì)占用FPGA內(nèi)部的邏輯資源和布線資源。

??這里多補(bǔ)充一點(diǎn),如果使用Zynq和Microblaze,則Reset模塊默認(rèn)是低復(fù)位,我們可以手動(dòng)設(shè)置為高復(fù)位。

4.全局復(fù)位 or 局部復(fù)位?怎么用?

??我們對(duì)復(fù)位常用的做法是將系統(tǒng)中的每個(gè)FF都連接到某個(gè)復(fù)位信號(hào),但這樣就造成了復(fù)位信號(hào)的高扇出,高扇出就容易導(dǎo)致時(shí)序的違規(guī)。而且全局復(fù)位占用的資源比我們想象中要高的多:

  • 布線資源占用

  • 其他網(wǎng)絡(luò)的布線空間就相應(yīng)減少

  • 可能會(huì)降低系統(tǒng)性能

  • 增加布線時(shí)間

  • 邏輯資源占用

  • 占用FF作為專門的復(fù)位電路

  • 如果該復(fù)位信號(hào)還受其他信號(hào)控制,會(huì)導(dǎo)致FF的輸入前增加門電路

  • 會(huì)增加整個(gè)設(shè)計(jì)的size

  • 增加的邏輯資源會(huì)影響系統(tǒng)性能

  • 增加布局布線時(shí)間

  • 全局復(fù)位不會(huì)使用像SRL16E這種高效結(jié)構(gòu)

  • 在LUT中SRL16E可當(dāng)作16個(gè)FF

  • 這些Virtual FF不支持復(fù)位

  • 增加設(shè)計(jì)的size,并降低系統(tǒng)性能

  • 增加布局布線時(shí)間

因此,Xilinx推薦盡量使用局部復(fù)位的方式,前面我們也講到然同步復(fù)位和異步復(fù)位都多多少少有些問題,那有沒有一種方式可以結(jié)合同步復(fù)位和異步復(fù)位的優(yōu)點(diǎn)?當(dāng)然有,就是異步復(fù)位,同步釋放。這種方法可以將兩者結(jié)合起來,取長(zhǎng)補(bǔ)短。如下圖所示,所謂異步復(fù)位,就是輸入的復(fù)位信號(hào)仍然是異步的,這樣可以保證復(fù)位信號(hào)能夠起效;而同步釋放是指當(dāng)復(fù)位信號(hào)釋放時(shí),輸出的sys_rst并不是立即變化,而且被FF延遲了一個(gè)時(shí)鐘周期,這樣讓復(fù)位和時(shí)鐘同步起來。

FPGA怎么正確復(fù)位

圖中的Verilog代碼如下:

module rst_demo(
 input      clk, 
 input      rst_async, 
 (* keep = "true" *)
 output  reg  rst_module1 = 0,
 (* keep = "true" *)
 output  reg  rst_module2 = 0
    );

reg         sys_rst;
reg         rst_r;

always @(posedge clk or posedge rst_async) begin
    if (rst_async) begin
        rst_r <= 1'b1;
    end
    else begin
        rst_r <= 1'b0;
    end
end

always @(posedge clk or posedge rst_async) begin
    if (rst_async) begin
        sys_rst <= 1'b1;
    end
    else begin
        sys_rst <= rst_r;
    end
end

always @ ( posedge clk ) begin
    rst_module1 <= sys_rst;
    rst_module2 <= sys_rst;
end

endmodule

綜合后的schematic如下圖:

FPGA怎么正確復(fù)位

異步復(fù)位模塊輸出的sys_rst通過n個(gè)D觸發(fā)器后輸出給n個(gè)模塊,當(dāng)做模塊的復(fù)位信號(hào)。

到此,相信大家對(duì)“FPGA怎么正確復(fù)位”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


當(dāng)前題目:FPGA怎么正確復(fù)位
網(wǎng)頁地址:http://weahome.cn/article/isgees.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部