網(wǎng)上有很多關(guān)于pos機(jī)的用例圖類圖時(shí)序圖,xilinx Vivado的使用詳細(xì)介紹的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)的用例圖類圖時(shí)序圖的問(wèn)題,今天pos機(jī)之家(www.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!
本文目錄一覽:
pos機(jī)的用例圖類圖時(shí)序圖
Author:zhangxianhe
新建工程
打開(kāi)Vivado軟件,直接在歡迎界面點(diǎn)擊Create New Project,或在開(kāi)始菜單中選擇File - New Project即可新建工程。
點(diǎn)擊Next;
輸入工程名稱和路徑。
選擇默認(rèn)的RTL Project選項(xiàng),勾選Do not specify......(這樣可以跳過(guò)添加源文件的步驟,源文件可以后面再添加)。
直接選擇Boards,然后選擇Zedboard Zynq Evaluation and Development Kit 硬件開(kāi)發(fā)包。
點(diǎn)擊Next,再點(diǎn)擊Finish,項(xiàng)目新建完成
添加Verilog設(shè)計(jì)文件(Design Source)
在Project Manager窗口中,右擊選擇Design Sources,在空白處或任意文件夾上右擊,選擇Add Sources。
選擇Add or Create Design Sources,點(diǎn)擊Next。
點(diǎn)擊Create File按鈕,彈出的小窗口中輸入文件名,點(diǎn)擊OK。
可以一次性新建或添加多個(gè)文件,最后點(diǎn)擊Finish。
稍后會(huì)彈出定義模塊的窗口,也就是剛剛添加的Divider_multiple文件。可以在這里設(shè)置Divider_multiple模塊的輸入輸出端口;或者直接點(diǎn)擊OK,稍后再自行編寫。
點(diǎn)擊OK后,如果彈出下面窗口直接點(diǎn)擊Yes。
設(shè)計(jì)文件和對(duì)應(yīng)的模塊即創(chuàng)建完成,如下圖。
打開(kāi)Divider_multiple設(shè)計(jì)文件,并把如下代碼復(fù)制進(jìn)去,并保存。
module Divider_Multiple_top( input clk_i, input rst_n_i, output div2_o, output div3_o, output div4_o, output div8_o, output div2hz_o );reg div2_o_r;always@(posedge clk_i or negedge rst_n_i)begin if(!rst_n_i) div2_o_r<=1\'b0; else div2_o_r<=~div2_o_r;endreg [1:0] div_cnt1;always@(posedge clk_i or negedge rst_n_i)begin if(!rst_n_i) div_cnt1<=2\'b00; else div_cnt1<=div_cnt1+1\'b1;endreg div4_o_r;reg div8_o_r;always@(posedge clk_i or negedge rst_n_i)begin if(!rst_n_i) div4_o_r<=1\'b0; else if(div_cnt1==2\'b00 || div_cnt1==2\'b10) div4_o_r<=~div4_o_r; else div4_o_r<=div4_o_r;endalways@(posedge clk_i or negedge rst_n_i)begin if(!rst_n_i) div8_o_r<=1\'b0; else if((~div_cnt1[0]) && (~div_cnt1[1])) div8_o_r<=~div8_o_r; else div8_o_r<=div8_o_r;endreg [1:0] pos_cnt;reg [1:0] neg_cnt;always@(posedge div2_o_r or negedge rst_n_i)begin if(!rst_n_i) pos_cnt<=2\'b00; else if(pos_cnt==2\'d2) pos_cnt<=2\'b00; else pos_cnt<=pos_cnt+1\'b1;endalways@(negedge div2_o_r or negedge rst_n_i)begin if(!rst_n_i) neg_cnt<=2\'b00; else if(neg_cnt==2\'d2) neg_cnt<=2\'b00; else neg_cnt<=neg_cnt+1\'b1;endreg div3_o_r0;reg div3_o_r1;always@(posedge div2_o_r or negedge rst_n_i)begin if(!rst_n_i) div3_o_r0<=1\'b0; else if(pos_cnt<2\'d1) div3_o_r0<=1\'b1; else div3_o_r0<=1\'b0;endalways@(negedge div2_o_r or negedge rst_n_i)begin if(!rst_n_i) div3_o_r1<=1\'b0; else if(neg_cnt<2\'d1) div3_o_r1<=1\'b1; else div3_o_r1<=1\'b0;endreg div2hz_o_r;reg [25:0] div2hz_cnt;always@(posedge clk_i or negedge rst_n_i)begin if(!rst_n_i) div2hz_cnt<=0; else if(div2hz_cnt<26\'d50_000000) div2hz_cnt<=div2hz_cnt+1\'b1; else div2hz_cnt<=0;endalways@(posedge clk_i or negedge rst_n_i)begin if(!rst_n_i) div2hz_o_r<=0; else if(div2hz_cnt==26\'d24_999999 || div2hz_cnt==26\'d49_999999) div2hz_o_r<=~div2hz_o_r; else div2hz_o_r<=div2hz_o_r;endassign div2_o=div2_o_r;assign div3_o=div3_o_r0 | div3_o_r1;assign div4_o=div4_o_r;assign div8_o=div8_o_r;assign div2hz_o=div2hz_o_r;endmodule
添加Verilog仿真文件(Simulation Source)
操作和上一步添加Verilog設(shè)計(jì)文件基本一致,唯一的區(qū)別是選擇Add or Create Simulation Sources。新建一個(gè)名為Divider_Multiple_TB的仿真文件。
設(shè)計(jì)文件新建完成后,在Design Sources和Simulation Sources中都有,而仿真文件只會(huì)出現(xiàn)在Simulation Sources文件夾中。設(shè)計(jì)文件可以用于仿真,也可以用于最終燒寫進(jìn)開(kāi)發(fā)板,而仿真文件僅用于仿真。
雙擊打開(kāi)Divider_Multiple _TB仿真文件,并把如下代碼復(fù)制進(jìn)去,并保存。
module Divider_Multiple_TB; // Inputs reg clk_i; reg rst_n_i; // Outputs wire div2_o; wire div3_o; wire div4_o; wire div8_o; wire div2hz_o; // Instantiate the Unit Under Test (UUT) Divider_Multiple MyDivider_Multiple ( .clk_i(clk_i), .rst_n_i(rst_n_i), .div2_o(div2_o), .div3_o(div3_o), .div4_o(div4_o), .div8_o(div8_o), .div2hz_o(div2hz_o) ); initial begin // Initialize Inputs4 clk_i = 0; rst_n_i = 0; // Wait 100 ns for global reset to finish #96; rst_n_i=1; end always begin #5 clk_i=~clk_i; endendmodule
IO口配置(I/O Planning)/編輯約束文件(Edit Constraints Sets)
做好的模塊,在燒寫進(jìn)板子之前,需要設(shè)置輸入輸出信號(hào)與板子上IO口的對(duì)應(yīng)關(guān)系。
IO口設(shè)置有兩種方法,第一種是直接創(chuàng)建并編輯約束文件,第二種是在圖形界面進(jìn)行設(shè)置。
編輯約束文件
操作和上一步添加Verilog設(shè)計(jì)文件、仿真文件基本一致,唯一的區(qū)別是選擇Add or Create Simulation Sources。新建一個(gè)名為Zedboard_pin的約束文件。
打開(kāi)Zedboard_pin的約束文件,并把如下代碼復(fù)制進(jìn)去。
create_clock -name clk100MHZ -period 10.0 [get_ports {clk_i}]set_property PACKAGE_PIN Y9 [get_ports {clk_i}]set_property IOSTANDARD LVCMOS33 [get_ports {clk_i}]set_property PACKAGE_PIN N15 [get_ports {rst_n_i}]set_property IOSTANDARD LVCMOS18 [get_ports {rst_n_i}]set_property PACKAGE_PIN T22 [get_ports {div2hz_o}]set_property IOSTANDARD LVCMOS33 [get_ports {div2hz_o}]set_property PACKAGE_PIN T21 [get_ports {div8_o}]set_property IOSTANDARD LVCMOS33 [get_ports {div8_o}]set_property PACKAGE_PIN U22 [get_ports {div4_o}]set_property IOSTANDARD LVCMOS33 [get_ports {div4_o}]set_property PACKAGE_PIN U21 [get_ports {div3_o}]set_property IOSTANDARD LVCMOS33 [get_ports {div3_o}]set_property PACKAGE_PIN V22 [get_ports {div2_o}]set_property IOSTANDARD LVCMOS33 [get_ports {div2_o}]
圖形界面配置管腳
在實(shí)現(xiàn)完成后,Open Implemented Design選項(xiàng)從灰色變成可點(diǎn)擊狀態(tài)。
點(diǎn)擊Open Implemented Design,即可打開(kāi)Implemented Design窗口。
在I/O Ports窗口展開(kāi)管腳,對(duì)于每個(gè)輸入輸出信號(hào),在Site欄選擇對(duì)應(yīng)的管腳,注意確保Fixed欄處于勾選狀態(tài),I/O Std常選擇LVCMOS33。
設(shè)置好后,Implemented Design窗口標(biāo)題欄會(huì)顯示一個(gè)*號(hào),表示設(shè)置發(fā)生了更改。
按Ctrl+S快捷鍵保存設(shè)置,會(huì)彈出窗口如圖,提示保存constraints文件會(huì)導(dǎo)致綜合與實(shí)現(xiàn)過(guò)期。也就是說(shuō),修改了管腳分配設(shè)置后,需要重新進(jìn)行綜合、實(shí)現(xiàn)操作。這里點(diǎn)擊OK。
彈出窗口,選擇Create a new file并輸入文件名,點(diǎn)擊OK。
此時(shí)約束文件已經(jīng)自動(dòng)被創(chuàng)建并編輯,可以打開(kāi)查看。
行為仿真(Run Behavioral Simulation)
在Flow Navigator窗口中點(diǎn)擊Run Simulation - Run Behavioral Simulation;或者在菜單中選擇Flow - Run Simulation - Run Behavioral Simulation,即可啟動(dòng)行為仿真。
稍后Behavioral Simulation窗口打開(kāi),即可看到輸出的仿真波形。
綜合(Synthesis)
綜合類似于編程中的編譯。
在Flow Navigator或Flow菜單中,選擇Synthesis - Run Synthesis;或點(diǎn)擊工具欄中的三角形按鈕如圖,即可開(kāi)始對(duì)設(shè)計(jì)文件進(jìn)行綜合。
綜合完成后,會(huì)彈出如下窗口。如果選擇第一項(xiàng)并點(diǎn)擊OK,就會(huì)啟動(dòng)下一步的實(shí)現(xiàn)。為了方便學(xué)習(xí),這里我們直接點(diǎn)擊Cancel。
綜合后時(shí)序仿真(Run Post-Synthesis Timing Simulation)
在Flow Navigator窗口中點(diǎn)擊Run Simulation - Run Post-Synthesis Timing Simulation;或者在菜單中選擇Flow - Run Simulation - Run Post-Synthesis Timing Simulation,即可啟動(dòng)行為仿真。
觀察波形可以清晰看到綜合后仿真加入了延遲更加接近實(shí)際芯片的運(yùn)行情況
執(zhí)行(Implementation)
綜合完成后,需要進(jìn)行實(shí)現(xiàn),在Flow Navigator或Flow菜單中,選擇Synthesis - Run Implementation;或點(diǎn)擊工具欄中的三角形按鈕如圖,即可開(kāi)始對(duì)設(shè)計(jì)文件進(jìn)行綜合。實(shí)際中是在綜合后沒(méi)有錯(cuò)誤直接點(diǎn)Run Implementation選項(xiàng)進(jìn)行實(shí)現(xiàn)。
實(shí)現(xiàn)完成后,同樣會(huì)出現(xiàn)一個(gè)窗口如下。選擇第一項(xiàng)可以打開(kāi)下一步的IO口設(shè)置界面,選擇第二項(xiàng)可以啟動(dòng)后面要說(shuō)的生成比特流操作。同樣,這里還是點(diǎn)擊Cancel關(guān)閉。
執(zhí)行后時(shí)序仿真(Run Post-Implementation Timing Simulation)
觀察波形可以清晰看到布局布線后仿真加入了延遲這要比綜合后的時(shí)序更加接近真實(shí)的情況。
生成比特流
生成比特流文件,這個(gè)文件會(huì)被直接燒寫進(jìn)板子。類似于編程中的二進(jìn)制可執(zhí)行文件。點(diǎn)擊Program and Debug->Generate Bitstream?;蛳聢D的上面圖標(biāo)即可執(zhí)行生成比特流的操作。
比特流生成后顯示如下對(duì)話框,為了方便直接點(diǎn)擊Cancel。
燒寫程序
連接電路板并打開(kāi)電源。 生成比特流,打開(kāi)硬件會(huì)話并編程FPGA。
確保Micro-USB電纜連接到Zedboard的電源連接器旁邊的JTAG PROG連接器。
Zedboard需要通過(guò)位于POWER開(kāi)關(guān)旁邊的J20連接一個(gè)單獨(dú)的電源。
選擇Program and Debug - Open Hardware Manager。
如果之前連接過(guò)開(kāi)發(fā)板,直接點(diǎn)擊上方綠色欄的Open recent target即可打開(kāi);如果是第一次連接開(kāi)發(fā)板,則點(diǎn)擊Open a new hardware target。
第一次連接開(kāi)發(fā)板,點(diǎn)擊Open a new hardware target,點(diǎn)擊Next
還是點(diǎn)擊Next。
顯示下面窗口,稍后即可打開(kāi)硬件設(shè)備。
\\
由于我以前連接過(guò)開(kāi)發(fā)板,所以直接連接開(kāi)發(fā)板。
Hardware Manager窗口即被打開(kāi),此時(shí)處于”Unconnected”狀態(tài)。
單擊Open target,在下面出現(xiàn)的菜單中選擇 Auto Connect。
硬件會(huì)話狀態(tài)從“Unconnected”更改為服務(wù)器名稱,設(shè)備突出顯示。 還要注意狀態(tài)表明它沒(méi)有被編程。
打開(kāi)設(shè)備后,就會(huì)在Hardware窗口顯示。右擊設(shè)備并選擇Program Device,進(jìn)行Program。
或者直接點(diǎn)擊綠色欄的Program Device進(jìn)行Program。
彈出比特流文件選擇窗口,一般直接按默認(rèn)值點(diǎn)擊Program,即可燒寫程序到板子中。
本實(shí)驗(yàn)介紹了VIVADO 的FPGA 開(kāi)發(fā)流程規(guī)范。包括了程序設(shè)計(jì)、行為仿真、綜合過(guò)程、綜合后時(shí)序仿真、執(zhí)行過(guò)程、執(zhí)行后仿真,比特流文件生成并下載到開(kāi)發(fā)板上驗(yàn)證。
注意點(diǎn)一:
在vivado下建立工程,有以下幾種情況:1.如果沒(méi)有涉及到PS部分,可以采用基于v文件或者diagram的工程。基于v文件的工程是由一個(gè)個(gè)的verilog或vhdl或ip組成的;基于diagram的工程是先新建一個(gè)diagram,然后在diagram中添加一個(gè)個(gè)的ip。2.如果用到了PS,那只能采用基于diagram的工程。
PS和PL的關(guān)系:PS的實(shí)質(zhì)就是ARM Cortex A9 MPcore,所以如果我們不使用可編程部分,我們完全可以只使用PS部分。也就是說(shuō),對(duì)于ZYNQ芯片,PS部分可以完全獨(dú)立使用,不依賴PL部分。PL部分的實(shí)質(zhì)是Xilinx FPGA。在ZYNQ中,我們可以把PL看成是PS的另一個(gè)具有可重配置特點(diǎn)的“外設(shè)”,它可以作為PS部分的一個(gè)從設(shè)備,受ARM處理器控制。比如ARM(PS)的串口數(shù)量不夠時(shí),以太網(wǎng)接口不夠時(shí),或者需要視頻接口時(shí)都可以用PL部分?jǐn)U展。當(dāng)然我們也可以把PL部分看成一個(gè)不受ARM處理器控制,與ARM處理器對(duì)等的主設(shè)備,主動(dòng)完成與外部芯片、接口的數(shù)據(jù)交互。更甚至PL部分也可以作為整個(gè)系統(tǒng)的主設(shè)備,主動(dòng)從APU部分的存儲(chǔ)器中獲取、存儲(chǔ)數(shù)據(jù),并可控制ARM處理器的運(yùn)算。所以,理論上PL部分也可以像PS部分那樣獨(dú)立運(yùn)行。但限制是必須使用JTAG接口對(duì)PL部分進(jìn)行配置。如果沒(méi)有JTAG接口,就無(wú)法獨(dú)立運(yùn)行,因?yàn)閆YNQ的PS部分和PL部分都必須依靠PS來(lái)完成芯片的初始化配置。
注意點(diǎn)二:
PS核與PL的IP之間通信方式只有一種,那就是通過(guò)AXI總線。AXI interconnect IP是一個(gè)功能強(qiáng)大的IP,它能管理多個(gè)AXI接口的IP。用戶如果用到多個(gè)AXI IP,那么只需PS將M_AXI_GP0引腳連接到AXI interconnect Ip的SO0_AXI引腳,再將AXI interconnect ip的輸出分別連接到每個(gè)AXI IP的S_AXI引腳即可,省去了多個(gè)AXI互聯(lián)的管理問(wèn)題。Processor System Reset IP為其他IP提供復(fù)位信號(hào)。
以上就是關(guān)于pos機(jī)的用例圖類圖時(shí)序圖,xilinx Vivado的使用詳細(xì)介紹的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)的用例圖類圖時(shí)序圖的知識(shí),希望能夠幫助到大家!
