xilinx fpga學習筆記4

十一、算術運算的實現
 1、Verilog對符號和無符號運算的支持
   沒有明確的表示規範,Verilog定義了下面的規則:
 (1)Port、wire和reg向量類型被當做無符號類型,否則明確聲明的是有符號的;
 (2)整數變量被當做是有符號的,除非明確聲明;
 (3)十進制數是有符號的;
 (4)基數是無符號的,除非明確聲明。
   使用unsigned和signed關鍵字來明確強迫數據類型的表示。下面給出描述方法:
 input signed[31:0] example1;
 reg unsigned[15:0] example2;
   wire signed[31:0] example3;
   可以強迫基數是有符號的,在基數說明時,使用s符號:
 4'sd87
  此外,設計者能保證正確的類型,通過$signed和$unsigned轉換函數:
  wire[7:0] udata;
  wire[7:0] sdata;
  assign sdata = $signed(udata);


  在Verilog中,一個表達式的類型只通過它的操作數來定義。它不取決於分配左邊部分的類型。一個表達式的類型通過下面的規則解析:
(1)bit選擇的結果是無符號的,不考慮操作數;
(2)part選擇的結果是無符號的,不考慮操作數即使part選擇指明瞭整個向量;
(3)串聯的結果是無符號的,不考慮操作數;
(4)比較的結果是無符號的,不考慮操作數;
(5)任何自定操作數的符號和比特位的寬度是由操作數本身所決定的,獨立於表達式的剩餘部分。如果使用上下文決定操作數,在verilog LRM查看額外的嚮導。


2、 FPGA內算術運算實現的方法
  xilinx FPGA包含一些傳統的硬件資源,例如,LUT和進位鏈。這些資源高效的實現各種算術操作,比如加法器、減法器、計數器、累加器和比較器。
  隨着virtex高端FPGA芯片的出現,Xlinx引入了新的原語,稱爲DSP48。這個模塊在未來的virtex-5、virtex-6和spartan6上進行功能的擴充。DSP48 slice允許創建大量的功能,包括乘法器、加法器計數器、桶型移位寄存器、比較器、累加器、乘累加、複數乘法器等。
  目前,XST綜合工具支持最重要的和經常使用的DSP48模式,用於數字信號處理,綜合工具也利用DSP48內的寄存器,比如動態的OPMODE端口。
  DSP48的快速連接允許高效地建立快速的DSP48鏈,用作濾波器。綜合工具支持這些快速連接。
  由於在目標器件上有很多方式實現相同的算術操作,綜合工具根據操作的類型,大小,上下文的使用或者時序要求自動進行選擇。在一些條件下,自動選擇並不滿足設計者的要求。因此,綜合工具提供了一些約束來控制實現的過程,比如在XST中的use_dsp48或者在Synplicity中的syn_dsptyle。
   如果設計者將以前的設計從使用先前的FPGA系列芯片,移植到新的帶有DSP48模塊的新的FPGA時,對於設計者來說,如果想利用可用的DSP48模塊,必須知道下面這些規則,這些規則可以使設計達到最高性能。
(1)當充分流水線時,DSP48模塊給出最好的性能。因此,爲了達到最小的性能,設計者應該添加一些額外的流水級。
(2)內部的DSP48寄存器支持同步置位和復位信號。不支持異步復位信號。因此,必須將異步初始化的信號使用同步初始化替換,一些綜合工具可以自動進行替換。這種操作所給出的生成網表並不等於初始的RTL描述。
(3)對於DSP應用來講,在RTL描述中,使用鏈結構替換樹狀結構,可以充分利用DSP48的能力。


   XST儘可能多利用資源,爲了高性能、高功能地實現算術邏輯。下面討論在XST控制實現算術邏輯的方法:
(1)實現算術的宏,可以在切片邏輯上,可以在DSP模塊上,通過綜合工具的Use DSP Block屬性控制,默認值是auto。
(2)在自動模式下,XST考慮真正可用的DSP資源,爲了避免過度地映射目標器件。XST可以使用目標器件上可用的所有DSP資源。XST綜合工具的DSP利用率屬性(DSP_UTILIZATION_RATIO)強迫XST留出一些資源未被分配。
(3)一些算術宏,比如獨立的加法器,累加器和計數器,默認時不使用DSP資源。爲了在DSP資源實現,將XST綜合屬性USE_DSP48設置爲yes。
(4)利用在DSP模塊上實現算術功能的流水線寄存器,用一個可選擇的時鐘使能描述寄存器,寄存器也是可選的和可同步復位的。
(5)異步復位邏輯阻止其實現,應該避免。
(6)當描述無符號算術時,記住DSP模塊資源假設是有符號的操作數。設計者不能映射無符號的數到單個DSP模塊的全部數據寬度。例如,XST能在virtex-6的DSP48E1上實現25*18的有符號乘法。在同樣的單獨的模塊上它能實現最多24*17的無符號的積,DSP輸入的最好有效位設置爲0.

