久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: FPGA設計代碼整潔之道2 [打印本頁]

作者: mdy-吳偉杰    時間: 2019-7-26 09:00
標題: FPGA設計代碼整潔之道2
《極限編程實施》作者Ron  Jeffries 仔細研究了貝克的簡單代碼規則,并依其重要順序分別列為:
  能通過所有測試
  沒有重復代碼
  體現系統中的全部涉及理念
  包括盡量少的實體,比如類、方法、函數等
能通過所有測試這一點,后文中在架構設計方面詳細說明,這里我們還是借助一個小的例子說明“沒有重復代碼”的一些技巧。
曾經有一次我將多份不同的程序代碼用A4紙打印出來,平攤到我的床上對照時,還在上小學的女兒在旁邊說道:爸比,你每天就是看這幾只毛毛蟲爬來爬去嗎?always、if、else,begin,對了,還有end,大概就是這幾只。小孩子幼稚的話語引得我哈哈大笑,當我回頭看向這些代碼時,突然記起一位大師說過的話:大部分程序都是由極為相似的元素構成。誠哉斯言!同時,由于這種相似性,許多程序中出現了重復的代碼。我們來看一下下面這組代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
assign data0 = {1'b1,din0,1'b0};
assign data1 = {1'b1,din1,1'b0};
assign data2 = {1'b1,din2,1'b0};
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        dout <= 0 ;
    end
    else if(sel0)begin
        dout <= data0[9-cnt2];
    end
    else if(sel1)begin
        dout <= data1[9-cnt2];
    end
    else begin
        dout <= data2[9-cnt2];
    end
end
這是一個串口發送程序的代碼,所實現的功能是發送0、1、2三個數據。很明顯,在第2到第4行中,相當于程序中同樣的事情做了三遍。第10到第19行也是選了三次,這就屬于重復的代碼。隨著信號越來越多,就需要不斷的四個、五個……N個。程序越來越累贅。
同一段代碼的反復出現,“唯一性”的邊界變得模糊,也容易出現混亂;蛘哒f,作者的想法沒有得到最佳的實現。在本例中假設通過搜索引擎輸入“?”就會得到相似的個結果。還記得前文中提到的“做簡單的事”嗎,這時我們應該思考是代碼自身贅余還是對象功能是否太多。如果是前者,應該從有效命名等去改善它;如果是后者,那就“把復雜的事情簡單化”,采取某種手段重構它,使功能可以清晰的被說明以及被實現。
如上面的代碼,正確的思路和做法應該是什么呢?我們來看下面這份代碼。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
always  @(*)begin
    if(sel0)
        din_sel = din0 ;
    else if(sel1)
        din_sel = din1 ;
    else
        din_sel = din2 ;
end
assign data = {1'b1,din_sel,1'b0};
always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        dout <= 0 ;
    end
    else begin
        dout <= data[9-cnt2];
    end
end
首先先把din0,1,2選出來,如果se10的情況下,那么din-se1等于din0;否則,在se11的情況下,那么din-se1等于din1;否則,din-se1等于din2;
接下來我們再來補充0和1;
接著選擇時序。dout的變化為XXXXXX,到此代碼完成。
通過比較不難看出,第二份代碼中,無論是補0補1,還是dout送出,都只做一次,一行代碼只做一件事且做好這件事,讓編程語言看起來像是專為解決這個問題而存在的。
還有一點,在本節的兩個例子中,驗證時前一份代碼要依次驗證,送出的信號din0,din,din2……din N,這個過程中任何一點出現錯誤都非常麻煩;而第二份代碼僅需要驗證它們之間的邏輯關系正確即可。
需要注意的是,本節是以一個非常小的信號輸出代碼為例。越是大型的、復雜的代碼,這兩種方法之間的效率和質量差距越大。下一節《信號命名和定義應該明確》






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产成人精品久久二区二区91 | 二区三区视频 | 中文字幕一区二区三区在线观看 | 欧美日韩专区 | 日本一区二区三区视频在线 | 久久久久久久一区 | 九九热这里只有精品在线观看 | 在线91| 欧美99久久精品乱码影视 | 欧美激情综合色综合啪啪五月 | 久久久久久国产精品免费免费狐狸 | 久久高清 | 国产情侣啪啪 | 日中文字幕在线 | 天堂成人国产精品一区 | 久久精品二区亚洲w码 | 久久亚洲精品国产精品紫薇 | 亚洲国产一区二区三区 | 午夜一级大片 | 亚洲精品久久久久中文字幕欢迎你 | 日韩一区二区三区在线看 | av色站 | 久久久久久亚洲欧洲 | 久久99蜜桃综合影院免费观看 | 四虎影音 | 免费三级网 | 亚洲精品国产一区 | 一二区成人影院电影网 | 国产亚洲高清视频 | 国产资源视频 | 亚洲婷婷六月天 | 免费污视频 | 欧美一级免费 | 少妇精品亚洲一区二区成人 | 91精品国产色综合久久 | 九九热最新地址 | 免费人成激情视频在线观看冫 | 亚洲国产精品人人爽夜夜爽 | 久久久精品一区二区 | 成人福利电影 | 毛片99 |