2014年5月31日 星期六

Quartus II 9.1和DE2基本使用方法----入門(2) 多工器的設計與模擬

多工器的設計與模擬

1)適用於DE2-70 的8組 2x1 MUX

//適用於DE2-70 的程式
module mux_8_2x1(
input [17:0]SW,
input [3:0] KEY,
output [17:0] LEDR,
output [7:0] LEDG,
output [6:0] HEX0,
output [6:0] HEX1,
output [6:0] HEX2,
output [6:0] HEX3,
output [6:0] HEX4,
output [6:0] HEX5,
output [6:0] HEX6,
output [6:0] HEX7
);

assign HEX0=7'b111_1111; //off 7-segment Display
assign HEX1=7'b111_1111;
assign HEX2=7'b111_1111;
assign HEX3=7'b111_1111;
assign HEX4=7'b111_1111;
assign HEX5=7'b111_1111;
assign HEX6=7'b111_1111;
assign HEX7=7'b111_1111;

wire [7:0] A ,B ;
wire sel ;
reg [7:0]Y ;

assign A[0]=SW[0];
assign B[0]=SW[1];

assign A[1]=SW[2];
assign B[1]=SW[3];

assign A[2]=SW[4];
assign B[2]=SW[5];

assign A[3]=SW[6];
assign B[3]=SW[7];

assign A[4]=SW[8];
assign B[4]=SW[9];

assign A[5]=SW[10];
assign B[5]=SW[11];

assign A[6]=SW[12];
assign B[6]=SW[13];

assign A[7]=SW[14];
assign B[7]=SW[15];

assign sel=SW[17];

assign {LEDR[15],LEDR[13],LEDR[11],LEDR[9],LEDR[7],LEDR[5],LEDR[3],LEDR[1]}=Y;

always@ (sel , A , B)
begin
if (sel==1)
   Y <= B;
else
  Y <= A ;
end

endmodule



2)不適用於DE2-70 的8組 2x1 MUX
module mux_8_2x1(
input [7:0] A ,
input [7:0] B ,
input sel ,
output reg [7:0] Y
);

always@ (sel , A , B)
begin
if (sel==1)
   Y <= B;
else
  Y <= A ;
end

endmodule


3) 測試程式 test bench 

`timescale 1ns/1ps
module test_bench1;

reg [7:0]A;
reg [7:0]B;
reg sel;
wire [7:0]Y ;

mux_8_2x1 DUT 
(.A(A),.B(B),.sel(sel),.Y(Y));

initial 

begin
A=0; B=255; sel=0;
end

always #50  sel=sel+1;
always #50  A=A+1;
always #100 B=B-1;

endmodule







Quartus II 9.1和DE2基本使用方法----入門(1)

DE2的EP2C35F672C6
EP2C:Cyclone II 35:
35家族 F:FBGA 672:672pin C6:speed grade

DE2-70的EP2C70F896C6

EP2C:Cyclone II 70:
70家族 F:FBGA 896:896 pin C6:speed grade


Device family的Family中選擇Cyclone II,在Available devices裏選擇EP2C35F672C6。(DE2上使用的型號)



























典型的電腦輔助設計流程

1.新建一個項目(project)


2.Verilog設計輸入


3. 編譯設計


4. 接腳分配


5. 模擬仿真設計電路


6. 規劃、配置FPGA器件


7. 測試設計的電路










設計流程的步驟:
•設計輸入(Design Entry)-- 用原理圖或者硬體描述語言說明設計的電路。
•綜合(Synthesis)-- 將輸入的設計綜合成由FPGA晶片的邏輯元件(logic elements)組成的電路。
•功能仿真(Functional Simulation)-- 測試、驗證綜合的電路功能正確與否,不考慮延時。
•適配(Fitting)-- 將工程的邏輯和時序要求與器件的可用資源相匹配。它將每個邏輯功能分配給最佳邏輯單元位置,進行佈線和時序分析,並選定相應的互連路徑和引腳分配。
•時序分析(Timing Analysis)-- 通過對適配電路的傳播延遲的分析,提供電路的性能指標。
•時序仿真(Timing Simulation)-- 驗證電路的功能和時序的正確性。
•編程和下載配置(Programming and Configuration)-- 在FPGA上實現設計的電路。



如何用Verilog HDL在Quartus II平臺設計和實現電路。包括:
•建立一個新專案(project)
•建立新檔案 用Verilog代碼設計輸入 (verilog HDL File)
•綜合
•組譯processing -> Start compilation 
•創建電路符號 File-> Create / Update -> Create Symbol Files for Current File
 •開啟RTL 視窗 Tools -> Netlist Viewer -> 適用於DE2-70 的程式 電路符號    
•分配管腳
•仿真(模擬)
•編程與下載


//不適用於DE2-70 的程式

module Basic_gate1(
input iA,
input iB,
output reg oAND ,
output reg oOR ,
output reg oXOR ,
output reg oNAND ,
output reg oNOR ,
output reg oXNOR
);

always @ (iA or iB)


begin

oAND = iA & iB;
oOR = iA | iB;
oXOR = iA ^ iB;
oNAND = ~(iA & iB);
oNOR =~(iA | iB);
oXNOR =~(iA^iB);
end
endmodule




======================================


//適用於DE2-70 的程式

module basic_gate(
input [17:0]SW,
input [3:0] KEY,
output [17:0] LEDR,
output [7:0] LEDG,
output [6:0] HEX0,
output [6:0] HEX1,
output [6:0] HEX2,
output [6:0] HEX3,
output [6:0] HEX4,
output [6:0] HEX5,
output [6:0] HEX6,
output [6:0] HEX7
);

assign HEX0=7'b111_1111; //off 7-segment Display

assign HEX1=7'b111_1111;
assign HEX2=7'b111_1111;
assign HEX3=7'b111_1111;
assign HEX4=7'b111_1111;
assign HEX5=7'b111_1111;
assign HEX6=7'b111_1111;
assign HEX7=7'b111_1111;

wire iA,iB;

reg oAND ,oOR ,oXOR , oNAND , oNOR , oXNOR;

assign iA=SW[0];

assign iB=SW[1];
assign LEDR[0]=oAND;
assign LEDR[1]=oOR;
assign LEDR[2]=oXOR;
assign LEDR[3]=oNAND;
assign LEDR[4]=oNOR;
assign LEDR[5]=oXNOR;

always @ (iA or iB)

begin
oAND = iA & iB;
oOR = iA | iB;
oXOR = iA ^ iB;
oNAND = ~(iA & iB);
oNOR =~(iA | iB);
oXNOR =~(iA^iB);
end
endmodule


適用於DE2-70 的程式 電路符號 


不適用於DE2-70 的程式 電路符號 


 適用於DE2-70 的程式 RTL Viewer 
不適用於DE2-70 的程式 RTL Viewer 


ModelSim -Altera 模擬步驟程序



1) 開啟舊有專案  File -> Open Project -> 開啟*qpf  (quartusii project file)


2) 開始新檔 編輯Verilog HDL File for   Test bench  (測試平台檔案)


`timescale 1ns/1ps     //時間單位 1ns 解析精度1ps 

