精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Vivado HDL編寫示例

CHANBAEK ? 來源:FPGA入門到精通 ? 作者:未可知摩爾 ? 2023-05-16 16:58 ? 次閱讀

Vivado 軟件提供了HDL編寫中常用的示例,旨在幫助初學者更好地理解和掌握HDL編程,這里分享一下verilog代碼示例。

一、觸發器、寄存器與鎖存器

Vivado綜合工具根據HDL代碼會選擇4種寄存器原語:

  • FDCE:帶有時鐘使能和異步清0的D觸發器;
  • FDPE:帶有時鐘使能和異步預置(Preset)的D觸發器;
  • FDSE:帶有時鐘使能和同步置位的D觸發器;
  • FDRE:帶有時鐘使能和同步復位的D觸發器;

觸發器是一種存儲器件,可以用來存儲一個二進制位。 常見的觸發器有D觸發器、JK觸發器、T觸發器等。

module dff(
    input clk,
    input reset,
    input d,
    output reg q
);

always @(posedge clk or posedge reset) begin
    if (reset) begin
        q <= 0;
    end else begin
        q <= d;
    end
end

endmodule

寄存器是一種廣泛使用的存儲器件,可以在時序邏輯中存儲多個比特位,通常由觸發器或D觸發器等邏輯單元實現。 一個寄存器需要同時包含時鐘、使能和數據輸入端口

module register(
    input clk,
    input enable,
    input [7:0] d,
    output reg [7:0] q
);

always @(posedge clk) begin
    if (enable) begin
        q <= d;
    end
end

endmodule

Vivado綜合會報告檢測出的鎖存器(Latches),這些鎖存器是由組合邏輯HDL代碼設計錯誤引起的,比如if或case狀態不完整。 綜合會為檢測出的鎖存器報告一個WARNING(Synth 8-327)。

module latches (
    input a,
    input b,
    input clr,
    output reg q
);

always @ *
    if(CLR) q = a;
    else if(G) q = b;

endmodule

二、三態緩沖器

三態緩沖器是一種帶有使能控制的存儲器件,允許多個設備共享同一個總線信號。 當三態緩沖器的使能信號為高時,它就會輸出輸入信號; 當使能信號為低時,它就會將輸出信號設置為高阻(高阻狀態)。

module tristate_buffer(
    input enable,
    input [7:0] data_in,
    output reg [7:0] data_out,
    inout [7:0] bus
);

assign bus = enable ? data_out : 8'bZ;

always @(bus, enable) begin
    if (enable) begin
        data_out <= data_in;
    end
end

endmodule

三、移位寄存器

移位寄存器是一種可以將數據向左或向右移位的存儲器件。 它可以在時序邏輯中被用來實現FIR濾波器數字信號處理等應用。

Vivado 綜合中使用 SRL 類型的資源(SRL16E 和 SRLC32E)來實現移位寄存器。 根據移位寄存器的長度不同,在綜合時會選擇采用一個 SRL 類型原語,或采用級聯的 SRLC 類型原語進行實現。

module shift_register(
    input clk,
    input [7:0] data_in,
    output reg [7:0] data_out
);

reg [7:0] reg_data [0:7];

always @(posedge clk) begin
    for (int i = 7; i > 0; i--) begin
        reg_data[i] <= reg_data[i-1];
    end
    reg_data[0] <= data_in;
end

assign data_out = reg_data[7];

endmodule

四、乘法器

乘法器是一種數學運算器件,可以在FPGA設計中進行數字乘法。 乘法器在數碼信號處理器中非常常見,在數字信號處理、濾波器和音頻編解碼器等領域有廣泛的應用。

Vivado綜合時會根據實際情況,確定是用LUT實現,還是用DSP實現,建議使用乘法時,計算結果輸出多打兩拍,有助于改善時序。

module multiplier_unsigned(
    input clk, 
    input [7:0] a,
    input [7:0] b,
    output reg signed [15:0] c
);

always @(posedge clk) begin
    c <= a * b;
end

endmodule

五、黑盒子

FPGA設計支持EDIF網表,可以在HDL源代碼中使用BLACK_BOX屬性完成實例化,該實例將被視作黑盒子。

//模塊定義
(* black_box *) module black_box
(
    input in1, in2, 
    output dout
);
   //此處省略代碼
endmodule

//模塊實例化
module black_box
(
    input DI_1, DI_2, 
    output DOUT
);

//模塊調用
black_box u_black_box (
    .in1(DI_1),
    .in2(DI_2),
    .dout(DOUT)
);

endmodule

六、FSM狀態機

Vivado綜合時可以從RTL源碼中提取出有限狀態機(FSM)邏輯,支持Moore和Mealy型狀態機。 一個狀態機由狀態寄存器、下一個狀態功能、輸出功能三部分組成。

module fsm(
    input clk,
    input reset,
    input [1:0] state_in,
    output reg [1:0] state_out
);

parameter STATE_A = 2'd0;
parameter STATE_B = 2'd1;
parameter STATE_C = 2'd2;

reg [1:0] state_reg;

always @(posedge clk) begin
    if (reset) begin
        state_reg <= STATE_A;
    end else begin
        case (state_reg)
            STATE_A: state_reg <= STATE_B;
            STATE_B: state_reg <= STATE_C;
            STATE_C: state_reg <= STATE_A;
            default: state_reg <= STATE_A;
        endcase
    end
end

assign state_out = state_reg;

endmodule
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5250

    瀏覽量

    119180
  • HDL
    HDL
    +關注

    關注

    8

    文章

    324

    瀏覽量

    47228
  • 鎖存器
    +關注

    關注

    8

    文章

    903

    瀏覽量

    41311
  • 觸發器
    +關注

    關注

    14

    文章

    1990

    瀏覽量

    60862
  • Vivado
    +關注

    關注

    19

    文章

    797

    瀏覽量

    65848
