日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > ZYNQ
 

在設(shè)計(jì)中,我們不斷的給目錄、源代碼、文件、函數(shù)、變量、參數(shù)、類、封包進(jìn)行命名與定義。當(dāng)一件工作需要進(jìn)行的次數(shù)非常之多,足以證明它是不可或缺的基本工作。我們一定要知道一點(diǎn),基礎(chǔ)工作是整個(gè)項(xiàng)目的基石。忽視抑或是輕視基礎(chǔ)工作是一件非常錯(cuò)誤的工作理念。我們需要用最嚴(yán)謹(jǐn)認(rèn)真的態(tài)度去對(duì)待,同時(shí)作為回報(bào),它將令你的作品顯得專業(yè)而優(yōu)雅。我們以信號(hào)的定義為例來說明這個(gè)問題。先來看這么一組代碼:

always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt <= 0; end else if(add_cnt)begin if(end_cnt) cnt <= 0; else cnt <= cnt + 1; endend assign add_cnt = flag1||flag2 ; assign end_cnt = add_cnt && cnt==x-1 ; always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin flag1 <= 1'b0; end else if(en1)begin flag1 <= 1'b1; end else if(end_cnt)begin flag1 <= 1'b0; endend always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin flag2 <= 1'b1; end else if(en2)begin flag2 <= 1'b1; end else if(end_cnt)begin flag2 <= 1'b0; endend always @(*)begin if(flag1) x = 5; else if(flag2) x = 7; else begin x = 0; endend

這組代碼的功能是當(dāng)en1時(shí)計(jì)數(shù)5下;en2計(jì)數(shù)7下。在這組代碼中,en1時(shí)flag1拉高;end-cnt時(shí)flag1變低;en2時(shí)flag2拉高;end-cnt時(shí)flag2變低;也就是在flag1或者flag2時(shí)加一,然后用flag1和flag2分別區(qū)分計(jì)數(shù)5下和7下。盡管能夠?qū)崿F(xiàn)功能,但是在這組代碼中,存在信號(hào)定義不明確得現(xiàn)象。flag1和flag2到底是什么意思?是表示flag1(flag2)時(shí)en1產(chǎn)生,還是en1(en2)時(shí)的計(jì)數(shù)狀態(tài)?為說明這一點(diǎn)就得用到XXXXX (寫加一條件時(shí)需要用到add_cnt = flag1||flag2)語句。這里重申一下我們很重要的那條簡(jiǎn)單原則,一個(gè)代碼(信號(hào))只做一件事且做好這件事!按照這個(gè)規(guī)則,思路就是這樣了:用一個(gè)信號(hào)flag1來表示計(jì)數(shù)狀態(tài),另外一個(gè)信號(hào)flag2表示是由en1還是en2所產(chǎn)生。那么,加一與否的條件非常簡(jiǎn)單,就是是否處于工作狀態(tài)(flag1);同理,計(jì)數(shù)5或者7下只需要使用flag2一個(gè)信號(hào)。那么代碼就會(huì)是這樣:

always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt <= 0; end else if(add_cnt)begin if(end_cnt) cnt <= 0; else cnt <= cnt + 1; endend assign add_cnt = flag1 ; assign end_cnt = add_cnt && cnt==x-1 ; always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin flag1 <= 1'b0; end else if(en1||en2 )begin flag1 <= 1'b1; end else if(end_cnt)begin flag1 <= 1'b0; endend always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin flag2 <= 1'b1; end else if(en1)begin flag2 <= 1'b0; end else if(en2)begin flag2 <= 1'b1; endend always @(*)begin if(flag==0) x = 5; else x = 7;end 

看到這里,也許有些朋友會(huì)覺得:好像區(qū)別沒那么大???ok,我們假設(shè)一下,如果程序中不僅是是en1,en2,而是有en3,en4……enX,又或者將來需要維護(hù)和優(yōu)化,這兩者的區(qū)別將會(huì)天壤之別。關(guān)于信號(hào)定義方面,《至簡(jiǎn)設(shè)計(jì)法》的作者潘文明給出了一個(gè)近乎完美的答案。例如在計(jì)數(shù)器代碼設(shè)計(jì)中的“架構(gòu)八步法”,第一步就是明確定義信號(hào),用具體、清晰且無疑異的語句,定義每個(gè)信號(hào)所要實(shí)現(xiàn)的功能,以及重點(diǎn)描述信號(hào)的變化情況。

(4)(用文字版)信號(hào)名 I/O位寬說明clkI1系統(tǒng)工作時(shí)鐘rst_nI1系統(tǒng)復(fù)位信號(hào)Din_sopI1當(dāng)vld=1時(shí)才有效,輸入報(bào)文頭指示信號(hào)Din_eopI1當(dāng)vld=1時(shí)才有效,輸入報(bào)文尾指示信號(hào)Din_vldI1輸入數(shù)據(jù)有效標(biāo)志,高電平有效Din_errI1輸入報(bào)文錯(cuò)誤標(biāo)志,在eop有效時(shí)才有效dinI8輸入數(shù)據(jù)總線Dout_sopO1當(dāng)vld=1時(shí)才有效,輸出報(bào)文頭指示信號(hào)Dout_eopO1當(dāng)vld=1時(shí)才有效,輸出報(bào)文尾指示信號(hào)Dout_vldO1輸出數(shù)據(jù)有效標(biāo)志,高電平有效doutO8輸出數(shù)據(jù)總線Dout_errO1輸出報(bào)文錯(cuò)誤標(biāo)志,在eop有效時(shí)才有效 從中可以看出,優(yōu)秀的FPGA設(shè)計(jì)師一開始就從頂層結(jié)構(gòu)明確定義信號(hào),將可能出現(xiàn)的混亂從根源上解決。這樣的思路和方法實(shí)在非常值得我們每一位從業(yè)者學(xué)習(xí)和借鑒。如果你覺得有用的話,就請(qǐng)你回個(gè)貼或者贊,證明我的付出沒有白費(fèi),大家都不容易,祝我們?cè)缛瞻l(fā)財(cái)。PGA整潔代碼之道3-信號(hào)命名和定義應(yīng)該明確