module test_bench1;   //Test Bench 檔名 test_bench1

reg A;                           //將輸入改成 reg 型態

reg B;
wire  AND ;                 //將輸出成 wire 型態
wire  OR ;
wire  XOR ; 
wire  NAND ;
wire  NOR ; 
wire  XNOR;

Basic_gate1 DUT        //呼叫 模組  Call By name 方式   .iA(A),   A 對應iA

(.iA(A),.iB(B),
 .oAND(AND),.oOR(OR),
 .oXOR(XOR),.oNAND(NAND),
 .oNOR(NOR),.oXNOR(XNOR));

initial                //設定初始化 A=0 , B=0 

begin

A=0; B=0;
end
                                                //     0   50  100  150   200  
always #50  A=A+1;              //A=0    1     0     1       0       50ns 變化一次  A為1bit長度
always #100 B=B+1;             //B=0     0     1     1       0      100ns變化一次 B為1bit長度


endmodule


3) 模擬軟體路徑檔案設定

Tools -> Options -> EDA Tools Options ->ModelSim-Altera 設定路路徑 
C:\altera\91sp2\modelsim_ase\win32aloem




4) 模 擬設定 Assigments -> Setting ->EDA Tool Setting -> Simulation 按 Test bench ....進入

Test bench視窗 

按New



進入New Test Bench Setting 視窗設定 




5) 組譯 processing -> Start Compilation 會自動開啟ModelSim-Altera 模擬視窗

先點一下波形


再點一下 Zoom Full 或Zoom in  Zoom Out 控制波形 顯示狀況




6 編程和配置PFPGA


首先連接電源適配器和usb資料線,在DE2開發板上,靠近電源的usb介面連接到資料線。DE2支援2種程式燒錄方式:JTAGASJTAG模式把程式直接寫在FPGA晶片裏,斷電後資料丟失。AS模式把資料寫在配置的存儲晶片裏,每次通電後,資料會自動裝載到FPGA晶片裏。兩種模式的選擇由RUN/PROG開關的位置決定,JTAG模式對應RUN檔,AS模式對應PROG檔。

1JTAG模式編程
  
RUN/PROG開關置於RUN檔。選擇 Tools > Programmer 打開視窗。這裏要指定編程用到的硬體和模式。模式選擇JTAG,硬體設置為USB_blaster,如果缺省沒有選擇,單擊Hardware Setup…,選擇。




   JTAG模式編程
   

  選定硬體設置類型
 
  添加編程檔

