|
七、 測試平臺設計 本實驗主要對LED的輸出和輸入與復位的關系進行測試仿真,通過仿真,即可驗證設計的正確性和合理性。相關testbench的代碼如下: 以下是代碼片段: `timescale 1ns/1ns module LED_Driver_tb; reg Rst_n; reg [3:0] Sig; wire [3:0] Led; LED_Driver #( /*參數例化*/ .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賦了一個初始值,系統處于復位狀態,100ns后,復位過程結束,系統進入正常工作狀態,Sig信號每隔一定時間變化一次。因此,只需要觀察Led信號與Sig信號的關系,即可驗證設計的正確與否。 八、 仿真分析 由上圖仿真結果可知,當復位信號為低電平時,Led輸出全部為1,則所有LED熄滅,當復位信號為高電平時,則Led輸出與Sig信號一致,證明設計正確無誤。對于頂層模塊,仿真沒有什么太大的實際意義,因此不做仿真。 九、 下板驗證 手頭暫無開發板,板級驗證略。 十、 總結 可能很多初學FPGA,又看過其它一些資料的同學會對小梅哥的這種組織方式感覺不太習慣,認為本來一個代碼模塊就能搞定的事兒被我硬生生拆成了兩個,增加了系統的復雜性。其實,我這里主要是強調了一種建模的思想,我們所做的模塊一定要具有靈活性和通用性,當其它設計中需要用到該外設時,只需要關心其內部端口就行了,在頂層例化時只需要將對應信號接到該端口上就能實現功能了,不用再專門為了特定應用再寫一次。目前系統簡單,可能大家還看不出這種方式的優勢,隨著以后的設計越來越復雜,大家就能很明顯的看到這種設計方式的優勢所在了。 |