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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6886|回復: 4
打印 上一主題 下一主題
收起左側

FPGA經典設計案例

[復制鏈接]
跳轉到指定樓層
樓主
ID:588548 發表于 2019-7-30 08:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
學習FPGA,最關鍵的是學什么?有讀者學了大半年時間的FPGA,學了串口就只懂串口的設計,學了SPI就只懂SPI接口的設計。每個接口、每個功能,都只是學一個懂一個。換個功能需求,或者對接口做一個小小的改動,就無從下手了。
設計代碼,從來都只是模仿,或者不斷地調試修改,湊代碼。設計出的代碼也沒有任何規律,相同的功能,今天設計和明天設計都不一樣。這就如學功夫,今天學下少林,明天學下武當,后天又學下華山,在這樣的情況下,能成長為高手,那就奇怪了。
在明德揚看來,FPGA設計應該有一套通用的設計方法。該方法能夠應付所有的功能設計,無論功能怎么變,都可以用該方法來套用。明德揚發明的這套方法就是至簡設計法。
至簡設計法從宏觀上,適應所有的功能設計需求。例如,無論是什么功能,我們都先將其轉化成需求波形。然后在此基礎上設計模塊架構;在模塊架構基礎上設計信號。這步驟都是通用的、是固化的。
至簡設計法在微觀上,則制定得實用的規范。詳細到,要不要添加信號;怎么添加信號;添加信號的名字規范等,我們都做了詳細的規定。
下面我們用4個經典例子,講述了至簡設計法的使用技巧。其他復雜功能,無論怎么變,都是這4個經典案例的變種。讀者只需要強化、鞏固技巧,多訓練,多應用,逐步成長為高手。
至簡設計法經典案例1
案例1. 當收到en=1后,dout產生一個寬度為10個時鐘周期的高電平脈沖。
需要說明,根據看波形規則,在第3個時鐘上沿的時候,看到en==1,根據功能要求,上升沿之后dout就會變為110個時鐘周期后,dout將變為0
從功能要求中,看到數字10,我們就知道要計數,并且是dout==1的次數為10個。所以我們計算的是dout==1的時鐘次數,并且是10次。為此,補充一個計數器信號cnt,更新后的波形如下圖。
計數器cnt要遵守如下原則。
初值一定為0
除了最后一個,在時鐘上升沿,看到dout==1,就將cnt值加1
在時鐘上升沿時看到dout==1,并且是最后一個時,cnt值不加1,直接清零。
從功能要求和波形圖,我們確認,計數器cnt是對dout==1進行計數,并且一共數10個。為此,在GVIM編輯器中輸入“Jsq”并回車,將出現如下代碼。
在第13行,輸入dout==1,在第14行代碼中,輸入10-1,這樣就完成了計數器設計。
代碼解釋:第1至第11行,是一個時序always的代碼。該代碼要描述的功能是:
在時鐘clk上升沿或者復位rst_n的下降沿的時候,always就對cnt判斷條件并變化一次。具體變化過程如下:
如果是rst_n==0,則將cnt變為0
否則(即rst_n==1),如果add_cnt有效,也就是為1的時候。繼續判斷條件并執行。
如果end_cnt有效,即end_cnt==1,則將cnt變為0
否則(即end_cnt==0),cnt就自加1
否則(即rst_n==1add_cnt==0的時鐘),cnt保持不變。
上面代碼中add_cnt表示計數器加1條件,end_cnt表示計數器數到最后一個。
上面代碼描述過于復雜,其實概括起來,功能就是:時鐘上升沿時,如果計數器加1條件有效,并且是數到最后一個,則計數器清零;如果計數器加1條件有效,但不是最后一個,則計數器就加1;其他時候,計數器就保持不變。
那么加1條件,即add_cnt是什么呢?在第13行進行了定義。該行代碼表示,dout==1就是計數器的加1條件。
那么結束條件,即end_cnt是什么呢?在第14行進行了定義。該行代碼表示,數到10個就結束。其中我們關注的是那個數字10,而-1是固定的格式。
add_cnt && cnt==10-1,含義是表示“數到第10個的時候”,add_cnt &&cnt==x-1表示“數到第x個的時候”。記住這個規則。end_cnt==1也表示數完了。
設計好計數器cnt后,我們就可以設計輸出信號dout了。仔細分析dout,該信號有兩個變化點:變1和變0。我們分析原因,dout1是由于收到en==1dout0,則是數到了10個或者是數完了。所以綜上所述,dout的代碼是:
至此,我們完成了主體程序的設計,接下來補充module的其他部分。
module的名稱定義為my_ex1。并且我們已經知道該模塊有4個信號:clkrst_nendout。為此,代碼如下:
其中clkrst_nen是輸入信號,dout是輸出信號,并且4個信號都是1比特的,根據這些信息,我們補充輸入輸出端口定義。代碼如下:
接下來定義信號類型。
cnt是用always產生的信號,因此類型為regcnt計數的最大值為9,需要用4根線表示,即位寬是4位。add_cntend_cnt都是用assign方式設計的,因此類型為wire。并且其值是0或者11個線表示即可。因此代碼如下:
dout是用always方式設計的,因此類型為reg。并且其值是0或者11根線表示即可。因此代碼如下:
至此,整個代碼的設計工作已經完成。整體代碼如下:
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
module my_ex1(
     clk      ,
     rst_n    ,
     en       ,
     dout      
);
input    clk     ;
input    rst_n   ;
input    en      ;
output   dout    ;

