色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

如何為FPGA編寫可綜合的代碼?

FPGA之家 ? 來源:AriesOpenFPGA ? 作者:0Aries0 ? 2021-05-23 14:51 ? 次閱讀

一、Verilog 編碼風格

(本文的語法高亮因為瀏覽器的緣故,所以不準確)

1.1 使用“`include編譯器指令”

文件包含“`include編譯器指令”用于在合成過程中將源文件的全部內容插入到另一個文件中。它通常用于包括全局項目定義,而無需在多個文件中重復相同的代碼。另一個用例是將代碼的一部分插入模塊,如以下示例所示:

// file test_bench_top.v // top-level simulation testbench module test_bench_top; `include “test_case.v” endmodule // file test_case.v initialbegin //… end task my_task; //… endtask

> include編譯器指令的語法定義為:`include

可以是文件名,還可以包含絕對或相對路徑名:

`include“test_case.v” `include“../../includes/test_case.v” `include“/home/myprojects/test/includes/test_case.v”

建議僅在include中使用文件名,而不要使用絕對或相對路徑名。這將使代碼位置獨立,因此更加可移植。另一個建議是保持包含文件簡單而不使用嵌套的include指令。

1.2使用`define編譯器指令,parameter和localparam

`define是文本宏替換編譯器指令。它定義為:`define

可以包含帶有可選參數列表的單行或多行文本。

`define具有全局范圍。一旦定義了文本宏名稱,就可以在項目中的任何地方使用它。文本宏通常是用于定義狀態名稱,常量或字符串的簡單標識符。

parameter關鍵字定義模塊特定的參數,該參數在特定模塊實例的范圍生效。參數用于為模塊實例提供不同的自定義,例如,輸入或輸出端口的寬度。以下是使用parameter關鍵字的示例:

module adder #(parameter WIDTH = 8) ( input[WIDTH-1:0] a,b, output [WIDTH-1:0] sum ); assign sum = a+ b; endmodule // adder // aninstance of adder module adder # (16) adder1 (.a(a[15:0]),.b(b[15:0]),.sum(sum[15:0]));

localparam關鍵字與parameter相似。它被分配了一個常量表達式,并在特定模塊內具有作用域。它定義為:

1.3 使用函數

以下是執行XOR操作的Verilog函數的簡單示例:

module function_example( inputa,b, output func_out); functionfunc_xor; inputa, b; begin func_xor = a^ b; end endfunction assign func_out = func_xor(a,b); endmodule // function_example

建議使用Verilog函數來實現組合邏輯和其他不需要非阻塞分配的操作,例如同步邏輯。使用函數可以編寫更緊湊和模塊化的代碼。所有綜合工具均支持Verilog函數。

1.4使用 generate塊

在Verilog-2001中引入了generate塊,以使對同一模塊,函數,變量,網絡和連續分配的多個實例的實例化變得容易。以下是使用generate的兩個示例:

// aconditional instantiation of modules parameter COND1 = 1; generate if(COND1) begin : my_module1_inst my_module1 inst (.clk(clk), .di(di), .do(do)); end elsebegin : my_module2_inst my_module2 inst (.clk(clk), .di(di), .do(do)); end endgenerate // using forloop in generate block genvar ii; generate for(ii = 0; ii < 32; ii = ii+1) begin: for_loop ????my_module1 inst (.clk(clk), .di(di[ii]), .do(do[ii])); ????end end endgenerate

1.5 開發簡單的代碼

始終努力開發簡單的代碼。與每種編程語言一樣,Verilog允許編寫詳細的語句,從功能的角度來看,這些語句很優美,但可讀性不高。下面的簡單示例說明了這一點:

reg [5:0] sel; reg [3:0] result1,result2,a,b; always @(*) begin result1 = sel[0] ? a + b : sel[1] ? a - b : sel[2] ? a & b : sel[3] ? a ^ b : sel[4] ? ~a : ~ b; if(~|sel) result1 = 4'b0; end// always

reg [5:0] sel; reg [3:0] result1,result2,a,b; always @(*) begin casex(sel) 6'bxxxxx1: result2 = a + b; 6'bxxxx10: result2 = a - b; 6'bxxx100: result2 = a & b; 6'bxx1000: result2 = a ^+ b; 6'bx10000: result2 = ~a; 6'b100000: result2 = ~b; default: result2 = 4'b0; endcase end // always