收藏 人收藏

    評論

    相關推薦

    正弦振蕩用verilog HDL如何編寫

    正弦振蕩用verilog HDL如何編寫
    發表于 04-15 22:00

    使用Vivado實現硬宏的示例

    嗨,我正在尋找有關如何使用Xilinx Vivado創建Hard宏的示例。了解如何在設計中修復路由并在閱讀pdf(下面)時,提到可以根據要求提供示例,這將非常有幫助。我是否可以收到一些此實施的
    發表于 11-12 14:42

    Vivado生成的HDL代碼是否在Vivado自帶的許可證之上有任何特殊的許可

    大家好,我想知道Vivado生成的HDL代碼是否在Vivado自帶的許可證之上有任何特殊的許可。考慮為AXI奴隸生成的代碼,有什么阻止我在設置中使用它大學課程的論文?如果代碼剛剛生成并從設計訴訟中
    發表于 12-20 11:23

    怎么將Vivado項目轉換為ISE項目

    我想知道是否可以將Vivado項目轉換為ISE項目,以便將其導入HDL Designer。 HDL設計師確實有Vivado流,但不是Vivado
    發表于 12-20 11:24

    vivado_tutorial示例項目文檔內容

    你好,我對vivado很新,并嘗試使用安裝vivado時提供的一些示例。在expamples \ vivado_toturial \ Projects下可以找到幾個項目,但是我找不到這
    發表于 03-27 10:17

    請問如何在Vivado項目中實例化hdl系統生成器輸出的多個實例》

    嗨,如何在Vivado項目中實例化hdl系統生成器輸出的多個實例?在vivado項目中很容易實例化一個hdl系統生成器輸出。當我想將另一個實例實例化到同一個項目時,我在合成狀態下面臨一
    發表于 07-31 10:38

    Vivado的多種RAM編寫方式

    Vivado綜合可以理解多種多樣的RAM編寫方式,將其映射到分布式RAM或塊RAM中。兩種實現方法在向RAM寫入數據時都是采取同步方式,區別在于從RAM讀取數據時,分布式RAM采用異步方式,塊RAM
    發表于 09-29 09:40

    Vivado中進行HDL代碼設計

    Vivado中進行HDL代碼設計,不僅需要描述數字邏輯電路中的常用功能,還要考慮如何發揮Xilinx器件的架構優勢。目前常用的HDL語言有三種。VHDL語言的優勢有:語法規則更加嚴格;在HD
    發表于 09-29 10:08

    Guide to HDL Coding Styles for Synthesis

    這篇文章討論了不同HDL代碼的編寫方式,對綜合結果的影響。閱讀本文對深入了解綜合工具和提高HDL編寫水平有不少幫助,原文時針對Synopsys的綜合軟件論述的,但對所有綜合軟件,
    發表于 01-17 11:14 ?0次下載

    Vivado中用HDL定義BRAM存儲器并用updatemem合成bit文件

    debug模塊),存放ARM程序的存儲器是實現在FPGA片上RAM上的;ARM程序用Keil MDK編寫,我希望在測試這個程序時,不用每次都重新綜合一遍FPGA。 總體來說這個需求是: Vivado
    發表于 02-08 05:40 ?3787次閱讀
    <b class='flag-5'>Vivado</b>中用<b class='flag-5'>HDL</b>定義BRAM存儲器并用updatemem合成bit文件

    Verilog HDL語言及VIVADO的應用

    中國大學MOOC 本課程以目前流行的Xilinx 7系列FPGA的開發為主線,全面講解FPGA的原理及電路設計、Verilog HDL語言及VIVADO的應用,并循序漸進地從組合邏輯、時序邏輯的開發開始,深入到FPGA的基礎應用、綜合應用和進階應用。
    的頭像 發表于 08-06 06:12 ?3630次閱讀
    Verilog <b class='flag-5'>HDL</b>語言及<b class='flag-5'>VIVADO</b>的應用

    Vivado中電路結構的網表描述

    我們都知道FPGA的實現過程分為2步:分析綜合與布局布線后就可以產生目標文件,這兩個步驟中間有個非常重要的文件,那就是-網表。 下圖是Vivado中網表列表示例: ? ? ? ? ? Vivado
    的頭像 發表于 05-14 10:46 ?4210次閱讀
    <b class='flag-5'>Vivado</b>中電路結構的網表描述

    UM1864_Java編寫游戲示例

    UM1864_Java編寫游戲示例
    發表于 11-22 19:09 ?0次下載
    UM1864_Java<b class='flag-5'>編寫</b>游戲<b class='flag-5'>示例</b>

    Vivado使用技巧-HDL編寫

    Vivado 中進行HDL代碼設計,不僅需要描述數字邏輯電路中的常用功能,還要考慮如何發揮Xilinx器件的架構優勢。目前常用的HDL語言有三種。 (1)VHDL 語言的優勢有: 語法規則更加
    的頭像 發表于 12-28 17:05 ?2955次閱讀

    自己編寫函數示例代碼很難嗎?分享幾個示例

    Q A 問: Arduino Uno的函數示例 我決定自己編寫函數示例代碼,因為這應該是Arduino中的基本示例。網絡上確實有關于使用函數的文檔,但是,如果要嘗試使用代碼環境,則必須
    的頭像 發表于 11-16 16:05 ?403次閱讀
    自己<b class='flag-5'>編寫</b>函數<b class='flag-5'>示例</b>代碼很難嗎?分享幾個<b class='flag-5'>示例</b>!