reg [ 3:0]  cnt     ;
wire        add_cnt ;
wire        end_cnt ;
reg         dout    ;


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 = (dout==1);      
assign end_cnt = add_cnt && cnt==10 -1 ;  

always  @(posedge clk or negedge rst_n)begin
    if(rst_n==1'b0)begin
        dout <= 0;
    end
    else if(en==1)begin
        dout <= 1;
    end
    else if(add_cnt && cnt==10-1)begin
        dout <= 0;
    end
end

endmodule
  如果你覺得有用的話,就請你回個貼或者贊,證明我的付出沒有白費,大家都不容易,q328908175,讓我們共同學習。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
ID:275826 發表于 2019-9-1 10:55 | 只看該作者
例子不錯,規范,有代表性
回復

使用道具 舉報

板凳
ID:435708 發表于 2019-9-1 13:42 | 只看該作者
不錯,最近在看正點原子FPGA的視頻,看了樓主的帖子,對程序的設計又有了新的理解
回復

使用道具 舉報

地板
ID:632402 發表于 2019-10-30 15:20 | 只看該作者
不錯,確實提倡樓主的做法
回復

使用道具 舉報

5#
ID:137243 發表于 2019-11-12 11:48 | 只看該作者
本帖最后由 天上跑著玩 于 2019-11-12 13:59 編輯

樓主
這里的

  if(end_cnt)
       cnt<=0;
     else
     cnt <= cnt+1;
    end
根據上面的cnt最大加到9時就會變成0
else if(en==1)
    begin
       dout<=1;
    end

else if(add_cnt && cnt==10-1)
    begin
       dout<=0;
    end

這邊也是cnt計數到9時就運行。
那么dout只會在clk上升沿觸發,那么dout在這個程序里會觸發不了。
要改成 cnt==10;


回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 2021天天干夜夜爽 | 午夜影院在线播放 | 国产精品久久久久久久久免费软件 | 精品一区二区三区四区视频 | 午夜在线小视频 | 国产精品网址 | 操操日| 自拍视频精品 | 亚洲热在线视频 | 日韩视频一区二区在线 | 国产成人精品视频在线观看 | 亚洲精品黄色 | aaa国产大片| 国产乱码精品1区2区3区 | 九一精品 | 天天操操 | 91在线免费视频 | 仙人掌旅馆在线观看 | 国产电影精品久久 | 色妹子综合网 | 久久成人在线视频 | 精品国产乱码久久久久久1区2区 | 自拍偷拍亚洲欧美 | 一区二区三区免费 | 91精品国产色综合久久不卡蜜臀 | 一区二区在线不卡 | 国产精品完整版 | 国产欧美日韩一区二区三区在线观看 | www性色| 在线观看中文字幕av | 91欧美激情一区二区三区成人 | 超级乱淫av片免费播放 | 国产精品美女久久久久久久久久久 | 涩涩导航| 久久久久久久一区 | 在线观看一区 | 亚洲www.| 日韩精品一区二区三区视频播放 | 成年人网站在线观看视频 | 成人不卡| 精品一区二区免费视频 |