2020年2月27日 星期四

Quartus II 與 ModelSim 使用方法 Verilog 邏輯閘層次 Gate Level 基本邏輯閘

Quartus II 與  ModelSim 使用方法
Verilog 邏輯閘層次 Gate Level  基本邏輯閘

參考來源 https://hom-wang.gitbooks.io/verilog-hdl/content/Chapter_03.html

基本邏輯閘

 
使用方法:

<閘名稱> <閘編號> ( 輸出埠, 輸入埠1, 輸入埠2… );
閘名稱:使用的邏輯閘名稱( ex. and, or, nor... )
閘編號:給予該閘名稱或編號,可不寫,交由軟體處理
輸出埠:輸出埠只能有一個,並且寫在最前面
輸入埠:輸入邏輯閘的資料口,需使用逗號分別

範例:

………
wire w1, w2;

and and1( w1, In1, In2 );   // w1 = In1 and In2
or or1( w2, w1, In2 );      // w2 = w1 or In2
xor xor( Out, w1, w2 );     // Out = w1 xor w2

// 最後out  = ( In1 and In2 ) xor ( w1 or In2 )
            = ( In1 and In2 ) xor (( In1 and In2 ) or In2 )
………



1)安裝Quartus II 9.1Sp2  與 ModelSim 6.5b (Quartus II -Altera)

https://www.intel.com/content/www/us/en/programmable/downloads/software/quartus-ii-we/91sp2.html

https://www.intel.com/content/www/us/en/programmable/downloads/software/modelsim-starter/91.html

2) 在Quartus II 中的目錄 不可以含 中文字

3) 我的 工作目錄為    D:\FPGA_EX\digitslLogic  全為英文

4)  打開Quartus II   create a new project 新增一專案

  
5)  下一步  (使用的語言 都是Verilog)
6) 變更 工作目錄位置
7) 產生一個 新目錄
8) 完成 目錄設定 D:\FPGA_EX\digitslLogic\basic  (下次 換不同目錄)
9) 設定  Top-level Entity 檔名  (basic_gate)   (下次 換不同檔名)
10)   2/5 下一步
11)  3/5 設定Device  (因為 是 Modelsim  程式模擬 不需要 指定 晶片  Target device 選 auto  )
12) 4/5 指定 simulation   Modelsim-Altera  ,  Verilog  (使用的語言 都是Verilog)
13)  5/5 完成設定
14)  新增 verilog 程式 (主程式) 與 Test_bench (測試)程式
 
15) 留意 主程式 需與   1/5 中 設定 Top-level Entity 檔名  (basic_gate)   相同

留意 : module basic_gate 

//=============================================
module basic_gate(A, B, ,NOT_oA , NOT_oB , AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o  );
    input A, B ;
    output NOT_oA, NOT_oB ,AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o ; 
    
   
    not u1(NOT_oA , A);
    not u2(NOT_oB, B); 
    and u3(AND_o , A,B );
    or  u4(OR_o ,A,B );
    nand u5(NAND_o ,A,B );
    nor  u6(NOR_o ,A,B );
    xor  u7(XOR_o ,A,B );
    xnor u8(XNOR_o,A,B );
  
endmodule
//=============================================

16) Test_bench 中特別注意 因為需要  配合 設定simulation  



 留意 3個地方

//=============================================
 // 時間單位 100ns, 時間精確度10 ps
