Z-Blog支援Word一鍵上傳
阿新 • • 發佈:2022-05-24
這個週三場比賽結束,比較忙沒有什麼時間學FPGA 相關的知識。好好開始複習還有二十天考試,野火文件和視訊都看到九了,下個周交完集創賽和網際網路+,大創的比賽就開始有時間了。計劃著每天學一個小時微控制器,
我也打算學習學習模擬程式碼的編寫,野火會教,跟上視訊就是。
一、generate
看了一個高階寫法,弄懂Verilog-generate,但是還沒嘗試過自己寫工程(類似於C中的for寫法)
生成語句可以動態的生成verilog程式碼,當對向量中的多個位進行 重複操作 時,或者當進行多個模組的例項引用的重複操作時,或者根據引數的定義來確定程式中是否應該包含某段Verilog程式碼的時候,使用生成語句能大大簡化程式的編寫過程。 生成語句生成的例項範圍,關鍵字generate-endgenerate用來指定該範圍。生成例項可以是以下的一個或多個型別: (1)模組;(2)使用者定義原語;(3)門級語句;(4)連續賦值語句;(5)initial和always塊。 generate語句有generate-for,generate-if,generate-case三種語句。 generate-for語句 (1) 必須有genvar關鍵字定義for語句的變數。 (2)for語句的內容必須加begin和end(即使就一句)。 (3)for語句必須有個名字。 例1:assign語句實現 module test(bin,gray); parameter SIZE=8; output [SIZE-1:0] bin; input [SIZE-1:0] gray; genvar i; //genvar i;也可以定義到generate語句裡面 generate for(i=0;i<SIZE;i=i+1) begin:bit assign bin[i]=^gray[SIZE-1:i]; end endgenerate endmodule 等同於下面語句 assign bin[0]=^gray[SIZE-1:0]; assign bin[1]=^gray[SIZE-1:1]; assign bin[2]=^gray[SIZE-1:2]; assign bin[3]=^gray[SIZE-1:3]; assign bin[4]=^gray[SIZE-1:4]; assign bin[5]=^gray[SIZE-1:5]; assign bin[6]=^gray[SIZE-1:6]; assign bin[7]=^gray[SIZE-1:7]; 例2: generate genvar i; for(i=0;i<SIZE;i=i+1) begin:shifter always@(posedge clk) shifter[i]<=(i==0)?din:shifter[i-1]; end endgenerate 相當於 always@(posedge clk) shifter[0]<=din; always@(posedge clk) shifter[1]<=shifter[0]; always@(posedge clk) shifter[2]<=shifter[1]; ................. ...................... always@(posedge clk) shifter[SIZE]<=shifter[SIZE-1]; generate-if,generate-case和generate-for語句類似。 二、polyspace PolySpace軟體執行時錯誤檢測工具。是matlab配套的軟體,當時下matlab時候多出來的不知道是幹啥的,一搜是軟體執行時錯誤檢測工具。 Polyspace 是一款靜態程式碼分析工具,使用形式化的方法來證明在所有可能的控制流和資料流下均不存在嚴重執行時錯誤。它包括用於檢查編碼規則、安全漏洞、程式碼指標和數百類其他缺陷的檢查器。