色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x

玩轉(zhuǎn)Zynq連載26——Vivado中PL的功能仿真

發(fā)布時(shí)間:2019-9-20 12:10    發(fā)布者:rousong1989
玩轉(zhuǎn)Zynq連載26——VivadoPL的功能仿真
更多資料共享
騰訊微云鏈接:https://share.weiyun.com/5s6bA0s
百度網(wǎng)盤(pán)鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw
提取碼:ld9c
騰訊微云鏈接:https://share.weiyun.com/5s6bA0s
百度網(wǎng)盤(pán)鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw
提取碼:ld9c
1仿真驗(yàn)證概述
         仿真測(cè)試是FPGA設(shè)計(jì)流程中必不可少的步驟。尤其在FPGA規(guī)模和設(shè)計(jì)復(fù)雜性不斷提高的今天,畫(huà)個(gè)簡(jiǎn)單的原理圖或?qū)憥仔写a直接就可以上板調(diào)試的輕松活兒已經(jīng)一去不復(fù)返。一個(gè)正規(guī)的設(shè)計(jì)需要花費(fèi)在驗(yàn)證上的工作量往往可能會(huì)占到整個(gè)開(kāi)發(fā)流程的70%左右。驗(yàn)證我們通常分為仿真驗(yàn)證和板級(jí)驗(yàn)證,在設(shè)計(jì)初步完成功能甚至即將上板調(diào)試前,通過(guò)EDA仿真工具模擬實(shí)際應(yīng)用進(jìn)行驗(yàn)證是非常有效可行的手段,它能夠盡早的發(fā)現(xiàn)設(shè)計(jì)中存在的各種大小bug,避免設(shè)計(jì)到了最后一步才返工重來(lái)。因此,仿真在整個(gè)驗(yàn)證中的重要性可見(jiàn)一斑。
         提到仿真,我們通常會(huì)提testbench的概念。所謂testbench,即測(cè)試平臺(tái),詳細(xì)的說(shuō)就是給待驗(yàn)證的設(shè)計(jì)添加激勵(lì),同時(shí)觀察它的輸出響應(yīng)是否符合設(shè)計(jì)要求。如圖所示,測(cè)試平臺(tái)就是要模擬一個(gè)和待驗(yàn)證設(shè)計(jì)相連接的各種外圍設(shè)備。
圖設(shè)計(jì)與驗(yàn)證
         初學(xué)者在剛接觸仿真這個(gè)概念的時(shí)候,可能以為仿真只是簡(jiǎn)單的用一些開(kāi)發(fā)軟件自帶的波形發(fā)生器產(chǎn)生一些激勵(lì),然后觀察一下最后的波形輸出就完事了。但是對(duì)于大規(guī)模的設(shè)計(jì),用波形產(chǎn)生激勵(lì)是不現(xiàn)實(shí)的,觀察波形的工作量也是可想而知的。例如,對(duì)于一個(gè)16位的輸入總線,它可以有65536種組合,如果每次隨機(jī)產(chǎn)生一種輸入,那用波形豈不累死人。再說(shuō)輸出結(jié)果的觀察,對(duì)應(yīng)65536種輸入的65536種輸出,看波形肯定讓人花眼繚亂。所以,testbench應(yīng)該有更高效的測(cè)試手段。對(duì)于FPGA的仿真,使用波形輸入產(chǎn)生激勵(lì)是可以的,觀察波形輸出以驗(yàn)證測(cè)試結(jié)果也是可以的,波形也許是最直觀的測(cè)試手段,但絕不是唯一手段。
         如圖所示,設(shè)計(jì)的測(cè)試結(jié)果判斷不僅可以通過(guò)觀察對(duì)比波形,而且可以靈活的使用腳本命令將有用的輸出信息打印到終端或者產(chǎn)生文本進(jìn)行觀察,也可以寫(xiě)一段代碼讓他們自動(dòng)比較輸出結(jié)果?傊,testbench的設(shè)計(jì)是多種多樣的,它的語(yǔ)法也是很隨意的,不像RTL級(jí)設(shè)計(jì)代碼那么多講究,它是基于行為級(jí)的語(yǔ)法,很多高級(jí)的語(yǔ)法都可以在腳本中使用。因?yàn)樗恍枰獙?shí)現(xiàn)到硬件中,它是運(yùn)行在PC機(jī)上的一段腳本,所以相對(duì)RTL級(jí)可以做得更容易更靈活一些。但是,使用Verilog的驗(yàn)證腳本也有很多需要設(shè)計(jì)者留意的地方,它是一種基于硬件語(yǔ)言但是又服務(wù)于軟件測(cè)試的語(yǔ)言,所以它常常游離于并行和順序之間讓人琢磨不透。不過(guò),只要掌握好了這些關(guān)鍵點(diǎn),是可以很好的讓它服務(wù)于我們的測(cè)試。
圖驗(yàn)證輸出
2 Testbench的設(shè)計(jì)
         Testbench的編寫(xiě)其實(shí)也沒(méi)有想象中那么神秘,筆者簡(jiǎn)單的將其歸納為3個(gè)步驟。