在設(shè)計(jì)中,我們不斷的給目錄、源代碼、文件、函數(shù)、變量、參數(shù)、類、封包進(jìn)行命名與定義。當(dāng)一件工作需要進(jìn)行的次數(shù)非常之多,足以證明它是不可或缺的基本工作。我們一定要知道一點(diǎn),基礎(chǔ)工作是整個(gè)項(xiàng)目的基石。忽視抑或是輕視基礎(chǔ)工作是一件非常錯(cuò)誤的工作理念。我們需要用最嚴(yán)謹(jǐn)認(rèn)真的態(tài)度去對(duì)待,同時(shí)作為回報(bào),它將令你的作品顯得專業(yè)而優(yōu)雅。

我們以信號(hào)的定義為例來說明這個(gè)問題。先來看這么一組代碼:

always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt <= 0;endelse if(add_cnt)beginif(end_cnt)cnt <= 0;elsecnt <= cnt + 1;endendassign add_cnt = flag1||flag2 ;assign end_cnt = add_cnt && cnt==x-1 ;always @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginflag1 <= 1'b0;endelse if(en1)beginflag1 <= 1'b1;endelse if(end_cnt)beginflag1 <= 1'b0;endendalways @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginflag2 <= 1'b1;endelse if(en2)beginflag2 <= 1'b1;endelse if(end_cnt)beginflag2 <= 1'b0;endendalways @(*)beginif(flag1)x = 5;else if(flag2)x = 7;else beginx = 0;endend

這組代碼的功能是當(dāng)en1時(shí)計(jì)數(shù)5下;en2計(jì)數(shù)7下。在這組代碼中,en1時(shí)flag1拉高;end-cnt時(shí)flag1變低;en2時(shí)flag2拉高;end-cnt時(shí)flag2變低;也就是在flag1或者flag2時(shí)加一,然后用flag1和flag2分別區(qū)分計(jì)數(shù)5下和7下。

盡管能夠?qū)崿F(xiàn)功能,但是在這組代碼中,存在信號(hào)定義不明確得現(xiàn)象。flag1和flag2到底是什么意思?是表示flag1(flag2)時(shí)en1產(chǎn)生,還是en1(en2)時(shí)的計(jì)數(shù)狀態(tài)?為說明這一點(diǎn)就得用到XXXXX (寫加一條件時(shí)需要用到add_cnt = flag1||flag2)語句。

這里重申一下我們很重要的那條簡(jiǎn)單原則,一個(gè)代碼(信號(hào))只做一件事且做好這件事!按照這個(gè)規(guī)則,思路就是這樣了:用一個(gè)信號(hào)flag1來表示計(jì)數(shù)狀態(tài),另外一個(gè)信號(hào)flag2表示是由en1還是en2所產(chǎn)生。那么,加一與否的條件非常簡(jiǎn)單,就是是否處于工作狀態(tài)(flag1);同理,計(jì)數(shù)5或者7下只需要使用flag2一個(gè)信號(hào)。那么代碼就會(huì)是這樣:

always @(posedge clk or negedge rst_n)beginif(!rst_n)begincnt <= 0;endelse if(add_cnt)beginif(end_cnt)cnt <= 0;elsecnt <= cnt + 1;endendassign add_cnt = flag1 ;assign end_cnt = add_cnt && cnt==x-1 ;always @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginflag1 <= 1'b0;endelse if(en1||en2 )beginflag1 <= 1'b1;endelse if(end_cnt)beginflag1 <= 1'b0;endendalways @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginflag2 <= 1'b1;endelse if(en1)beginflag2 <= 1'b0;endelse if(en2)beginflag2 <= 1'b1;endendalways @(*)beginif(flag==0)x = 5;elsex = 7;end

看到這里,也許有些朋友會(huì)覺得:好像區(qū)別沒那么大?。縪k,我們假設(shè)一下,如果程序中不僅是是en1,en2,而是有en3,en4……enX,又或者將來需要維護(hù)和優(yōu)化,這兩者的區(qū)別將會(huì)天壤之別。

關(guān)于信號(hào)定義方面,《至簡(jiǎn)設(shè)計(jì)法》的作者潘文明給出了一個(gè)近乎完美的答案。例如在計(jì)數(shù)器代碼設(shè)計(jì)中的“架構(gòu)八步法”,第一步就是明確定義信號(hào),用具體、清晰且無疑異的語句,定義每個(gè)信號(hào)所要實(shí)現(xiàn)的功能,以及重點(diǎn)描述信號(hào)的變化情況。

從中可以看出,優(yōu)秀的FPGA設(shè)計(jì)師一開始就從頂層結(jié)構(gòu)明確定義信號(hào),將可能出現(xiàn)的混亂從根源上解決。這樣的思路和方法實(shí)在非常值得我們每一位從業(yè)者學(xué)習(xí)和借鑒。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