国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

玩轉Zynq連載26——Vivado中PL的功能仿真

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

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 想要避免發生災難,就用MPLAB® SiC電源仿真器!
  • PIC18-Q71系列MCU概述
  • 無線充電基礎知識及應用培訓教程2
  • 了解一下Microchip強大的PIC18-Q24 MCU系列
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品麻豆免费版 | 精品一区二区三区在线观看l | 亚洲综合色视频在线观看 | 国内精品区一区二区三 | 日韩久久免费视频 | www.com91| 日韩一级精品视频在线观看 | 韩国美女爽快一级毛片黄 | 日韩毛片免费视频 | 日本高清黄色网站 | 国产67194 | 亚洲永久精品网站 | 91日韩在线 | 免费的黄色片视频 | 日韩高清特级特黄毛片 | 美女的隐私免费看无遮挡 | 2021av在线视频 | 四虎影在永久地址在线观看 | 香蕉欧美成人精品a∨在线观看 | 天天色综合2 | 护士紧窄惨叫稚嫩 | 久久久久国产免费 | 男人天堂va | 天天操天天摸天天爽 | 四虎国产成人免费观看 | 大乳女子一级毛片 | 国产高颜值露脸在线观看 | 亚洲成a人片在线观看中文动漫 | 亚洲欧美综合日韩字幕v在线 | 2021日韩麻豆| 麻豆网站在线免费观看 | jizz日本人| 奇米精品一区二区三区在线观看 | 韩日一级 | 91同城| 日本不卡一区二区三区在线观看 | 亚洲国产第一 | 日日射日日操 | 九色视频网站 | 欧美很黄视频在线观看 | 亚洲精品成人网 |