①對(duì)被測(cè)試設(shè)計(jì)的頂層接口進(jìn)行例化。
②給被測(cè)試設(shè)計(jì)的輸入接口添加激勵(lì)。
③判斷被測(cè)試設(shè)計(jì)的輸出響應(yīng)是否滿足設(shè)計(jì)要求。
相對(duì)而言,最后一步還要復(fù)雜一些,有時(shí)不一定只是簡(jiǎn)單的輸出觀察,可能還需要反饋一些輸入值給待測(cè)試設(shè)計(jì)。
         例化的目的就是把待測(cè)試設(shè)計(jì)和testbench進(jìn)行對(duì)接,和FPGA內(nèi)部的例化是一個(gè)概念。那么如何進(jìn)行例化呢?下面用一個(gè)簡(jiǎn)單實(shí)例來(lái)說(shuō)明。
//待測(cè)試的設(shè)計(jì)
module fpga_design(
        clk,rst_n,a,b,c,d
    );
input clk;
input rst_n;
input a,b,c;
output d;
always @(posedgeclk or negedgerst_n) begin
    if(!rst_n) d <= 1’b0;
    else d <= a & b & c;
end
endmodule
    對(duì)于上面這個(gè)待測(cè)試的設(shè)計(jì),testbench中的例化應(yīng)該把input轉(zhuǎn)換成reg,因?yàn)榇郎y(cè)試設(shè)計(jì)的輸入值是由testbench決定的。相應(yīng)的output就應(yīng)該轉(zhuǎn)換成wire,因?yàn)榇郎y(cè)試設(shè)計(jì)的輸出值不是由testbench決定的。如果是inout端口,在例化中也是一個(gè)wire類型,在testbench中使用時(shí)和RTL代碼設(shè)計(jì)中使用是一樣的。
//例化待測(cè)試設(shè)計(jì)
reg clk;
reg rst_n;
reg a,b,c;
wire d;
fpga_design(
        .clk(clk),
.rst_n(rst_n),
.a(a),
.b(b),
.c(c),
.d(d)
    );
         對(duì)于激勵(lì)的產(chǎn)生,只提最基本的時(shí)鐘信號(hào)和復(fù)位信號(hào)的產(chǎn)生。時(shí)鐘信號(hào)產(chǎn)生方式有很多,使用initialalways語(yǔ)句都是可以的。下面列出比較典型的兩種產(chǎn)生方式供大家參考。
//時(shí)鐘產(chǎn)生
parameter PERIOD = 20; //定義時(shí)鐘周期為20ns,已定義“`timescale 1ns/1ps”
initial begin
    clk = 0;
    forever
        #(PERIOD/2) clk = ~clk;
end
//時(shí)鐘產(chǎn)生
parameter PERIOD = 20; //定義時(shí)鐘周期為20ns,已定義“`timescale 1ns/1ps”
always begin
    #(PERIOD/2) clk = 0;
    #(PERIOD/2) clk = 1;
end
         復(fù)位信號(hào)的產(chǎn)生也很簡(jiǎn)單,比較常用的做法是封裝成一個(gè)task,直接在需要復(fù)位的時(shí)候調(diào)用即可。
//復(fù)位產(chǎn)生
initial begin
    reset_task(100);   //復(fù)位100ns,已定義“`timescale 1ns/1ps”
    ……
end
task reset_task;
input[15:0] reset_time; //復(fù)位時(shí)間
begin
    reset = 0;
    #reset_time;
    reset = 1;
end
endtask
         至于對(duì)測(cè)試的響應(yīng)如何進(jìn)行觀察處理,這里不作太多描述,大家隨便找本verilog語(yǔ)法方面的書(shū)籍都會(huì)有相應(yīng)的行為級(jí)語(yǔ)法的部分,只要依葫蘆畫(huà)瓢就能學(xué)會(huì)。
         對(duì)于這個(gè)簡(jiǎn)單的設(shè)計(jì),有abc三個(gè)輸入,他們相與的結(jié)果d每個(gè)時(shí)鐘周期輸出一次最新的結(jié)果。因此,我們可以預(yù)見(jiàn),若想完全覆蓋這個(gè)設(shè)計(jì)的測(cè)試分支,那么要產(chǎn)生8個(gè)不同的測(cè)試項(xiàng),即分別改變abc的取值,觀察他們輸出的結(jié)果是否符合預(yù)期。測(cè)試腳本的編寫(xiě)如下所示。
//復(fù)位產(chǎn)生
timescale 1ns/1ps
module tb_fpga_design;
//例化待測(cè)試設(shè)計(jì)
reg clk;
reg rst_n;
reg a,b,c;
wire d;
fpga_design(
        .clk(clk),
.rst_n(rst_n),
.a(a),
.b(b),
.c(c),
.d(d)
    );
