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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2444|回復(fù): 0
收起左側(cè)

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

[復(fù)制鏈接]
ID:588548 發(fā)表于 2019-7-29 09:02 | 顯示全部樓層 |閱讀模式

在設(shè)計(jì)中,我們不斷的給目錄、源代碼、文件、函數(shù)、變量、參數(shù)、類、封包進(jìn)行命名與定義。當(dāng)一件工作需要進(jìn)行的次數(shù)非常之多,足以證明它是不可或缺的基本工作。我們一定要知道一點(diǎn),基礎(chǔ)工作是整個項(xiàng)目的基石。忽視抑或是輕視基礎(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時計(jì)數(shù)5下;en2計(jì)數(shù)7下。在這組代碼中,en1時flag1拉高;end-cnt時flag1變低;en2時flag2拉高;end-cnt時flag2變低;也就是在flag1或者flag2時加一,然后用flag1和flag2分別區(qū)分計(jì)數(shù)5下和7下。
盡管能夠?qū)崿F(xiàn)功能,但是在這組代碼中,存在信號定義不明確得現(xiàn)象。 flag1和flag2到底是什么意思?是表示flag1(flag2)時en1產(chǎn)生,還是en1(en2)時的計(jì)數(shù)狀態(tài)?為說明這一點(diǎn)就得用到XXXXX (寫加一條件時需要用到add_cnt = flag1||flag2)語句。
這里重申一下我們很重要的那條簡單原則,一個代碼(信號)只做一件事且做好這件事!按照這個規(guī)則,思路就是這樣了:用一個信號flag1來表示計(jì)數(shù)狀態(tài),另外一個信號flag2表示是由en1還是en2所產(chǎn)生。那么,加一與否的條件非常簡單,就是是否處于工作狀態(tài)(flag1);同理,計(jì)數(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,又或者將來需要維護(hù)和優(yōu)化,這兩者的區(qū)別將會天壤之別。
關(guān)于信號定義方面,《至簡設(shè)計(jì)法》的作者潘文明給出了一個近乎完美的答案。例如在計(jì)數(shù)器代碼設(shè)計(jì)中的“架構(gòu)八步法”,第一步就是明確定義信號,用具體、清晰且無疑異的語句,定義每個信號所要實(shí)現(xiàn)的功能,以及重點(diǎ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è)計(jì)師一開始就從頂層結(jié)構(gòu)明確定義信號,將可能出現(xiàn)的混亂從根源上解決。這樣的思路和方法實(shí)在非常值得我們每一位從業(yè)者學(xué)習(xí)和借鑒。
    如果你覺得有用的話,就請你回個貼或者贊,證明我的付出沒有白費(fèi),大家都不容易,祝我們早日發(fā)財(cái)。


回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品欧美精品 | 日韩欧美三级 | 麻豆精品久久久 | 久久久久久久久久久丰满 | 91精品久久久 | 精品国产伦一区二区三区观看体验 | 国产精品久久久久久久久免费樱桃 | 夜夜夜夜草| 午夜免费在线观看 | 午夜精品一区二区三区在线视频 | 在线视频成人 | 久久91av | 免费观看成人性生生活片 | 欧美伊人影院 | 精品福利视频一区二区三区 | 久久宗合色 | 日本三级全黄三级a | 毛片一级片 | 国产成人jvid在线播放 | 亚洲精品小视频在线观看 | 日韩一区二区三区av | 午夜影院在线视频 | 小草久久久久久久久爱六 | 亚洲精品高清视频在线观看 | 国产精品久久久久久久久久久久冷 | 中日韩av | 国产精品久久一区二区三区 | 欧美在线视频不卡 | 五月天婷婷综合 | 热99| 亚洲成人三级 | 第四色播日韩第一页 | 日日做夜夜爽毛片麻豆 | 亚洲一区二区三区四区五区中文 | 日本久久网 | 天天夜干 | 欧美激情国产精品 | 国产精品二区三区 | 美女视频黄色的 | 亚洲伦理自拍 | 久久久久久成人 |