`timescale 100ns/10ps
module Test_bench;
// input A, B ;
// output NOT_oA, NOT_oB ,AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o ; 
wire  NOT_oA, NOT_oB ,AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o ; 
reg  A=1'b0;
reg  B=1'b0;

basic_gate DUT(.A(A), .B(B) , .NOT_oA(NOT_oA) , .NOT_oB(NOT_oB) , .AND_o(AND_o) , .OR_o (OR_o) , .NAND_o(NAND_o) , .NOR_o (NOR_o), .XOR_o(XOR_o) , .XNOR_o(XNOR_o)  ); 

// initial程序結構區塊, 產生A、B輸入信號波形
initial begin

$monitor(A, B,NOT_oA , NOT_oB , AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o );

  #100;    // 100ns
  A=1'b0;   B=1'b1  ; // “01”

 #100;    // 200ns
 A=1'b1 ;  B=1'b0 ;   // “10”

 #100;    // 300ns
 A=1'b1 ;  B=1'b1  ;  // “11”

 end

initial
begin
  #400;   // 模擬終止時間  400 ns
    $stop;
end

endmodule

//=============================================
17) 設定 ModelSim-Altera 位置   (Assigments --> setting --> EDA Tools setting ) 

18) 設定 simulation    (Assigments --> setting --> EDA Tools setting -->simulation ) 





程式中設定需與simulation 相同
//============================================
module Test_bench;
// input A, B ;
// output NOT_oA, NOT_oB ,AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o ; 
wire  NOT_oA, NOT_oB ,AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o ; 
reg  A=1'b0;
reg  B=1'b0;

basic_gate DUT(.A(A), .B(B) , .NOT_oA(NOT_oA) , .NOT_oB(NOT_oB) , .AND_o(AND_o) ,
//============================================


留意 Test_bench  ,  DUT  不可以打錯利用拷貝 複製方式 

19) 完成設定後



20)  組繹  Start Compilation  (沒有錯誤才能往下 有錯誤需修正)
21) 會啟動 Modelsim
22 ) Test_bench 測試程式測試
23)  Zoom Full 


24) 檢視 結果 是否符合 (不相同時 需修改 主程式 與測試程式)   
      相同後離開 代表主程式 沒有問題

25) 主程式 basic_gate

module basic_gate(A, B, ,NOT_oA , NOT_oB , AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o  );
    input A, B ;
    output NOT_oA, NOT_oB ,AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o ; 
    
   
    not u1(NOT_oA , A);
    not u2(NOT_oB, B); 
    and u3(AND_o , A,B );
    or  u4(OR_o ,A,B );
    nand u5(NAND_o ,A,B );
    nor  u6(NOR_o ,A,B );
    xor  u7(XOR_o ,A,B );
    xnor u8(XNOR_o,A,B );
  
endmodule


26) 測試程式 Test_bench 
// 時間單位 100ns, 時間精確度10 ps
`timescale 100ns/10ps
module Test_bench;
// input A, B ;
// output NOT_oA, NOT_oB ,AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o ; 
wire  NOT_oA, NOT_oB ,AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o ; 
reg  A=1'b0;
reg  B=1'b0;

basic_gate DUT(.A(A), .B(B) , .NOT_oA(NOT_oA) , .NOT_oB(NOT_oB) , .AND_o(AND_o) , .OR_o (OR_o) , .NAND_o(NAND_o) , .NOR_o (NOR_o), .XOR_o(XOR_o) , .XNOR_o(XNOR_o)  ); 

// initial程序結構區塊, 產生A、B輸入信號波形
initial begin

$monitor(A, B,NOT_oA , NOT_oB , AND_o , OR_o , NAND_o , NOR_o , XOR_o , XNOR_o );

  #100;    // 100ns
  A=1'b0;   B=1'b1  ; // “01”

 #100;    // 200ns
 A=1'b1 ;  B=1'b0 ;   // “10”

 #100;    // 300ns
 A=1'b1 ;  B=1'b1  ;  // “11”

 end

initial
begin
  #400;   // 模擬終止時間  400 ns
    $stop;
end

endmodule

27) 找不到 ModelSim-Altera 位置時 請檢查 Tools -> Option



再次檢查看看


沒有留言:

張貼留言

WOKWI LED + MQTT Node-Red SQLite

WOKWI LED + MQTT Node-Red SQLite const char *mqtt_broker = "broker.mqtt-dashboard.com" ; const char *topic1 = "alex9ufo/e...