小梅哥-建工程+二选一多路器
1、
通過單擊 Quick Start 組的 Create Project 來新建一個 Vivado 設計工程。
說明:在 Vivado 的啟動界面中分為 Quick Start、Tasks、Learning Center 三組快速入口。其中,
(1)Quick Start 組包含有 Create Project(創建工程)、Open Project(打開工程)、Open Example Project(打開實例工程)。
(2)Tasks 組包含有 Manage IP(管理 IP)、Open Hardware Manager(打開硬件管理器)、
Xilinx Tcl Store(Tcl 腳本存儲庫)。
(3) Learning Center 組包含有 Documentation and Tutorials(文檔和教程)、Quick Take
Videos(快速上手視頻)、Release Notes Guide(發布注釋向導)。
2、
進入到 Project Name 對話框,填入工程名稱以及工程路徑,根據實際情況確定是否勾選復選框 Create project subdirectory,如果勾選會在上面設置的工程路徑中以工程名稱增加一級目錄,可通過觀察勾選與否,實際工程存放的路徑進行理解該復選框的具體作用。此處我們需要注意的是,工程路徑與工程名一定不能包含空格以及中文字符(-也不可以),否則在后續流程中會出現錯誤。然后單擊 Next 按鈕。
一、總流程
設計定義(邏輯文件)——設計輸入(testbench)——分析綜合(Run_synthesis)——功能仿真(simulation)——布局布線(run-implementation)——分析性能(simulation-post-timing,有時延,進行時序仿真)——板級調試(分配IO引腳 program debug)
二、設計定義(二選一多路器為例)
`timescale 1ns / 1ns module mux2(a,b,sel,out );input a;input b;input sel;output out;assign out = (sel == 1)?a:b; //assign具體用法見補充endmodule只有寄存器reg類型的信號才可以在always和initial 語句中進行賦值。
always 語句是一直重復執行,由敏感表(always 語句括號內的變量)中的變量觸發。
always 語句從0 時刻開始。
在begin 和end 之間的語句是順序執行,屬于串行語句。
`timescale 1ns / 1ps 表示精度為ps 在延時時可以寫#1.001
`timescale 1ns / 1ns 表示精度為ns 在延時時寫#1.001錯誤 #1.0錯誤
三、分析綜合(Run_synthesis )
將語言描述的電路邏輯轉化成與門、或門、非門、觸發器等基本邏輯單元的互連關系,又叫的門級網表。
利用Verilog 做電路設計時我們總是強調可綜合的概念,可綜合就是我們的這段代碼可以被翻譯成門級電路,不可綜合就是代碼不能被翻譯成與之對應的門級電路。
目前的想法:分析綜合是對top的邏輯文件進行綜合,如果在top的tb有語法錯誤也能檢查出來,但是不是error,是critical warning。
分析綜合結束之后點open synthesized design,點左側schematic就能看到原理圖設計
點view reports就能判斷邏輯文件有無語法錯誤
四、implementation布局布線
綜合后生成的門級網表只是表示了門與門之間虛擬的連接關系,并沒有規定每個門的位置以及連線的長度等。我們知道FPGA可重復編程的基礎是擁有巨量的可配置邏輯塊(CLB)、豐富的布線資源以及其他資源
①布局
布局的過程就是將門級網表中的每一個門“安置”到CLB中的過程,這個過程是一個映射的過程。
②布線
布線是利用FPGA中豐富的布線資源將CLB根據邏輯關系連接在一起的過程。
邏輯門的映射位置不是隨意的,是FPGA設計軟件經過算法計算后精心排列的。一般的布局布線策略是占用最少的CLB并且連線盡量短,也就是面積和速度最優。
布局布線策略有兩種:速度優先和面積優先,往往不能同時達到兩者皆最優,所以布局布線時需要在速度最優和面積最優之間做出選擇。
五、 RTL 描述和分析過程( RTL Analysis )(待定)
RTL 描述與分析功能可以對工程的 RTL 結構、語法進行查看,進而可以分析并修正邏輯上的錯誤。
在 Flow Navigator 下,找到 RTL Analysis,并展開。單擊 Open Elaborated Design,打開Elaborated Design。
單擊圖中的 Schematic,打開 RTL 原理圖,RTL 描述與分析階段后的原理圖網表是由與 FPGA 底層部件無關的邏輯符號來體現的。
六、設計輸入testbench(二選一多路器tb為例)
`timescale 1ns / 1ns module mux2_tb();//測試文件中沒有端口reg s_a;reg s_b;reg sel;wire out;mux2 mux2_inst0( //lihua.a(s_a),.b(s_b),.sel(sel),.out(out) );initial begins_a =0; s_b =0; sel = 0;#200;s_a =1; s_b =0; sel = 0;#200;s_a =1; s_b =1; sel = 0;#200;s_a =1; s_b =1; sel = 1;#200;s_a =0; s_b =0; sel = 1;#200;s_a =0; s_b =1; sel = 0;#200;s_a =0; s_b =1; sel = 1;#200;s_a =1; s_b =0; sel = 1;#200;$stop;endendmodule七、補充
EDA:Electronic Design Automation 電子設計自動化
FPGA的開發與應用使用的是硬件描述語言(Hardware Description Language),簡稱HDL,常用的HDL有三種:Verilog HDL(后文簡稱Verilog)、VHDL和System Verilog。
三種硬件描述語言差別不大,Verilog HDL易上手、較為靈活,與C語言類似;VHDL語法較為嚴謹、規則性較強;System Verilog可以看作Verilog HDL的擴展集,多用于驗證。
#200只能在激勵文件中使用
產生激勵, initial begin開頭,end結束
連續賦值語句(assign); 過程賦值語句(initial和always)
連續賦值等號右邊操作數發生變化就需要執行(上電便一直執行),而過程性賦值語句只是執行一次,注意我這里的一次是指:在initial塊中,過程性賦值只順序執行一次,而在always塊中,每一次滿足always的條件時,都要順序執行一次該 always塊中的語句。連續賦值適用于線網,過程賦值適用于寄存器
即:assign 等式左邊是wire類型的變量(在tb里面定義為wire)。等式右邊可以是常量、由運算符如邏輯運算符、算術運算符參與的表達,實例如下
module full_adder1(input Ai, Bi, Ci, //這里把定義和端口寫一起了,不推薦,因為不好例化output So, Co );assign So = Ai ^ Bi ^ Ci ;assign Co = (Ai & Bi) | (Ci & (Ai | Bi)); endmoduletestbench
`timescale 1ns/1nsmodule test() ;reg Ai, Bi, Ci ;wire So, Co ; //這里定義了wire型full_adder1 u_adder(.Ai (Ai),.Bi (Bi),.Ci (Ci),.So (So),.Co (Co) );initial begin{Ai, Bi, Ci} = 3'b0;forever begin#10 ;{Ai, Bi, Ci} = {Ai, Bi, Ci} + 1'b1;endendendmodule總結
以上是生活随笔為你收集整理的小梅哥-建工程+二选一多路器的全部內容,希望文章能夠幫你解決所遇到的問題。