国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

FPGA代碼整潔之道3- 信號命名和定義應(yīng)該明確

發(fā)布時間:2018-9-4 09:23    發(fā)布者:luckyb1
在設(shè)計中,我們不斷的給目錄、源代碼、文件、函數(shù)、變量、參數(shù)、類、封包進行命名與定義。當(dāng)一件工作需要進行的次數(shù)非常之多,足以證明它是不可或缺的基本工作。我們一定要知道一點,基礎(chǔ)工作是整個項目的基石。忽視抑或是輕視基礎(chǔ)工作是一件非常錯誤的工作理念。我們需要用最嚴(yán)謹(jǐn)認(rèn)真的態(tài)度去對待,同時作為回報,它將令你的作品顯得專業(yè)而優(yōu)雅。
我們以信號的定義為例來說明這個問題。先來看這么一組代碼:
  
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
4344
  
45
  
464748
  
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;
  
    end
  
end
  
  
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;
  
    end
  
end
  
  
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;
  
    end
  
end
  
  
always  @(*)begin
  
    if(flag1)
  
        x = 5;
  
    else if(flag2)
  
        x = 7;
  
    else begin
  
        x = 0;
  
    end
  
end
  
這組代碼的功能是當(dāng)en1時計數(shù)5下;en2計數(shù)7下。在這組代碼中,en1時flag1拉高;end-cnt時flag1變低;en2時flag2拉高;end-cnt時flag2變低;也就是在flag1或者flag2時加一,然后用flag1和flag2分別區(qū)分計數(shù)5下和7下。
盡管能夠?qū)崿F(xiàn)功能,但是在這組代碼中,存在信號定義不明確得現(xiàn)象。 flag1和flag2到底是什么意思?是表示flag1(flag2)時en1產(chǎn)生,還是en1(en2)時的計數(shù)狀態(tài)?為說明這一點就得用到XXXXX (寫加一條件時需要用到add_cnt = flag1||flag2)語句。
這里重申一下我們很重要的那條簡單原則,一個代碼(信號)只做一件事且做好這件事!按照這個規(guī)則,思路就是這樣了:用一個信號flag1來表示計數(shù)狀態(tài),另外一個信號flag2表示是由en1還是en2所產(chǎn)生。那么,加一與否的條件非常簡單,就是是否處于工作狀態(tài)(flag1);同理,計數(shù)5或者7下只需要使用flag2一個信號。那么代碼就會是這樣:
  
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
3839
  
404142
  
43
  
44
  
45
  
  
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;
  
    end
  
end
  
  
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;
  
    end
  
end
  
  
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;
  
    end
  
end
  
  
always  @(*)begin
  
    if(flag==0)
  
        x = 5;
  
    else
  
        x = 7;
  
end
  
看到這里,也許有些朋友會覺得:好像區(qū)別沒那么大啊?ok,我們假設(shè)一下,如果程序中不僅是是en1,en2,而是有en3,en4……enX,又或者將來需要維護和優(yōu)化,這兩者的區(qū)別將會天壤之別。
關(guān)于信號定義方面,《至簡設(shè)計法》的作者潘文明給出了一個近乎完美的答案。例如在計數(shù)器代碼設(shè)計中的“架構(gòu)八步法”,第一步就是明確定義信號,用具體、清晰且無疑異的語句,定義每個信號所要實現(xiàn)的功能,以及重點描述信號的變化情況。如下圖中的信號列表。
信號列表。(4)(用文字版)
  
信號名
  
I/O
位寬
說明
clk
I
1
系統(tǒng)工作時鐘
rst_n
I
1
系統(tǒng)復(fù)位信號
Din_sop
I
1
當(dāng)vld=1時才有效,輸入報文頭指示信號
Din_eop
I
1
當(dāng)vld=1時才有效,輸入報文尾指示信號
Din_vld
I
1
輸入數(shù)據(jù)有效標(biāo)志,高電平有效
Din_err
I
1
輸入報文錯誤標(biāo)志,在eop有效時才有效
din
I
8
輸入數(shù)據(jù)總線
Dout_sop
O
1
當(dāng)vld=1時才有效,輸出報文頭指示信號
Dout_eop
O
1
當(dāng)vld=1時才有效,輸出報文尾指示信號
Dout_vld
O
1
輸出數(shù)據(jù)有效標(biāo)志,高電平有效
dout
O
8
輸出數(shù)據(jù)總線
Dout_err
O
1
輸出報文錯誤標(biāo)志,在eop有效時才有效
從中可以看出,優(yōu)秀的FPGA設(shè)計師一開始就從頂層結(jié)構(gòu)明確定義信號,將可能出現(xiàn)的混亂從根源上解決。這樣的思路和方法實在非常值得我們每一位從業(yè)者學(xué)習(xí)和借鑒。

FPGA整潔的代碼3.pdf

328.05 KB, 下載積分: 積分 -1

本文地址:http://www.qingdxww.cn/thread-546727-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 你仿真過嗎?使用免費的MPLAB Mindi模擬仿真器降低設(shè)計風(fēng)險
  • 利用模擬開發(fā)工具生態(tài)系統(tǒng)進行安全電路設(shè)計
  • 更佳設(shè)計的解決方案——Microchip模擬開發(fā)生態(tài)系統(tǒng)
  • 我們是Microchip
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费一区二区三区久久 | 国产freexxxx性播放麻豆 | 日干夜干天天干 | 国产成a人片在线观看视频99 | 欧美日韩国产最新一区二区 | 91伊人网| 天天操综合网 | 成zzzwww日本免费 | 日韩在线视频免费看 | 97免费在线| 婷婷丁香四月 | 青青青青久久国产片免费精品 | www.色香蕉 | 九九视频免费精品视频免费 | 久久er热这里只有精品23 | 日本高清不卡在线观看 | 精品国产三级 | 在线国产中文字幕 | 依欧美视频 | 五十路亲子中出中文字幕 | 好吊日视频在线 | 成人午夜小视频手机在线看 | 欧美一区二区三区黄色 | 久草国产精品 | 亚洲精品国产精品国自产 | 欧美最新在线 | 亚洲天堂国产精品 | 日韩特黄| 酒色激情网 | 四虎午夜| 欧美aaaaaaaa | 向日葵在线观看视频免费2019 | 久久99视频精品 | 亚洲三级视频在线观看 | 日韩我不卡| 老子影院午夜伦不卡不四虎卡 | 在线看片a免费人成漫画 | 另类视频区第一页 | 四虎影库网址 | 亚洲免费视频网 | 麻豆91在线播放 |