FPGA等精度測量法測訊號頻率

2021-06-17 18:41:08 字數 2576 閱讀 1330

硬體描述語言verilog早在實驗課上有所接觸,但這些天才開始慢慢嘗試把它實際用起來做一些事,總體感覺硬體描述語言與c語言相比雖然語法上還有比較相似的地方,但兩種程式設計過程中的思維方式完全不一致,fpga/cpld本身是要求開發者在開發過程中以硬體的對映將其描述出來,即便是自頂向下的設計方式中,你不必考慮硬體的細節,但綜合過程後你依然可以看到**所對應的硬體原理圖生成。

併發,程序,阻塞,非阻塞,佈線等概念更是顛覆我對於fpga的印象,從前初次接觸認為hdl語言很多餘的天真想法在逐漸學習的過程中全然消散,fpga的設計思想,讓我感覺踏入了一片從未涉足過的新大陸。

當然fpga也有自己的一些缺點,例如做個八位以上的除法都要寫個模組或者呼叫,論純運算能力,它比不上dsp甚至很多mcu。再就是學習門檻高,對於開發者的基礎要求高,等到設計的整個系統複雜了,一些小小的技巧性優化可以讓系統效能驟然提公升,關鍵是開發者首先需要了解可優化的點在**,這種層面就需要開發者對硬體有相當的了解,畢竟自頂向下只是fpga的一種設計方法。

扯得有點遠,對於我這種初學者,目前階段只是寫一點競賽開發的小實驗應用,對於fpga來說大材小用的東西,不足之處大家有望多多指出。

等精度測量法測訊號頻率:

`timescale 1ns / 1ps

////分頻式: f=50m/2n --->n=25m/f 我所用的fpga為50m 其他頻率將50m替換後也可按此式算

module gate (input clk,

input m,

input n,

output reg gateout,

output reg fmout,

output reg [15:0] realm,

output reg [15:0] realn

);reg [31:0] count1;

reg [31:0] count2;

reg gatebuf;

reg pregate;

reg fmbuf;

reg [15:0] tempm;

reg [15:0] tempn;

initial begin

pregate=0;

gateout=0;

fmout=0;

realm[15:0]=16'b0;

realn[15:0]=16'b0;

count1[31:0]=32'b0;

count2[31:0]=32'b0;

tempm[15:0]=16'b0;

tempn[15:0]=16'b0;

gatebuf=1'b0;

fmbuf=1'b0;

end

//分頻程序1:得到預置門1hz

always@(posedge clk)

begin

if (count1==32'd25000000)

begin

gatebuf<=~gatebuf;

pregate<=gatebuf;

count1<=0;

endelse

begin

count1<=count1+1;

end

end//分頻程序2:得到1mhz頻率作為基準頻率

always@(posedge clk) begin

if (count2==32'd49)

begin

fmbuf<=~fmbuf;

fmout<=fmbuf;

count2<=0;

endelse

begin

count2<=count2+1;

endend

//輸出 我在這裡輸給微控制器顯示在顯示屏上

always@(negedge gateout)

begin

realm[15:0]<=tempm[15:0];

realn[15:0]<=tempn[15:0];

end//狀態機

always@(posedge m)

begin

//精確門產生的狀態

if (pregate==1'b1&&gateout==1'b0)

begin

gateout<=1'b1;

tempm[15:0]<=tempm[15:0]+16'b1;

end//對m訊號輸入進行計數

else if (pregate==1'b1&&gateout==1'b1)

begin

tempm[15:0]<=tempm[15:0]+16'b1;

end//預置門已關閉?那麼精確門隨之關閉

else if (pregate==1'b0&&gateout==1'b1)

begin

gateout<=1'b0;

end//其餘的狀態不必理睬

else tempm[15:0]<=16'b0;

end//外部基準頻率輸入

always@(posedge n)

begin

if (gateout==1'b1) tempn[15:0]<=tempn[15:0]+16'b1;

else tempn<=0;

endendmodule

STM32實現等精度測頻

上一章介紹了利用stm32的tim的捕獲功能實現頻率測量的方法,但測量誤差受被測訊號頻率的影響,不適合測量頻率變化較大的 本章將介紹等精度測頻的方法以及stm32的實現。基本原理 首先看一張圖 傳統的測頻方式,閘門放時間是固定的,閘門時間內被測訊號的計數個數nx不一定是整數個,因此會有一定的誤差,且...

C cout的精度控制等常用函式

原以為precision的作用和printf中的控制精度 xlf是類似的作用,今天發現並不是 可見,precision的作用應該是 設定有效數字 從左邊第乙個非零的數算起,而printf的輸出位數指定是從小數點後開始算的。同時嘗試了cout的另外兩個常用方法,fill和width,填充 補0 和域寬...

測等保2 0 Oracle訪問控制

資訊系統只要執行,就會產生資料,產生資料就需要儲存,資料庫就是所有資訊系統所必需的,資料是資訊系統最重要的東西,所以資料庫的安全就是保障資料安全的重要屏障,現在市面上有許多資料庫產品,其中使用比較廣泛的就是oracle資料庫,今天我們就來講一講等保測評2.0中對oracle資料庫有哪些安全要求。or...