⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)

【文(wén)章(zhāng)】USB3.0數據(jù)通(tòng)信(xìn)設計(jì)

發(fà)布(bù)时(shí)間(jiān):2021-06-24   作者(zhě):admin 浏覽量(liàng):

        

作为(wèi)一(yī)个(gè)即将畢業但由(yóu)于(yú)疫情(qíng)不(bù)能(néng)回(huí)校(xiào)的(de)研三(sān)学生(shēng)的(de)独白。。。。。。


真(zhēn)正(zhèng)和(hé)FPGA打(dǎ)交道(dào)應(yìng)該是(shì)刚读(dú)研一(yī)的(de)时(shí)候,不(bù)知道(dào)市(shì)场上(shàng)什麼(me)資料好(hǎo),可(kě)能(néng)和(hé)刚開(kāi)始学習FPGA的(de)同(tóng)学们(men)一(yī)樣(yàng),主(zhǔ)要(yào)心(xīn)态是(shì)想(xiǎng)快(kuài)速掌握这(zhè)門(mén)技術(shù),經(jīng)过(guò)一(yī)番(fān)調查選擇了(le)潘老(lǎo)师(shī)的(de)《手(shǒu)把手(shǒu)教你学FPGA設計(jì)》,終(zhōng)于(yú)被(bèi)大道(dào)至(zhì)簡的(de)至(zhì)簡設計(jì)法所(suǒ)打(dǎ)敗了(le)。


一(yī)、为(wèi)什麼(me)大道(dào)至(zhì)簡好(hǎo)用(yòng)且方(fāng)便


由(yóu)于(yú)《手(shǒu)把手(shǒu)教你学FPGA設計(jì)》書(shū)中(zhōng)講解(jiě)詳细(xì)且區(qū)域劃(huà)分(fēn)鮮明(míng),至(zhì)簡設計(jì)法最(zuì)大特(tè)點(diǎn)2个(gè),設計(jì)模板化(huà)和(hé)思(sī)考步驟化(huà)。


設計(jì)模板化(huà):

在(zài)設計(jì)上(shàng)明(míng)德揚把一(yī)些功能(néng)模板規範成(chéng)可(kě)複用(yòng)的(de)模板,我(wǒ)们(men)只(zhī)需要(yào)填入(rù)參數就(jiù)能(néng)把設計(jì)做出(chū)来(lái),极(jí)大地(dì)減少(shǎo)代(dài)碼上(shàng)不(bù)必要(yào)的(de)錯誤,我(wǒ)们(men)只(zhī)需要(yào)專心(xīn)做好(hǎo)設計(jì); 


思(sī)考步驟化(huà):

至(zhì)簡設計(jì)法能(néng)幫助我(wǒ)们(men)形成(chéng)嚴谨的(de)邏輯思(sī)維,做到(dào)設計(jì)有(yǒu)根(gēn)據(jù)、思(sī)考有(yǒu)步驟。 


过(guò)多(duō)贅述不(bù)必多(duō)说(shuō),就(jiù)像潘老(lǎo)师(shī)所(suǒ)说(shuō)过(guò)那(nà)樣(yàng),学好(hǎo)FPGA最(zuì)重(zhòng)要(yào)就(jiù)是(shì)狀态機(jī)和(hé)計(jì)數器,記(jì)住,这(zhè)是(shì)重(zhòng)點(diǎn),要(yào)考的(de)!!!

其实刚開(kāi)始我(wǒ)沒(méi)認为(wèi)这(zhè)两(liǎng)項多(duō)麼(me)重(zhòng)要(yào),哈哈哈,但是(shì)随着工程代(dài)碼量(liàng)的(de)不(bù)斷增大以(yǐ)及(jí)对(duì)时(shí)序等要(yào)求的(de)不(bù)斷增強(qiáng),愈發(fà)覺得基礎才能(néng)決定(dìng)上(shàng)层建築。而(ér)反(fǎn)观三(sān)段(duàn)式或(huò)四(sì)段(duàn)式狀态機(jī)代(dài)碼清(qīng)晰,結構分(fēn)明(míng),你所(suǒ)需要(yào)做的(de)只(zhī)是(shì)添磚(zhuān)加瓦(wǎ),也(yě)就(jiù)是(shì)你自(zì)己的(de)狀态,因(yīn)为(wèi)地(dì)基已經(jīng)为(wèi)你搭好(hǎo)了(le)。再说(shuō)計(jì)數器,應(yìng)該说(shuō)沒(méi)有(yǒu)什麼(me)说(shuō)的(de)了(le),擡手(shǒu)就(jiù)写,因(yīn)为(wèi)代(dài)碼放(fàng)在(zài)那(nà)了(le)啊,只(zhī)需要(yào)添加你的(de)加一(yī)和(hé)結束(shù)条(tiáo)件(jiàn)就(jiù)可(kě)以(yǐ)了(le)啊!!!現(xiàn)在(zài)想(xiǎng)想(xiǎng)當初的(de)我(wǒ)为(wèi)什麼(me)要(yào)特(tè)立独行!!!導致(zhì)在(zài)仿真(zhēn)階(jiē)段(duàn)浪費好(hǎo)多(duō)时(shí)間(jiān)。