實現result1和result2的邏輯在功能上是等效的。但是,在result1中使用嵌套三元運算符和兩個賦值語句不太透明,并且與result2邏輯的更清晰的case語句相比,需要花更多的精力來理解。

通常,代碼清晰度高容易實現高效率。同一段代碼能在其生命周期內被多個開發人員讀取。編寫更清晰的代碼更容易調試,并且一般不容易包含錯誤。

二、為FPGA編寫可綜合的代碼

2.1考慮資源

Verilog語言參考手冊(LRM)提供了豐富的功能來描述硬件。但是,只有一部分語言可以為FPGA綜和。即使有些特定的語言結構是可綜合的,也不能保證該代碼能在特定FPGA上實現物理電路。考慮以下示例:

reg [7:0] memory[1:2**22]; initial begin memory[1] = 8’h1; memory[2] = 8’h2; end

該示例能正確模擬出來,但會導致FPGA物理實現失敗。該代碼需要4 MB的內存,這是一些FPGA所沒有的。此外,綜合工具將忽略初始塊,該塊將初始化內存的最低兩個字節。

該技巧提供了一些指導方針和建議,以幫助編寫用于FPGA的可綜合代碼。

2.2 遵循同步設計原則

建議開發人員遵守FPGA同步設計的原則,其中包括以下內容:

1、使用同步復位。后續會詳細討論,同步,異步復位的問題

2、避免使用鎖存

3、避免使用門控,派生或分頻時鐘

4、使用時鐘使能而不是多個時鐘

5、對所有異步信號實行正確同步

原文標題:學習FPGA的小Tips(一)

文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    1630

    文章

    21759

    瀏覽量

    604350
  • 代碼
    +關注

    關注

    30

    文章

    4803

    瀏覽量

    68752