注意編程的器件和檔是否已添加到圖 28中,沒有的話,手動添加。單擊Start開始編程。

2014年5月30日 星期五

FPGA系統設計實務(6/6)

FPGA系統設計實務(6/6) 

2014-05-30 
FPGA系統設計實務(6/6)
連結點 (4shared 需註冊)

http://www.4shared.com/office/ExA2FXHpce/FPGA6-6.html?

http://www.4shared.com/office/zKhtZ8Oece/7__online.html?

http://www.4shared.com/video/JUhf0C1ece/Quartus_II_State_Machine_With_.html?


2014年5月24日 星期六

2.8.傅立葉分析

源自http://civil.nju.edu.tw/weng/excel/lectureNote/2.8.htm

2.8.傅立葉分析

2.8.1.簡介

傅立葉轉換(Fourier Transform)是一種目前十分重要而且廣泛應用於各行業的數位訊號分析技術,當儀器測量所得的數位訊號為時間-振幅的數據時,您可以使用傅立葉轉換將此一訊號轉換為頻率-振幅,從而進行此一訊號的頻率特性的分析,反之若您有頻率-振幅的數據,您可使用逆傅立葉轉換,將此一訊號數據轉換為時間-振幅的數據。
Excel 2000的增益集中有一分析工具箱,其中已附有傅立葉轉換的功能,對於資料點數小於4096點的數據,您可以使用此一增益集中的分析工具箱的傅立葉分析工具,雖然其功能没有專業軟體的功能強大,但對於簡易的數位訊號處理,他提供了一個親和介面的解決方案。
傅立葉積分定義為[1]
 
                                            (2.8.1)   
                                                                           
上式中j代表,在某些數學書中也有以i代表,本文中比照參考文獻1所使用的符號規則,仍以j代表
當公式(2.8.1)中任一點的f為可積分時則H(f)存在,其中h(t)為時間的函數,而H(f)則為頻率的函數。一般而言H(f)為一複數的量,所以H(f)應可改寫為
                                  (2.8.2)
上式中R(f)為傅立葉轉換的實數部,I(f)為傅立葉轉換的虛數部。而絕對值為其振幅或稱為傅立葉頻譜(Fourier Spectrum),的定義為:
                                                (2.8.3)
稱為相位角,可表示為
                                                 (2.8.4)                                                                                   
由於傅立葉轉換的特性,當時間域的函數h(t)為實數且對y軸對稱時,則轉換後的頻率域函數H(f)才仍為實數且對y軸對稱,對於常見的數位訊號常為實數且非對稱,因而轉換後的函數H(f)大常為複數。
傅立葉轉換前後的實數-複數特性可參考表2.8.1,其中偶函數(Even)是指對y軸對稱的函數,即f(-t)=f(t),奇函數為對y軸反對稱的函數,即f(-t)=-f(t)。
時間域函數h(t)

頻率域函數H(t)
實數
實部-偶函數
虛部-奇函數
虛數
實部-奇函數
虛部-偶函數
實部-偶函數
虛部-奇函數
實數
實部-奇函數
虛部-偶函數
虛數
實數偶函數
實數偶函數
實數奇函數
虛數奇函數
虛數偶函數
虛數偶函數
虛數奇函數
實數奇函數
複數偶函數
複數偶函數
複數奇函數
複數奇函數
2.8.1 Fourier轉前後關係特性表
傅立葉轉換應用於數位取樣器,例如氣象局使用的A900A900a型的地震儀,其取得的訊號為每秒200,連續取樣時間90,最大取樣點數為N=18000,取樣點間隔為1/200,即=0.005.此時所得的為一連串的數據,並為數學函數,此等數據的傅立葉轉換稱離散傅立葉轉換(Discrete Fourier Transform), 離散傅立葉轉換所使用的計算公式與數學式連續函數的相類似,公式為:
                                                                   (2.8.5)
其逆向離散傅立葉轉換的公式可表示為
                                                                (2.8.5)