二(èr). USB3.0數據(jù)通(tòng)信(xìn)

        最(zuì)近(jìn)写的(de)代(dài)碼(也(yě)不(bù)是(shì)最(zuì)近(jìn)了(le),大約在(zài)过(guò)年(nián)回(huí)家(jiā)之前(qián))是(shì)關(guān)于(yú)USB3.0數據(jù)通(tòng)信(xìn)的(de),这(zhè)里(lǐ)多(duō)说(shuō)幾(jǐ)句(jù),板子前(qián)期(qī)是(shì)購買(mǎi)的(de),後(hòu)来(lái)自(zì)己設計(jì)的(de)。代(dài)碼部(bù)分(fēn)是(shì)賣(mài)家(jiā)提(tí)供(具體(tǐ)名稱不(bù)方(fāng)便透露(lù),因(yīn)为(wèi)我(wǒ)不(bù)是(shì)挑事(shì)的(de)人(rén),哈哈哈),但是(shì)真(zhēn)的(de)是(shì)他(tā)的(de)代(dài)碼太繁瑣以(yǐ)及(jí)太不(bù)易搞懂且移植性(xìng)太差了(le),但比較好(hǎo)的(de)是(shì)我(wǒ)自(zì)己写也(yě)不(bù)浪費什麼(me)事(shì)情(qíng),我(wǒ)将USB3.0的(de)狀态分(fēn)为(wèi)读(dú),写,空閑三(sān)个(gè),然後(hòu)根(gēn)據(jù)三(sān)段(duàn)式順利写好(hǎo)屬于(yú)自(zì)己的(de)代(dài)碼。源代(dài)碼在(zài)下(xià)面(miàn),哈哈哈,如(rú)果(guǒ)可(kě)以(yǐ)的(de)話(huà)請不(bù)要(yào)亂發(fà)或(huò)者(zhě)幫我(wǒ)打(dǎ)碼,畢竟畢業論文(wén)里(lǐ)還(huán)在(zài)用(yòng)。并且家(jiā)里(lǐ)電(diàn)腦真(zhēn)的(de)是(shì)什麼(me)软(ruǎn)件(jiàn)都沒(méi)安(ān)裝(zhuāng),我(wǒ)就(jiù)用(yòng)記(jì)事(shì)本(běn)複制过(guò)来(lái)的(de)。

2.1. USB3.0控制模块(kuài)參考代(dài)碼

信(xìn)号(hào)
類(lèi)型
位宽(kuān)
意(yì)義
clk
輸入(rù)
1
时(shí)鐘(zhōng)信(xìn)号(hào)
pclk_in
輸入(rù)
1
USB芯片(piàn)複位信(xìn)号(hào)
rst_n
輸入(rù)
1
複位信(xìn)号(hào),低電(diàn)平有(yǒu)效
flag_a
輸入(rù)
1
USB芯片(piàn)标(biāo)志位,控制写狀态
flag_b
輸入(rù)
1
USB芯片(piàn)标(biāo)志位,控制写狀态
flag_c
輸入(rù)
1
USB芯片(piàn)标(biāo)志位,控制读(dú)狀态
flag_d
輸入(rù)
1
USB芯片(piàn)标(biāo)志位,控制读(dú)狀态
pclk
輸出(chū)
1
USB芯片(piàn)複位信(xìn)号(hào)
slcs
輸出(chū)
1
USB芯片(piàn)片(piàn)選信(xìn)号(hào)
sloe
輸出(chū)
1
USB芯片(piàn)控制信(xìn)号(hào)
slrd
輸出(chū)
1
USB芯片(piàn)读(dú)狀态選擇信(xìn)号(hào)
slwr
輸出(chū)
1
USB芯片(piàn)写狀态選擇信(xìn)号(hào)
pktend
輸出(chū)
1
USB芯片(piàn)數據(jù)包(bāo)信(xìn)号(hào)
fifo_addr
輸出(chū)
2
USB芯片(piàn)數據(jù)读(dú)取(qǔ)方(fāng)向(xiàng)控制信(xìn)号(hào)
usb_data
双(shuāng)向(xiàng)
32
USB3.0數據(jù)
cmd_flag
輸出(chū)
1
USB傳輸數據(jù)标(biāo)志位
cmd_data
輸出(chū)
32
USB傳輸數據(jù)

