Verilog基本電路設(shè)計(jì)_摘

Verilog基本電路設(shè)計(jì)之一:bit跨時(shí)鐘域同步

(帖子鏈接:bbs.eetop.cn/thread-605419-1-1.html)

看到壇子里不少朋友,對(duì)于基本數(shù)字電路存在這樣那樣的疑惑,本人決定開貼,介紹數(shù)字電路最常見的模塊單元,希望給初學(xué)者帶來幫助,也歡迎大佬們前來拍磚。如果想要做數(shù)字設(shè)計(jì),下面這些電路是一定會(huì)碰到的,也是所有大型IP,SOC設(shè)計(jì)必不可少的基礎(chǔ),主要包括異步信號(hào)的同步處理,同步FIFO,異步FIFO,時(shí)鐘無縫切換,信號(hào)濾波debounce等等,后面會(huì)根據(jù)大家反饋情況再介紹新電路。

首先介紹異步信號(hào)的跨時(shí)鐘域同步問題。一般分為單bit的控制信號(hào)同步,以及多bit的數(shù)據(jù)信號(hào)同步。多bit的信號(hào)同步會(huì)使用異步FIFO完成,而單bit的信號(hào)同步,又是時(shí)鐘無縫切換電路以及異步FIFO電路的設(shè)計(jì)基礎(chǔ),這里先介紹單bit信號(hào)同步處理。

clka域下的信號(hào)signal_a,向異步的clkb域傳遞時(shí),會(huì)產(chǎn)生亞穩(wěn)態(tài)問題。所有的亞穩(wěn)態(tài),歸根結(jié)底就是setup/hold時(shí)間不滿足導(dǎo)致。在同一個(gè)時(shí)鐘域下的信號(hào),綜合以及布線工具可以在data路徑或者clock路徑上插入buffer使得每一個(gè)DFF的setup/hold時(shí)間都滿足;但是當(dāng)signal_a在clkb域下使用時(shí),由于clka與clkb異步,它們的相位關(guān)系不確定,那么在clkb的時(shí)鐘沿到來時(shí),無法確定signal_a此時(shí)是否處于穩(wěn)定無變化狀態(tài),也即setup/hold時(shí)間無法確定,從而產(chǎn)生亞穩(wěn)態(tài)。這種異步信號(hào)在前后端流程里面是無法做時(shí)序分析的,也就是靜態(tài)時(shí)序分析里常說的false_path。

消除亞穩(wěn)態(tài),就是采用多級(jí)DFF來采樣來自另一個(gè)時(shí)鐘域的信號(hào),級(jí)數(shù)越多,同步過來的信號(hào)越穩(wěn)定。對(duì)于頻率很高的設(shè)計(jì),建議至少用三級(jí)DFF,而兩級(jí)DFF同步則是所有異步信號(hào)處理的最基本要求。

單bit的信號(hào)跨時(shí)鐘域同步,又分成電平信號(hào)同步以及脈沖信號(hào)同步。電平信號(hào),就是說clka下的信號(hào)signal_a在clkb看來,是一個(gè)很寬的信號(hào),會(huì)保持多個(gè)clkb的時(shí)鐘周期,一定能被clkb采到。這種情況,只需要使用clkb用至少兩級(jí)DFF連續(xù)抓signal_a即可,特別需要強(qiáng)調(diào)的是,此時(shí)signal_a必須是clka下的寄存器信號(hào),如果signal_a是clka下的組合邏輯信號(hào),一定要先在clka下用DFF抓一拍,再使用兩級(jí)DFF向clkb傳遞。這是因?yàn)閏lka下的組合邏輯信號(hào)會(huì)有毛刺,在clka下使用時(shí)會(huì)由setup/hold時(shí)間保證毛刺不會(huì)被clka采到,但由于異步相位不確定,組合邏輯的毛刺卻極有可能被clkb采到。電平信號(hào)的同步處理,一般用于知道確定的時(shí)鐘頻率大小關(guān)系或者極慢時(shí)鐘下的信號(hào)向極快時(shí)鐘域傳遞時(shí)使用,簡單處理如下:

always @ (posedge clkb or negedgerst_n)begin

if (!rst_n) begin

levl_b_d1 <= #DLY 1'b0;

levl_b_d2 <= #DLY 1'b0;

levl_b_d3 <= #DLY 1'b0;

end

else begin

levl_b_d1 <= #DLY levl_a_in;

levl_b_d2 <= #DLY levl_b_d1;

levl_b_d3 <= #DLY levl_b_d2;

endend

assign puls_b_pos = levl_b_d2 & (~levl_b_d3);

assign puls_b_neg = levl_b_d3 &(~levl_b_d2);

assign levl_b_out??= levl_b_d2;

上面三個(gè)輸出分別是經(jīng)過同步之后,clkb下可以使用的0變1脈沖信號(hào),1變0脈沖信號(hào)以及電平信號(hào)。再次強(qiáng)調(diào):levl_a_in必須是clka的DFF信號(hào)!下面是更常見的,clka下的脈沖信號(hào),同步到clkb時(shí)鐘域下,它對(duì)于clka與clkb的時(shí)鐘頻率關(guān)系沒有任何限制,快到慢,慢到快都沒問題。其主要原理就是先把脈沖信號(hào)在clka下展寬,變成電平信號(hào),再向clkb傳遞,當(dāng)確認(rèn)clkb已經(jīng)“看見”信號(hào)同步過去之后,再清掉clka下的電平信號(hào)。脈沖信號(hào)同步處理電路,有兩個(gè)地方使用了上面的電平信號(hào)同步處理原則,請(qǐng)仔細(xì)揣摩原因。詳細(xì)見下面的RTL,其中省略了信號(hào)定義聲明:

module sync_pulse (

// input

rst_n, ? ? ? ?// system reset

clka, ? ? ? ? // clockA

clkb, ? ? ? ? // clockB

puls_a_in, ? ?// pulse input from clka

// output

puls_b_out, ?// pulse output in clkb

levl_b_out ? ?// level output in clkb

);

parameter DLY =? 1; ?//

always @ (posedge clka or negedge rst_n)

begin