上式中N為資料點的總點數,為資料點的時間問隔,假如應用於上述的A900型地震儀所記錄,全滿90秒的記錄檔,其N分別為=0.005,N=18000,nk則為記數用的變數 。轉換後頻率域的函數為 ,時間率的函數則為
離散傅立葉轉換所需演算相當耗時,例如有N=2γ點,則離散傅立葉轉換需要N2次的複數相乘與N(N-1)次的複數相加。因而另一種稱為快速離散傅立葉轉換(Fast Foruier Transform,簡寫為FFT)的演算法因而發展出來,目前常的離散傅立葉轉換演算法均是採用依據Cooley-Tukey Algorithm演算法所發展的FFT程序。同樣的N=2γ點的數據,依FFT演算法只需Nγ/2次的複數相乘與Nγ次的複數相加運算,若以相乘運算來計算耗時,則N=1024點的傅立葉轉換運算, 傳統的傅立葉轉換矩陣運算與FFT的運算耗時會相差到200:1,由此可見FFT的優點所在FFT的演算法原理請參閱參考文獻1。
假如原來在時間域的資料點有N點,則經過FFT轉換後,在頻率域其數據仍為N點,但己經是複數了。這N點中第一個點為所有其他點的總合,而且前半數的N/2點與後半數的N/2點是共軛對稱的複數,對稱點在中點,例如有256點,則128點為其共軛對稱點。因此在時間域有N點,則以FFT轉換到頻率頻後只有N/2點可用。至於各點頻率差,若在時間域的數據每點間隔則在頻率域的頻率間隔為,例如前述的A900地震儀,其=0.005,取N=1024點做FFT轉換後可用點只有其半數512點,各點頻率間隔為=0.1953125cps.

2.8.2.設定傅立葉分析工具箱

Excel 2000中的增益集中已附有傅立葉分析工具箱,但在預設的選單中並没有這一項目,要使用傅立葉分析工具箱您必需做簡單的設定,設定方法應先開啟Excel 2000,選取下拉選單的工具(T)/增益集(I),增益集的對答框如圖2.8.1,勾選分析工具箱選項,按下確定按鈕即完成設定。
2.8.1.設定傅立葉分析工具箱增益集
完成增益集設定之後,當您再選取下拉選單的工具(T)項時,這一下拉選單會多出一個資料分析(D)的選項,選取這一選項,圖2.8.2的對答框會跳出。接著選取傅立葉分析,您就可以開始進行您的數位訊號傅立葉分析工作了。
2.8.2.資料分析工具箱

2.8.3.傅立葉分析範例

例題 2.8.1.如範例2.8.1數據檔有19561987年間,計32年的太陽黑子活動數據,試分析太陽黑子的活動周期
:
1.首先以Excel讀取文字檔數據資料,將文字資料讀入Excel中的方法諘參考第1.4
2.Excel中以繪製X-Y散佈圖的圖表繪出太陽黑子活動的振幅-周期關係圖 (Periodogram) 以供參考,如圖2.8.3所示
圖 2.8.3.太陽黑子活動的振幅-周期關係圖(Periodogram)
3.由下拉選單選取:工具(T)/資料分析(D)-傅立葉分析,傅立葉分析對答框出現如圖2.8.4
2.8.4.傅立葉分析對答框
4.在傅立葉分析對答框中,將數據中的太陽黑子Size資料範圍填入輸入範圍輸出範圍則可在工作表中選取一塊與輸入範圍大小相同的空白區域,接著下確定按鈕,即可完成傅立葉轉換。參考圖2.8.5。
2.8.5. 傅立葉轉換工作表

5.由於實數經過傅立葉轉換後的數據為複數,為繪圖表示起見,我們可使用IMABS()函數取其複數的振幅值。如圖2.8.5中的第E欄即是, 舉例而言,第儲存格E3的計算公式為
=IMABS(D3)
6.在太陽黑子的Size完成轉換後,接著我們必需計算頻率域各點的頻率間距,如前述其頻率間距為,因為記錄為年所以應為
參考圖2.8.5,第一列數據因為受到扭曲,其數值可可信,所以E2以手動特別改為零,而其對應頻率,即儲存格F2應為0.03125F3應為F3+0.03125,其餘依此類推,所以只要複製F3儲存格,貼到F4:F17即可。接著我們繪出頻率與振幅的關係圖即可觀察出太陽黑子的活動頻率,這種頻率與振幅的關係圖我們習慣稱為傅氏頻譜(Fourier Spectrum)
假如以多少年會有一次循環來考慮,則應以t = 1/f 表示才較恰當,所以在第G欄填入第F欄的倒數。
至此已完成所需數據的計算,接著我們繪出週期與振幅的關係圖即可觀察出太陽黑子的活動周期如圖2.8.6,由圖中可知,其活動周期約在8年左右
 2.8.6.太陽黑子活動周期分析圖
由於本例題所使用的數據較少,以致其精確度受影響,讀者可試用習題2.8.1的數據重做一次,您會發現它的活動周期已偏到11
習題 2.8.1.在習題2.8.1的數據檔數據中有19321987年間,計256年的太陽黑子活動數據,試依範例2.8.1的方式再分析太陽黑子的活動周期

參考文獻:
1.The Fast Fourier Transform And Its ApplicationE.Oran BrighamAvantek1988.

MQTT Explorer 與 Node-Red 介面的實驗

 MQTT Explorer 與 Node-Red 介面的實驗 MQTT EXplorer 與 Node-Red介面的設定 (1) 設定  MQTT EXplorer Client    (2)        Node-Red LED ON  --> MQTT Explor...