星期四, 12月 07, 2006

第二階段測驗

第二階段測驗:
針對某 4 inputs, 1 outpout 電路進行真值表、K-Map化簡。並找出 0-Hazard 所在,進行改進設計使其成為 0-Hazard Free。所有數位電路設計均以結構化 Verilog 設計(僅使用 NAND 邏輯閘)。 最後於 SynaptiCAD 模擬驗證...

1. 由真值表中畫出卡諾圖,簡化卡諾圖並求出輸出的布林函數式。


2. 求出輸出布林函數後,以 Verilog HDL 來設計此電路,程式碼如下:

module verilog_1205(A,B,C,D,F);
 input A,B,C,D;
 output F;

 wire a1,b1,c1,d1,f1,f2,f3,f4,f5;

 // NOT
 nand #5 (a1,A,A);
 nand #5 (b1,B,B);
 nand #5 (c1,C,C);
 nand #5 (d1,D,D);

 // Function
 nand #5 (f1,a1,b1,d1);
 nand #5 (f2,B,c1);
 nand #5 (f3,A,B,D);
 nand #5 (f4,A,b1,c1);

 // Output
 nand #5 (f5,f1,f2,f3,f4);
 nand #5 (F,f5,f5);

endmodule


module testbench;
 reg A,B,C,D;
 wire F;

 verilog_1205 V0 (A,B,C,D,F);

 // 測試 0-Hazard 時使用
 //==========================================
 initial
 begin
  #0 A=0; B=0; C=0; D=0;

  // hazard 1
  #40 B=1;
  #40 B=0;

  // hazard 2
  #40 A=1;
  #40 B=1;
  #40 B=0;

  // hazard 3
  #40 A=0;
  #40 A=1;
  #40 $finish;
 end
 //==========================================

 // 測試真值表16個訊號時使用
 //==========================================
 initial
 begin
  A=0; B=0; C=0; D=0;
  #800 $finish;
 end

 always #320 A=~A;
 always #160 B=~B;
 always #80 C=~C;
 always #40 D=~D;
 //==========================================

endmodule

3. 下圖為根據真值表輸入訊號組合所模擬出來的波形圖。


4. 由卡諾圖中可以找出此電路有四個 0-Hazard,如下圖所示。

分別在:
  A:0    B:0←→1 C:0  D:0
  A:1    B:0←→1 C:0  D:0
  A:1    B:0←→1 C:0  D:1
  A:0←→1  B:0    C:0 D:0
時會有 0-Hazard 產生。

5. 下圖為 0-Hazard 的模擬波形圖。


6. 在卡諾圖中進行修改設計,將 0-Hazard 消除掉,求出改進後的布林函式。


以下為改進後電路的 Verilog 程式碼:

module verilog_1205(A,B,C,D,F);
 input A,B,C,D;
 output F;
 wire a1,b1,c1,d1,f1,f2,f3,f4,f5;

 // NOT
 nand #5 (a1,A,A);
 nand #5 (b1,B,B);
 nand #5 (c1,C,C);
 nand #5 (d1,D,D);

 // Function
 nand #5 (f1,a1,b1,d1);
 nand #5 (f2,B,c1);
 nand #5 (f3,A,B,D);
 nand #5 (f4,A,b1,c1);

 // 0-Hazard Free
 nand #5 (h1,A,c1);
 nand #5 (h2,c1,d1);

 // Output
 nand #5 (f5,f1,f2,f3,f4,h1,h2);
 nand #5 (F,f5,f5);

endmodule


module testbench;
 reg A,B,C,D;
 wire F;

 verilog_1205 V0 (A,B,C,D,F);

 initial
 begin
  #0 A=0; B=0; C=0; D=0;

  // hazard 1
  #40 B=1;
  #40 B=0;

  // hazard 2
  #40 A=1;
  #40 B=1;
  #40 B=0;

  // hazard 3
  #40 A=0;
  #40 A=1;
  #40 $finish;
 end


endmodule


7. 下圖為 0-Hazard Free 的模擬波形圖,由波形圖中可看到 0-Hazard 已被消除。

0 Comments:

張貼留言

<< Home