原文標題:學習FPGA的小Tips(一)

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EE-134:為SHARC系列編寫C兼容匯編代碼中斷處理程序

    電子發燒友網站提供《EE-134:為SHARC系列編寫C兼容匯編代碼中斷處理程序.pdf》資料免費下載
    發表于 01-07 13:58 ?0次下載
    EE-134:為SHARC系列<b class='flag-5'>編寫</b>C兼容匯編<b class='flag-5'>代碼</b>中斷處理程序

    Verilog vhdl fpga

    崗位職責 1.負責FPGA的架構設計、代碼編寫、仿真等; 2.協同軟、硬件工程師完成系統聯調和測試; 3.負責項目中FPGA設計的相關文檔編寫
    發表于 11-12 16:40

    AIC3254的miniDSP編寫代碼編寫C5502代碼有什么區別?

    問題:AIC3254的miniDSP編寫代碼編寫C5502代碼有什么區別,執行速度和代碼量來進行分析吧,謝謝回復
    發表于 11-06 07:22

    基于FPGA實現數碼管顯示

    本文介紹數碼管顯示譯碼基本工作原理及Verilog HDL驅動代碼編寫,進一步熟練掌握FPGA入門基礎知識。
    的頭像 發表于 10-24 14:44 ?1051次閱讀
    基于<b class='flag-5'>FPGA</b>實現數碼管顯示

    怎么樣提高verilog代碼編寫水平?

    ,共同進步。 歡迎加入FPGA技術微信交流群14群! 交流問題(一) Q:怎么樣提高verilog代碼編寫水平?Cpu 從事DFT工作。目前僅限于寫一些簡單模塊。自學的話如何提高verilog
    發表于 09-25 20:05

    FPGA Verilog HDL代碼如何debug?

    ,共同進步。 歡迎加入FPGA技術微信交流群14群! 交流問題(一) Q:Verilog代碼如何debug?最近學習fpga,寫了不少verilog,開始思考如何debug的問題!c語言是順序執行,而
    發表于 09-24 19:16

    優化 FPGA HLS 設計

    優化 FPGA HLS 設計 用工具用 C 生成 RTL 的代碼基本不可讀。以下是如何在不更改任何 RTL 的情況下提高設計性能。 介紹 高級設計能夠以簡潔的方式捕獲設計,從而
    發表于 08-16 19:56

    基于FPGA的CCD工業相機系統設計

    基于FPGA的CCD工業相機系統設計是一個綜合性的項目,它結合了硬件電路設計、FPGA編程以及圖像處理技術。以下是一個詳細的系統設計方案,包括設計概述、硬件架構、FPGA編程要點以及部
    的頭像 發表于 07-17 11:24 ?1256次閱讀

    探討AI編寫代碼技術,以及提高代碼質量的關鍵:靜態代碼分析工具Perforce Helix QAC &amp; Klocwork

    令軟件開發人員夜不能寐的事情比比皆是。如今,他們最關心的問題不再是如何用自己喜歡的語言(C、C++、Erlang、Java 等)表達最新的算法,而是人工智能(AI)。 本文中,我們將介紹AI編寫代碼
    的頭像 發表于 06-05 14:10 ?420次閱讀

    FPGA基礎知識學習

    譯之前對用戶所設計的電路進行邏輯功能驗證,此時仿真沒有延遲信息,僅對功能進行驗證。 硬件描述語言編碼 :使用硬件描述語言編寫相應的代碼,這些代碼描述了FPGA的邏輯電路結構和功能。 仿
    發表于 04-29 23:26

    FPGA入門必備:Testbench仿真文件編寫實例詳解

    編寫完HDL代碼后,往往需要通過仿真軟件Modelsim或者Vivadao自帶的仿真功能對HDL代碼功能進行驗證,此時我們需要編寫Testbench文件對HDL功能進行測試驗證。
    發表于 04-29 10:43 ?2150次閱讀

    Xilinx FPGA的約束設置基礎

    LOC約束是FPGA設計中最基本的布局約束和綜合約束,能夠定義基本設計單元在FPGA芯片中的位置,實現絕對定位、范圍定位以及區域定位。
    發表于 04-26 17:05 ?1252次閱讀
    Xilinx <b class='flag-5'>FPGA</b>的約束設置基礎

    # FPGA 編程如何工作?

    確定電路中的潛在錯誤,用戶可以在最終編碼之前修復這些錯誤。 VHDL 允許用戶編寫結構化代碼。 高級綜合 (HLS) 是用 C 子集完成設計,編譯器將代碼轉換為 Verilog
    發表于 03-30 11:50

    FPGA開源項目:Verilog常用綜合IP模塊庫

    所有代碼在典型的 FPGA 和主流 FPGA 供應商中都具有高度重用性。 可以出于任何目的對文件進行重新混合、轉換和構建,甚至是商業用途。
    發表于 03-29 11:31 ?1034次閱讀
    <b class='flag-5'>FPGA</b>開源項目:Verilog常用<b class='flag-5'>可</b><b class='flag-5'>綜合</b>IP模塊庫

    時序電路為什么在FPGA綜合成了latch?

    有朋友提問,下面的代碼為什么在DC里可以綜合成DFF,而在FPGA上卻綜合成了latch。
    的頭像 發表于 02-20 16:12 ?841次閱讀
    時序電路為什么在<b class='flag-5'>FPGA</b>上<b class='flag-5'>綜合</b>成了latch?
    主站蜘蛛池模板: 中文无码热在线视频| 成人中文字幕在线观看| 国产精品无码麻豆放荡AV| 善良的小峓子2在钱中文版女主角 善良的小峓子2在钱免费中文字 | 跪趴式啪啪GIF动态图27报| 午夜国产免费视频亚洲| 韩国成人理伦片免费播放| 在线不卡中文字幕| 暖暖的高清视频在线观看免费中文| 99久久久无码国产AAA精品| 日本一二三区在线视频| 国产亚洲精品V在线观看一| 中文字幕欧美日韩VA免费视频| 女人的选择hd| 国产色婷婷亚洲99精品| 中文字幕亚洲无线码在线| 日本AAA片爽快视频| 国内精品免费久久影院| 4虎影院午夜在线观看| 色综合a在线| 久久青草免费91线频观看站街| 成人毛片免费播放| 亚洲视频免费看| 日本无修肉动漫在线观看| 国产中文在线观看| chinese极品嫩模videos| 亚洲国产精品一区二区第一页| 麻豆婷婷狠狠色18禁久久| 国产a在线不卡| 最近在线视频观看2018免费| 色婷婷国产精品视频一区二区三区 | 久久99热这里只频精品6| 粗壮挺进邻居人妻无码| 一二三四在线视频社区| 日日a.v拍夜夜添久久免费| 久久丫线这里只精品| 国产精品久久久久a影院| 456亚洲人成在线播放网站| 亚洲 欧美 日韩 卡通 另类| 欧美亚洲精品午夜福利AV| 久久观看视频|