小梅哥和你一起深入學(xué)習(xí)FPGA之點(diǎn)亮LED燈(下)
七、 測(cè)試平臺(tái)設(shè)計(jì)
本文引用地址:http://www.ex-cimer.com/article/270854.htm本實(shí)驗(yàn)主要對(duì)LED的輸出和輸入與復(fù)位的關(guān)系進(jìn)行測(cè)試仿真,通過(guò)仿真,即可驗(yàn)證設(shè)計(jì)的正確性和合理性。相關(guān)testbench的代碼如下:
以下是代碼片段:
`timescale 1ns/1ns
module LED_Driver_tb;
reg Rst_n;
reg [3:0] Sig;
wire [3:0] Led;
LED_Driver
#( /*參數(shù)例化*/
.Width (4)
)
LED_Driver_inst(/*端口例化*/
.Rst_n(Rst_n),
.Sig(Sig),/*OFF ON ON OFF*/
.Led(Led)
);
initial begin
Rst_n = 0;
Sig = 4'b1010;
#100;
Rst_n = 1;
#40 Sig = 4'b0001;
#40 Sig = 4'b0010;
#40 Sig = 4'b0011;
#40 Sig = 4'b0100;
#40 Sig = 4'b0101;
#40 Sig = 4'b0110;
#40 Sig = 4'b0111;
#40 Sig = 4'b1000;
#40 Sig = 4'b1001;
#40 Sig = 4'b1010;
#40 Sig = 4'b1011;
#40 Sig = 4'b1100;
#40 Sig = 4'b1101;
#40 Sig = 4'b1110;
#40 Sig = 4'b1111;
#40;
$stop;
end
endmodule
由testbench中可以看出,初始值給Sig賦了一個(gè)初始值,系統(tǒng)處于復(fù)位狀態(tài),100ns后,復(fù)位過(guò)程結(jié)束,系統(tǒng)進(jìn)入正常工作狀態(tài),Sig信號(hào)每隔一定時(shí)間變化一次。因此,只需要觀察Led信號(hào)與Sig信號(hào)的關(guān)系,即可驗(yàn)證設(shè)計(jì)的正確與否。
八、 仿真分析
由上圖仿真結(jié)果可知,當(dāng)復(fù)位信號(hào)為低電平時(shí),Led輸出全部為1,則所有LED熄滅,當(dāng)復(fù)位信號(hào)為高電平時(shí),則Led輸出與Sig信號(hào)一致,證明設(shè)計(jì)正確無(wú)誤。對(duì)于頂層模塊,仿真沒(méi)有什么太大的實(shí)際意義,因此不做仿真。
九、 下板驗(yàn)證
手頭暫無(wú)開(kāi)發(fā)板,板級(jí)驗(yàn)證略。
十、 總結(jié)
可能很多初學(xué)FPGA,又看過(guò)其它一些資料的同學(xué)會(huì)對(duì)小梅哥的這種組織方式感覺(jué)不太習(xí)慣,認(rèn)為本來(lái)一個(gè)代碼模塊就能搞定的事兒被我硬生生拆成了兩個(gè),增加了系統(tǒng)的復(fù)雜性。其實(shí),我這里主要是強(qiáng)調(diào)了一種建模的思想,我們所做的模塊一定要具有靈活性和通用性,當(dāng)其它設(shè)計(jì)中需要用到該外設(shè)時(shí),只需要關(guān)心其內(nèi)部端口就行了,在頂層例化時(shí)只需要將對(duì)應(yīng)信號(hào)接到該端口上就能實(shí)現(xiàn)功能了,不用再專門為了特定應(yīng)用再寫(xiě)一次。目前系統(tǒng)簡(jiǎn)單,可能大家還看不出這種方式的優(yōu)勢(shì),隨著以后的設(shè)計(jì)越來(lái)越復(fù)雜,大家就能很明顯的看到這種設(shè)計(jì)方式的優(yōu)勢(shì)所在了。
fpga相關(guān)文章:fpga是什么
led燈相關(guān)文章:led燈原理
評(píng)論