module  USB_command(
        input                   clk  ,
        input                   pclk_in  ,
        input                   rst_n  ,
        //usb
        input                   flag_a  ,
        input                   flag_b  ,
        input                   flag_c  ,
        input                   flag_d  ,
output  wirepclk                            ,
output  wireslcs                            ,
output  reg             sloe                            ,
output  regslrd                            ,
output  regslwr                            ,
output  wirepktend                          ,
output  reg   [ 1: 0]   fifo_addr                       ,
inoutwire  [31: 0]   usb_data                        ,
output  regcmd_flag                        ,
output  wire  [31: 0]   cmd_data
                
                                
);
parameter   IDLE            =   4'b0001                         ;
parameter   WRITE           =   4'b0010                         ;
parameter   READ            =   4'b0100                         ;
reg   [ 3: 0]                 state_c /*synthesis preserve*/  ;
reg   [ 3: 0]                 state_n /*synthesis preserve*/  ;
//cnt
reg   [31: 0]                 cnt                             ;
wire                            add_cnt  ;
wire                            end_cnt  ;
reg   [15: 0]                 rd_cnt                          ;
reg   [15: 0]                 rd_data_len                     ;
regwr_trig                         ;//写觸發(fà)
assign  slcs        =   1'b0;
assign  pclk        =   pclk_in;
assign  pktend      =   1'b1;
assign  usb_data    =   (!slwr) ? usb_write_data : 32'dz;
wire[31:0]  usb_write_data ;
//state_c
always@(posedgeclk or negedgerst_n)begin
    if(!rst_n)begin
state_c<= IDLE;
    end
    else begin
state_c<= state_n;
    end
end
//state_n
always@(*)begin
    case(state_c)
IDLE:begin
if(flag_a&&flag_b&&wr_trig)begin
state_n = WRITE;
            end
            else if(flag_c&&flag_d)begin
state_n = READ;                                        
            end
            else begin
state_n = state_c;                                        
            end
        end