initial begin
    reset_task(100);   //復(fù)位100ns,已定義“`timescale 1ns/1ps”
    @(posedgeclk); #2;
    a = 1’b0;
    b = 1’b0;
    c = 1’b0;
    @(posedgeclk); #2;
    a = 1’b0;
    b = 1’b0;
    c = 1’b1;
    @(posedgeclk); #2;
    a = 1’b0;
    b = 1’b1;
    c = 1’b0;
    @(posedgeclk); #2;
    a = 1’b0;
    b = 1’b1;
    c = 1’b1;
    @(posedgeclk); #2;
    a = 1’b1;
    b = 1’b0;
    c = 1’b0;
    @(posedgeclk); #2;
    a = 1’b1;
    b = 1’b0;
    c = 1’b1;
    @(posedgeclk); #2;
    a = 1’b1;
    b = 1’b1;
    c = 1’b0;
    @(posedgeclk); #2;
    a = 1’b1;
    b = 1’b1;
    c = 1’b1;
    @(posedgeclk); #2;
    $stop;
end
task reset_task;
input[15:0] reset_time; //復(fù)位時(shí)間
begin
    reset = 0;
    #reset_time;
    reset = 1;
end
endtask
//時(shí)鐘產(chǎn)生
parameter PERIOD = 20; //定義時(shí)鐘周期為20ns,已定義“`timescale 1ns/1ps”
always begin
    #(PERIOD/2) clk = 0;
    #(PERIOD/2) clk = 1;
end
endmodule
         使用這個(gè)腳本對(duì)設(shè)計(jì)進(jìn)行仿真,我們觀察結(jié)果輸出,在8種不同的設(shè)計(jì)輸入情況下,輸出是否和預(yù)期一致。若一致,則可以繼續(xù)后面的設(shè)計(jì)流程完成設(shè)計(jì),若不一致,則設(shè)計(jì)中一定存在問(wèn)題,需要查找問(wèn)題原因并對(duì)設(shè)計(jì)進(jìn)行修改直到仿真結(jié)果達(dá)到預(yù)期結(jié)果。
3 創(chuàng)建仿真文件
         zstar_ex01為例,如圖所示,選中Project Manager à Simulation Sources à sim_1,右鍵點(diǎn)擊彈出菜單后,選中Add Sources…。
圖新建仿真文件菜單
         接著如圖所示,使用默認(rèn)選項(xiàng)Add or create simulation sources。
6.33 選擇文件類型
         如圖所示,單擊Create File按鈕。
圖新建設(shè)計(jì)文件
         如圖所示,設(shè)置創(chuàng)建的文件類型(File type)為Verilog;文件名(File name)為sim_zstar;文件路徑(File location)為默認(rèn)的
圖設(shè)置新建文件名稱和路徑
         最后點(diǎn)擊Finish按鈕完成仿真測(cè)試文件的創(chuàng)建。
         隨后彈出模塊端口定義的界面,可以直接點(diǎn)擊OK不做設(shè)定。
圖模塊端口定義
         如圖所示,雙擊Simulation Sources下剛剛創(chuàng)建好的sim_zstar.v文件,里面也只有一個(gè)Verilog模塊框架,有待內(nèi)容填充。
圖創(chuàng)建好的仿真測(cè)試源文件
         如圖所示,將這個(gè)實(shí)例的仿真測(cè)試腳本寫(xiě)入這個(gè)文件中。
圖仿真測(cè)試腳本
4功能仿真
         下面我們看看如何使用Vivado自帶的仿真工具實(shí)現(xiàn)功能仿真。如圖所示,單擊Project Manager à Simulation àSimulation Settings,彈出選項(xiàng)卡中,設(shè)置目標(biāo)仿真器(Target Simulator)為Vivado Simulator,仿真語(yǔ)言(Simulation language)為Mixed,仿真集(Simulation set)為sim_1,仿真頂層模塊名(Simulation top module name)為sim_zstar。
圖仿真設(shè)置
         如圖所示,點(diǎn)擊Run Simulation,接著彈出菜單中再點(diǎn)擊Run Behavioral Simulation進(jìn)行功能仿真。
圖運(yùn)行功能仿真
         彈出仿真界面如圖所示,3個(gè)窗口從左到右依次是模塊及層次顯示窗口、信號(hào)顯示窗口和波形窗口。
圖仿真界面
         如圖所示,點(diǎn)擊Run All按鈕。
圖仿真運(yùn)行按鈕
         此時(shí),如圖所示,仿真運(yùn)行中。
圖仿真運(yùn)行中
         如圖所示,可以點(diǎn)擊波形界面右上角的Float按鈕,將波形界面從Vivado中獨(dú)立出來(lái),這樣可以滿屏顯示波形,看到更多的波形細(xì)節(jié)。
圖懸浮仿真波形界面
         如圖所示,在仿真結(jié)束后,我們可以點(diǎn)擊Zoom Fit按鈕將所有的仿真波形縮放到可視界面中。
6.45 全覽仿真波形
         如圖所示,這是該工程仿真的波形。beep信號(hào)一直是10%占空比的1Hz PWM信號(hào)。
圖仿真波形
本文地址:http://m.54549.cn/thread-568872-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表