if (rst_n == 1'b0)

signal_a <= # DLY 1'b0 ;

else if (puls_a_in)

signal_a <= # DLY 1'b1 ;

else if (signal_b1_a2)

signal_a <= # DLY 1'b0 ;

else ;

end

always @ (posedge clkb or negedge rst_n)

begin

if (rst_n == 1'b0)

signal_b <= # DLY 1'b0 ;

else

signal_b <= # DLY signal_a ;

end

always @ (posedge clkb or negedge rst_n)

begin

if (rst_n == 1'b0) begin

signal_b_b1 <= # DLY 1'b0 ;

signal_b_b2 <= # DLY 1'b0 ;

end

else begin

signal_b_b1 <= # DLY signal_b ;

signal_b_b2 <= # DLY signal_b_b1 ;

end

end

always @ (posedge clka or negedge rst_n)

begin

if (rst_n == 1'b0) begin

signal_b1_a1 <= # DLY 1'b0 ;

signal_b1_a2 <= # DLY 1'b0 ;

end

else begin

signal_b1_a1 <= # DLY signal_b_b1 ;

signal_b1_a2 <= # DLY signal_b1_a1 ;

end

end

assign puls_b_out = signal_b_b1 & (~signal_b_b2) ;

assign levl_b_out = signal_b_b1 ;

endmodule

下一篇講時(shí)鐘切換電路。

留下一個(gè)思考題:clka下的同一個(gè)寄存器信號(hào)signal_a,電平寬度對(duì)clkb而言足夠長,如果同時(shí)調(diào)用兩個(gè)相同的電平同步模塊向clkb時(shí)鐘傳遞,分別得到levl_b1和levl_b2,那么在clkb時(shí)鐘域下看到的lev_b1和levl_b2信號(hào)是否一樣?

這個(gè)問題是實(shí)際設(shè)計(jì)中一不小心就會(huì)犯錯(cuò)的,如果能夠想明白正確回答這個(gè)問題,異步信號(hào)的理解就可以過關(guān)了。

Verilog基本電路設(shè)計(jì)之二:時(shí)鐘無縫切換

(帖子鏈接:http://bbs.eetop.cn/thread-605514-1-1.html)

時(shí)鐘切換分成兩種方式,普通切換和去毛刺無縫切換。

普通切換,就是不關(guān)心切出的時(shí)鐘是否存在毛刺,這種方式電路成本小。如果時(shí)鐘切換時(shí),使用此時(shí)鐘的模塊電路處于非工作狀態(tài),或者模塊內(nèi)電路被全局復(fù)位信號(hào)reset住的,即使切出毛刺也不會(huì)導(dǎo)致DFF誤觸發(fā),這樣的模塊可以選擇用此種切換方式。

寫法很簡單 assign clk_o = sel_clkb ? clkb : clka ,當(dāng)sel_clkb為1時(shí)選擇clkb,否則選擇clka。不過在實(shí)際設(shè)計(jì)中,建議直接調(diào)用庫里的MUX單元set_dont_touch,不要采用這里的assign寫法,因?yàn)檫@種寫法最后綜合得到的可能不是MUX而是復(fù)雜組合邏輯,給前后端流程的時(shí)鐘約束和分析帶來不便。

無縫切換,就是切換時(shí)無毛刺時(shí)鐘平穩(wěn)過渡。在時(shí)鐘切換中,只要出現(xiàn)比clka或者clkb頻率更高的窄脈沖,不論是窄的高電平還是窄的低電平,都叫時(shí)鐘毛刺。工作在切換后時(shí)鐘clk_o下的電路模塊,綜合約束是在max{clka,clkb}頻率下的,也就是說設(shè)計(jì)最后signoff的時(shí)候,只保證電路可以穩(wěn)定工作的最高頻率是max{clka,clkb},如果切換中出現(xiàn)更高頻的時(shí)鐘毛刺,電路可能出現(xiàn)無法預(yù)知的結(jié)果而出錯(cuò)。無縫切換,一般用在處于工作狀態(tài)的模塊需要調(diào)頻或者切換時(shí)鐘源,比如內(nèi)部系統(tǒng)總線,CPU等。你剛用手機(jī)打完游戲后馬上關(guān)屏聽音樂,這兩種場(chǎng)景中,CPU在滿足性能前提下為了控制功耗,其工作頻率會(huì)動(dòng)態(tài)地從很高調(diào)至較低,此時(shí)就可能是在CPU一直處于工作狀態(tài)下,通過無縫切換時(shí)鐘源頭實(shí)現(xiàn)的。

在無縫切換電路中,切換信號(hào)sel_clkb可以是任意時(shí)鐘域下的信號(hào),包括但不限于clka或者clkb域,但是sel_clkb必須是一個(gè)DFF輸出 信號(hào);clka與clkb的頻率大小相位關(guān)系可以任意。無縫切換需要解決兩個(gè)問題,一是異步切換信號(hào)的跨時(shí)鐘域同步問題,這里需要使用《Verilog基本電路設(shè)計(jì)之一》里的同步電路原理消除亞穩(wěn)態(tài);二是同步好了的切換信號(hào)與時(shí)鐘信號(hào)如何做邏輯,才能實(shí)現(xiàn)無毛刺。

下面寫出無縫切換電路的主體部分,忽略了內(nèi)部信號(hào)的定義聲明等。

module clk_switch (

rst_n,

clka,

clkb,

sel_clkb,

clk_o

);

always @ (posedge clka or negedge rst_n)

begin

if (!rst_n) begin

sel_clka_d0 <= 1'b0;

sel_clka_d1 <= 1'b0;

end

else begin

sel_clka_d0 <= (~sel_clkb) &(~sel_clkb_dly3) ;

sel_clka_d1 <= sel_clka_d0 ;

end

end

// part2

//always @ (posedge clka_n or negedge rst_n)

always @ (posedge clka or negedge rst_n)

begin

if (!rst_n) begin

sel_clka_dly1 <= 1'b0;

sel_clka_dly2 <= 1'b0;

sel_clka_dly3 <= 1'b0;

end

else begin

sel_clka_dly1 <= sel_clka_d1;

sel_clka_dly2 <= sel_clka_dly1 ;

sel_clka_dly3 <= sel_clka_dly2 ;

end

end

// part3

//always @ (posedge clkb_n or negedge rst_n)

always @ (posedge clkb or negedge rst_n)

begin

if (!rst_n) begin

sel_clkb_d0 <= 1'b0;

sel_clkb_d1 <= 1'b0;

end

else begin

sel_clkb_d0 <= sel_clkb &(~sel_clka_dly3) ;

sel_clkb_d1 <= sel_clkb_d0 ;

end

end

// part4

//always @ (posedge clkb_n or negedge rst_n)

always @ (posedge clkb or negedge rst_n)

begin

if (!rst_n) begin

sel_clkb_dly1 <= 1'b0;

sel_clkb_dly2 <= 1'b0;

sel_clkb_dly3 <= 1'b0;

end

else begin

sel_clkb_dly1 <= sel_clkb_d1??;

sel_clkb_dly2 <= sel_clkb_dly1 ;

sel_clkb_dly3 <= sel_clkb_dly2 ;

end

end

// part5

clk_gate_xxx clk_gate_a ( .CP(clka), .EN(sel_clka_dly3),.Q(clka_g)??.TE(1'b0) );

clk_gate_xxx clk_gate_b ( .CP(clkb), .EN(sel_clkb_dly3),.Q(clkb_g)??.TE(1'b0) );

//assign clka_g = clka & sel_clka_dly3 ;

//assign clkb_g = clkb & sel_clkb_dly3 ;

assign clk_o = clka_g | clkb_g ;

endmodule

上面是我認(rèn)為比較合理的無縫切換電路,其他切換方式跟這個(gè)會(huì)有些許出入,但基本大同小異原理是一樣的。有幾點(diǎn)說明:

1、拋開注釋掉的電路不看,由于part5部分直接調(diào)用庫里的clockgating cell,使得整個(gè)切換電路全部只需要用到時(shí)鐘上升沿,無需額外定義反向時(shí)鐘,精簡了DC綜合的時(shí)鐘約束;直接調(diào)用gating cell的 另一個(gè)好處是,前后端工具會(huì)自動(dòng)檢查gating cell的CP信號(hào)與EN信號(hào)的setup/hold時(shí)間,使得gating后的Q時(shí)鐘輸出無毛刺尖峰。TE端可以根據(jù)實(shí)際需要接上scan測(cè)試模式信號(hào)。如果使用part5部分的gating cell實(shí)現(xiàn),前面的part1,2,3,4全部替換成注釋掉的反相時(shí)鐘也是沒有問題。

2、part2和part4部分,具體需要多少級(jí)DFF,甚至完全不要也是可以的,這就回到了《Verilog基本電路設(shè)計(jì)之一》里討論的到底多少級(jí)DFF消除亞穩(wěn)態(tài)才算合理的問題。時(shí)鐘頻率很低可能無所謂,如果時(shí)鐘頻率達(dá)到GHz,這部分建議至少保留三級(jí)DFF,因?yàn)槿?jí)DFF延時(shí)也僅僅只有3ns的時(shí)間裕度。沒必要為了省這么幾個(gè)DFF降低電路可靠性,在復(fù)雜IP以及大型SOC系統(tǒng)中,你會(huì)發(fā)現(xiàn)多幾十個(gè)DFF,面積上可以忽略,系統(tǒng)可靠性和穩(wěn)定性才是首要的。

3、如果part5部分希望使用注釋掉的兩行“與”邏輯實(shí)現(xiàn)時(shí)鐘gating,此時(shí)part1與part3使用正相或者反相時(shí)鐘都可以,但是必須把part2和part4部分改為注釋掉的反相時(shí)鐘實(shí)現(xiàn),目的是初步從RTL設(shè)計(jì)上避免“與”邏輯的毛刺,同時(shí)還需要后端配合,因?yàn)楹芏嗪蠖斯ぞ邔?duì)時(shí)鐘“與”邏輯的clockgating check未必會(huì)檢查。用clk下降沿拍出的en信號(hào),再跟clk做與邏輯得到的門控時(shí)鐘,在RTL仿真階段看到的一定不會(huì)有毛刺,但是布線完成后,如果clk相對(duì)en后移,那與邏輯得到的門控時(shí)鐘就有毛刺了。這就是用與邏輯做門控的缺點(diǎn),由于后端工具可能不會(huì)去檢查這個(gè)與門的時(shí)序關(guān)系而導(dǎo)致出錯(cuò)。但直接調(diào)用庫里的gating cell,工具天然就會(huì)去檢查這個(gè)時(shí)序,免去人工確認(rèn)的后顧之憂。

最后,請(qǐng)大家仔細(xì)看看sel_clka_d0 <= (~sel_clkb) &?(~sel_clkb_dly3)??和sel_clkb_d0 <= sel_clkb & (~sel_clka_dly3) 這兩處邏輯,按理說,sel_clkb跟sel_clka_dly3以及sel_clkb_dly3之間相互都是異步的,而按照異步信號(hào)同步處理原則,兩個(gè)不同時(shí)鐘域下的信號(hào)是不允許直接做組合邏輯的,為什么這里可以這樣使用?

Verilog基本電路設(shè)計(jì)之三:異步FIFO

(帖子鏈接:http://bbs.eetop.cn/thread-605632-1-1.html)

FIFO用于為匹配讀寫速度而設(shè)置的數(shù)據(jù)緩沖buffer,當(dāng)讀寫時(shí)鐘異步時(shí),就是異步FIFO。多bit的數(shù)據(jù)信號(hào),并 不是直接從寫時(shí)鐘域同步到讀時(shí)鐘域的,而是讀寫時(shí)鐘域分別派遣了一個(gè)信使,去通知對(duì)方時(shí)鐘域,當(dāng)前本方所處的讀寫情況,來判斷還能不能寫以及可不可以讀,這兩個(gè)信使就是讀寫指針。

在《Verilog基本電路設(shè)計(jì)之一》里已討論過,即使單bit的異步信號(hào),通過兩個(gè)相同的同步電路,達(dá)到clkb域時(shí)都可能“長”的不是一個(gè)模樣,更加不用說多bit的異步信號(hào)同時(shí)傳遞到clkb域會(huì)變成什么五花八門的模樣了。這里讀寫指針不是單bit信號(hào),它們?nèi)绾蜗驅(qū)Ψ綍r(shí)鐘域去同步呢?格雷碼!它的特點(diǎn)是每次只有一個(gè)bit發(fā)生變化,這樣就把多bit信號(hào)同步轉(zhuǎn)變?yōu)榱藛蝏it信號(hào)同步,這也是為什么多bit的格雷碼信號(hào),可以類似于單bit信號(hào)那樣,直接使用兩級(jí)DFF去同步的根本原因。

下面給出異步FIFO的主體部分,同樣,省略了信號(hào)聲明定義。

module asyn_fifo (

// input

af_wclk , // async-FIFO clear in write clock

af_rclk , // async-FIFO clear in read clock

rst_n, ? ?// system reset

af_wr_en, // async-FIFO write enable

af_rd_en, // async-FIFO read enable

af_dati, ?// async-FIFO data in

//output

af_full , // Async-FIFO full flag

af_empty, // Async-FIFO empty flag

af_dato ? // Async-FIFO data out

);

//------------------------- data input --------------------------

assign nxt_wptr_wclk = (af_wr_en && !af_full) ? (wptr_wclk + 1'b1) :wptr_wclk ;

assign nxt_wptr_gray = (nxt_wptr_wclk >> 1) ^ nxt_wptr_wclk ;

always @ (posedge af_wclk or negedge rst_n)

begin

if (rst_n == 1'b0) begin

wptr_wclk <= # DLY 5'b0 ;

wptr_gray <= # DLY 5'b0 ;

end

else begin

wptr_wclk <= # DLY nxt_wptr_wclk ;

wptr_gray <= # DLY nxt_wptr_gray ;

end

end

reg??[31:0]? ???ram[15:0]????; //

always @ (posedge af_wclk)

begin

if (af_wr_en == 1'b1)

ram[wptr_wclk[3:0]] <= # DLY af_dati ;

else ;

end

//------------------------ data output ---------------------------

assign nxt_rptr_rclk = (af_rd_en && !af_empty) ? (rptr_rclk + 1'b1) :rptr_rclk ;

assign nxt_rptr_gray = (nxt_rptr_rclk >> 1) ^ nxt_rptr_rclk ;

always @ (posedge af_rclk or negedge rst_n)

begin

if (rst_n == 1'b0) begin

rptr_rclk <= # DLY 5'b0 ;

rptr_gray <= # DLY 5'b0 ;

end

else begin

rptr_rclk <= # DLY nxt_rptr_rclk ;

rptr_gray <= # DLY nxt_rptr_gray ;

end

end

assign af_dato = ram[rptr_rclk[3:0]] ;

// sync read pointer

always @ (posedge af_wclk or negedge rst_n)

begin

if (rst_n == 1'b0) begin

rptr_sp1??<= # DLY 5'b0 ;

rptr_sp2??<= # DLY 5'b0 ;

end

else begin

rptr_sp1??<= # DLY rptr_gray;

rptr_sp2??<= # DLYrptr_sp1??;

end

end

// sync write pointer

always @ (posedge af_rclk or negedge rst_n)

begin

if (rst_n == 1'b0) begin

wptr_sp1??<= # DLY 5'b0 ;

wptr_sp2??<= # DLY 5'b0 ;

end

else begin

wptr_sp1??<= # DLY wptr_gray;

wptr_sp2??<= # DLY wptr_sp1??;

end

end

assign af_full??= (wptr_gray =={~rptr_sp2[4],~rptr_sp2[3],rptr_sp2[2:0]}) ;

assign af_empty = (rptr_gray == wptr_sp2) ;

assign wptr_bin[4]??=? ?wptr_sp2[4] ;

assign wptr_bin[3]??=? ?(^wptr_sp2[4:3]) ;

assign wptr_bin[2]??=? ?(^wptr_sp2[4:2]) ;

assign wptr_bin[1]??=? ?(^wptr_sp2[4:1]) ;

assign wptr_bin[0]??=? ?(^wptr_sp2[4:0]) ;

assign rptr_bin[4]??=? ?rptr_sp2[4] ;

assign rptr_bin[3]??=? ?(^rptr_sp2[4:3]) ;

assign rptr_bin[2]??=? ?(^rptr_sp2[4:2]) ;

assign rptr_bin[1]??=? ?(^rptr_sp2[4:1]) ;

assign rptr_bin[0]??=? ?(^rptr_sp2[4:0]) ;

assign af_wlevel = wptr_wclk - rptr_bin ;

assign af_rlevel = wptr_bin - rptr_rclk ;

assign af_half_full = (af_rlevel >= 5'h7) ;

endmodule

上面給出的是深度16,寬度32的示例,大家可以使用parameter參數(shù)化定義深度和寬度,方便不同需求下的調(diào)用。除了空滿信號(hào)標(biāo)志,也可以根據(jù)需要做出半空半滿之類信號(hào)。上面需要注意的一點(diǎn)就是,格雷碼必須在本時(shí)鐘域下DFF輸出,再往另一個(gè)時(shí)鐘域同步。同步FIFO呢,就不用有格雷碼轉(zhuǎn)換,設(shè)計(jì)更加簡單,就不專門開貼描述了。

Verilog基本電路設(shè)計(jì)之四:去抖濾波

(帖子鏈接:http://bbs.eetop.cn/thread-605729-1-1.html)

debounce電路,就是常說的去抖濾波,主要用在芯片的PAD輸入信號(hào),或者模擬電路輸出給數(shù)字電路的信號(hào)上。

parameter BIT_NUM??= 4 ;

reg [BIT_NUM-1 : 0] signal_deb ; //

always @ (posedge clk or negedge rst_n)

begin

if (rst_n == 1'b0)

signal_deb <= {BIT_NUM{1'b0}} ;

else

signal_deb <= # DLY {signal_deb[BIT_NUM-2:0],signal_i} ;

end

always @ (posedge clk or negedge rst_n)

begin

if (rst_n == 1'b0)

signal_o <= 1'b1 ;

else if (signal_deb[3:1]==3'b111)

signal_o <= # DLY 1'b1 ;

else if (signal_deb[3:1]==3'b000)

signal_o <= # DLY 1'b0 ;

else ;

end

上面的電路,第一個(gè)always,還兼顧了去亞穩(wěn)態(tài)作用。它可以濾掉的寬度是兩個(gè)clk的cycle,對(duì)于大于兩個(gè)cycle而小于三個(gè)cycle的信號(hào),有些可以濾掉,有些不能濾掉,這與signal_i相對(duì)clk的相位有關(guān)。

根據(jù)希望濾除的寬度相關(guān),換算到clk下是多少個(gè)cycle數(shù),從而決定使用多少級(jí)DFF。如果希望濾除的寬度相對(duì) cycle數(shù)而言較大,可以先在clk下做一個(gè)計(jì)數(shù)器,產(chǎn)生固定間隔的脈沖,再在脈沖信號(hào)有效時(shí)使用多級(jí)DFF去抓signal_i;或者直接將clk分 頻后再使用。

摘自網(wǎng)上資源,侵刪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,656評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評(píng)論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,855評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,254評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,473評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,014評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,833評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,016評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,273評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評(píng)論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,730評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,006評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容

  • 一個(gè)VHDL程序代碼包含實(shí)體(entity)、結(jié)構(gòu)體(architecture)、配置(configuration...
    洛神紅梅花果茶丿閱讀 7,895評(píng)論 0 2
  • fpga規(guī)范 工作過的朋友肯定知道,公司里是很強(qiáng)調(diào)規(guī)范的,特別是對(duì)于大的設(shè)計(jì)(無論軟件還是硬件),不按照規(guī)范走幾乎...
    Michael_Johnson閱讀 1,895評(píng)論 1 4
  • testbench 1. 激勵(lì)的產(chǎn)生 對(duì)于testbench而言,端口應(yīng)當(dāng)和被測(cè)試的module一一對(duì)應(yīng)。端口分為...
    Michael_Johnson閱讀 2,686評(píng)論 0 1
  • 1 人有時(shí) ,一半是天使,一半是魔鬼。 沉靜的時(shí)候,枉如安靜的嬰兒那么美;憤怒的時(shí)候,像一只張牙舞爪的獅子,逮了誰...
    YIBAO閱讀 493評(píng)論 0 6
  • 《美人為餡》中,徐司白令人記憶猶新。他,是溫柔高貴的醫(yī)生,是血腥殘忍的黑暗帝王,是白錦曦的好閨蜜。可是,那又如何?...
    上官冰兒閱讀 416評(píng)論 3 4