WRITE:begin
            if(flag_b == 1'b0)begin //写滿
state_n = IDLE;
            end
            else begin
state_n = state_c;
            end
        end
READ:begin
            if(flag_d == 1'b0)begin //读(dú)空
state_n = IDLE;
            end
            else begin
state_n = state_c;
            end
        end
default:begin
state_n = IDLE;
        end
endcase
end
//fifo_addr
always  @(posedgeclk or negedgerst_n)begin
if(rst_n == 1'b0)begin
fifo_addr<=  2'b00;
        sloe        <=  1'b1;
    end
    else if(state_c==READ)begin
fifo_addr<=  2'b11;
        sloe        <=  1'b0;
    end
    else begin
fifo_addr<=  2'b00;
        sloe        <=  1'b1;
    end
end
//slwr 輸出(chū)信(xìn)号(hào),用(yòng)时(shí)序邏輯好(hǎo)點(diǎn)
always  @(posedgeclk or negedgerst_n)begin
if(rst_n == 1'b0)begin
slwr<=  1'b1;
    end
    else if(state_c==WRITE)begin
slwr<=  1'b0;
    end
    else begin
slwr<=  1'b1;
    end
end
//slrd
always  @(posedgeclk or negedgerst_n)begin
if(rst_n == 1'b0)begin
slrd<=  1'b1;
    end
    else if(state_c==READ)begin
slrd<=  1'b0;
    end
    else begin
slrd<=  1'b1;
    end
end
//rd_cnt
always  @(posedgeclk or negedgerst_n)begin
if(rst_n == 1'b0)begin
rd_cnt<=  16'd0;
    end
    else if(slrd)begin
rd_cnt<=  16'd0;
    end
    else begin
rd_cnt<=  rd_cnt + 1'b1;
    end
end
//rd_data_len
always  @(posedgeclk or negedgerst_n)begin
if(rst_n == 1'b0)begin
rd_data_len<=  16'd0;
    end
    else if(rd_cnt == 16'd3)begin
rd_data_len<=  usb_data + 16'd3;
    end
end
//cmd_flag
always  @(posedgeclk or negedgerst_n)begin
if(rst_n == 1'b0)begin
cmd_flag<=  1'b0;
    end
    else if(rd_cnt == 16'd3)begin
cmd_flag<=  1'b1;
    end
    else if(rd_cnt == rd_data_len)begin
cmd_flag<=  1'b0;
    end
end
assign  cmd_data   =   usb_data ;  //将cmd_flag與(yǔ)cmd_data配合使用(yòng)                                   
//cnt
always @(posedgeclk or negedgerst_n)begin
    if(!rst_n)begin
cnt<= 0;
    end
    else if(add_cnt)begin
        if(end_cnt)
cnt<= 0;
        else
cnt<= cnt + 1;
    end
    else begin
cnt<= 0;
    end
end
assign  add_cnt     =       state_c==WRITE;      
assign  end_cnt     =       add_cnt&&cnt == 4096-1;   //测試用(yòng)的(de)計(jì)數數據(jù)
//wr_trig
always  @(posedgeclk or negedgerst_n)begin
if(rst_n == 1'b0)begin
wr_trig<=  1'b0;
    end
    else if(cmd_flag&&cmd_data == 32'h11111111)begin
wr_trig<=  1'b1;
    end
    //else if(slwr == 1'b0)begin //開(kāi)始写的(de)时(shí)候,将wr_trig拉低   
      //  wr_trig<=  1'b0;
    //end
end
//fifo 读(dú)請求
regfifo_rdeq;
always  @(posedgeclk or negedgerst_n)begin
if(rst_n == 1'b0)begin
fifo_rdeq<=  1'b0;                
    end
    else if(flag_a )begin                
                fifo_rdeq<=  1'b1;        
    end
    else fifo_rdeq<= 1'b1;
end
//fifo 写請求
regfifo_wdeq;
always  @(posedgeclk or negedgerst_n)begin
if(rst_n == 1'b0)begin
fifo_wdeq<=  1'b0;
    end
    else if(flag_c)begin
fifo_wdeq<=  1'b1;
    end
    else fifo_wdeq<= 1'b1;
end
//FIFO
fifo        fifo_inst (        
        .clock (clk),
        .data ( cnt ),
        .rdreq ( fifo_rdeq ),
        .wrreq ( fifo_wdeq ),
        .q ( usb_write_data )
        );
Endmodule

2.2. 明(míng)德揚的(de)signaltap教程及(jí)仿真(zhēn)验(yàn)證

       这(zhè)里(lǐ)還(huán)得感(gǎn)謝明(míng)德揚的(de)signaltap教程,因(yīn)为(wèi)USB通(tòng)信(xìn)的(de)數據(jù)線(xiàn)为(wèi)32根(gēn),因(yīn)此(cǐ)調試階(jiē)段(duàn)使用(yòng)modelsim真(zhēn)的(de)不(bù)太好(hǎo)用(yòng),所(suǒ)以(yǐ)根(gēn)據(jù)明(míng)德揚所(suǒ)講的(de)signaltap教程,我(wǒ)很容易的(de)实現(xiàn)了(le)抓图(tú),分(fēn)析出(chū)代(dài)碼問(wèn)題(tí),并且我(wǒ)自(zì)己的(de)體(tǐ)会(huì),signaltap真(zhēn)的(de)就(jiù)像現(xiàn)实的(de)示波(bō)器啊!!!好(hǎo)处自(zì)己去(qù)鑽(zuàn)研吧。下(xià)面(miàn)是(shì)抓图(tú),通(tòng)过(guò)抓图(tú)分(fēn)析數據(jù)簡直(zhí)不(bù)要(yào)太快(kuài)!!

三(sān). 結論

       

无論是(shì)FPGA初学者(zhě),還(huán)是(shì)已經(jīng)工作的(de)工程师(shī),都推薦学習明(míng)德揚的(de)至(zhì)簡設計(jì)法,一(yī)定(dìng)会(huì)有(yǒu)大大的(de)收(shōu)獲。最(zuì)後(hòu),祝福明(míng)德揚越来(lái)越好(hǎo),大道(dào)至(zhì)簡,受益匪淺。願桃李不(bù)言下(xià)自(zì)成(chéng)蹊,終(zhōng)其教育,无外(wài)乎傳道(dào)授業解(jiě)惑,古有(yǒu)孔丘弟三(sān)千(qiān),願今师(shī)者(zhě)百(bǎi)樹(shù)人(rén)。



   拓展(zhǎn)閱读(dú)
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