十二、 擴展的DSP推斷
    除了作爲延遲級(寄存器)、乘、乘加/減、積累、乘法累加和ROM等這些基本功能的粒度更細的推理能力外,XST使用可移植行爲的源代碼,提供描述濾波器的擴展推理能力等基本功能。
    XST試圖瞭解基本功能的元素之間的任何基本的上下文關係的存在,比利用xilinx器件上可用的DSP塊資源的強大功能(流水線階段、級聯路徑、預加法器級、時間複用),用於高性能實現並降低功耗。
    要優化充分利用DSP模塊的功能,使用一個加法器鏈,而不是一個加法器樹爲骨幹對濾波器進行描述,有些HDL語言功能,如在VHDL的for generate,便於描述這些一個濾波器,確保代碼最大的可讀性和可擴展性。
    Xlinx FPGA內的DSP模塊中可選的預加法器用於對稱濾波器。如果設計者沒描述對稱濾波器,利用預加法器。可以將所要求的DSP模塊數量減少一半。
    由於XST不能自動識別和分解對稱係數,Xilinx不推薦設計者使用通用的方式描述濾波器和假設XST能確認濾波器的對稱性。設計者必須手工編寫代碼分解因式,爲了XST能看到使用預加法器的機會,相應的誒之DSP模塊。

    注意:對於利用預加法器的能力,XST必須能識別一個描述,即使設計的數據的寬度較小,這個描述能準確的匹配加法器的大小特徵。這個要求是指定預加法器。使用signed和unsigned擴展,用於明確的填充預加法器的操作數,來保證在DSP資源上正確的推斷和實現。


十三、屬性/約束及傳遞
1、屬性及傳遞
    屬性是附加到xilinx原始例化中的特性,用以說明它們的行爲。屬性與器件結構原語原件正確的關聯,直接想到例化元件的功能或實現,屬性通過下面的方式傳遞:
  (1)在VHDL中,通過generic映射。
  (2)在Verilog中,通過defparams或者內聯參數傳遞。
  例如下面的屬性:
   (1)lut4組件上的INIT屬性;
   (2)DCM上的CLKFX_DIVIDE屬性。
  下面的Verilog代碼給出了一個例化的IBUFDS符號,在這裏DIFF_TERM和IOSTANDARD被分別制定爲FALSE和DEFAULT。下面給出Verilog的描述:
  IBUFDS #(
.CAPACITANCE("DONT_CARE"),
.DIFF_TERM("FALSE"),
.IBUF_DELAY_VALUE("0"),
.IFD_DELAY_VALUE("AUTO"),
.IOSTANDARD("DEFAULT")
      )IBUFDS_inst(
.o(o),
.i(i),
.ib(ib)
);

2、綜合約束傳遞
   綜合約束指導綜合工具對特定設計和HDL代碼進行優化。它們可以嵌入到HDL代碼中或者以單獨的約束文件形式存在,綜合約束的例子有:
  (1)USE_DSP48(XST)
  (2)RAM_STYLE(XST)
   綜合約束傳遞包括:傳遞綜合約束,傳遞HDL綜合屬性。
   在設計中,約束可以附加到HDL對象中,或由一個獨立的約束文件指定。可以通過兩種傳遞約束到HDL對象:
  (1)描述對象的預定義數據;
  (2)直接將屬性連接到HDL對象。
   預定義屬性可以通過一個COMMAND文件或綜合工具中的約束文件進行傳遞,或者可以直接在HDL編碼中定義屬性,下面只討論在HDL代碼中傳遞屬性。
   傳遞Verilog綜合屬性
   在VHDL中,很多廠商採用了一致的語法用於傳遞屬性,但是並沒有在Verilog中採用一致的語法傳遞屬性。Verilog中歷史屬性的傳遞通過稱爲元件註釋的方式實現。每個綜合工具都有自己的元註釋語法。
  Verilog2001提供了統一的用於傳遞屬性的語法,在聲明對象以前,立即聲明屬性,所有在屬性聲明的過程中並不出現對象的名字。
  下面給出Verilog綜合屬性傳遞的例子,注意不是所有的工具都支持這種寫法。
 (* RLOC = "R1C0.S0" *) FDCE #(
  .INIT(1'b0)  
 )U2(
    .Q(Q1),
.C(CLK),
.CE(CE),
.CLR(RST),
.D(Q0)
   );
3、實現約束
   在處理FPGA設計時,實現約束是一系列傳遞給FPGA實現工具的命令,指示其映射、佈局、時序或者其他嚮導。實現約束通常放在用戶約束文件中(UCF),也可能存在於HDL代碼中或綜合約束文件中,實現約束的例子有
  (1)"LOC"(佈局);
  (2)"PERIOD"(時序);

十四 例化原件和FPGA原語
1、 例化FPGA原語
   xilinx提供了一組庫,包含結構特定的和定製的元件,這些元件能在設計中明確的例化作爲一個元件使用。
   結構特定的元件,這些原件被建立到實現工具的庫中,不需要指定一個定義就可以用於例化。在庫嚮導中,這些原件標記爲原語。在庫嚮導中標記爲宏的元件沒有建立到實現工具的庫中,因此不能被例化。庫嚮導中的宏元件被定義爲原理圖符號。當使用宏的時候,原理圖工具將宏解析成基本的元素。FPGA原語能使用HDL語言進行例化。所有的FPGA原語都在UNISIM庫中。
   下面給出元件聲明和端口映射的Verilog描述
  module flops(input d1,ce,clk,rst,output,q1);
   FDCE u1(
.D(d1),
.CE(ce),
.C(clk),
.CLR(rst),
.Q(q1));
  endmodule


   xilinx的原語有一組相關的屬性,這些屬性可以通過下面的方式添加到原語中:
 (1)VHDL屬性傳遞;
 (2)Verilog屬性傳遞;
 (3)VHDL類屬性傳遞;
 (4)Verilog參數傳遞;
 (5)用戶約束文件。


2、 例化核生成器模塊
   核生成器生成:
 (1)電子數據交換格式(EDIF)或(NGC)網表,或兩者都有,用來進行功能描述;
 (2)HDL例化中元件例化模板。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章