国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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
    +關注

    關注

    1660

    文章

    22412

    瀏覽量

    636374
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73986

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    智能光伏時代:&quot;四&quot;技術如何提升電站綜合價值

    ,“可觀、測、可控、可調”的“四”技術,西格電力光伏四裝置咨詢:1.3.7-5.0.0.4-6.2.0.0,憑借對電站全生命周期的智能化賦能,成為提升
    的頭像 發表于 11-28 16:35 ?2032次閱讀
    智能光伏時代:&quot;四<b class='flag-5'>可</b>&quot;技術如何提升電站<b class='flag-5'>綜合</b>價值

    AMD利用重構FPGA設備Moku實現自定義激光探測解決方案

    摘要本文介紹了AdvancedMicroDevices,AMD公司如何基于重構FPGA設備自定義激光探測解決方案,替代傳統的儀器配置,通過靈活且定制的FPGA設備Moku提供更高效
    的頭像 發表于 11-20 17:28 ?1708次閱讀
    AMD利用<b class='flag-5'>可</b>重構<b class='flag-5'>FPGA</b>設備Moku實現自定義激光探測解決方案

    開源RISC-V處理器(蜂鳥E203)學習(二)修改FPGA綜合環境(移植到自己的Xilinx FPGA板卡)

    移植到自己的板卡上。 2.運行原FPGA工程 進入到FPGA目錄下; gvim打開“README.md”文件,下面就是FPGA綜合的命令。 這里以最后一個:artydevkit
    發表于 10-31 08:46

    FPGA開發板vivado綜合、下載程序問題匯總

    在做vivado綜合時和FPGA下載程序時,我們碰到以下問題,并找出了對應的解決方案。 1.could not open include file”e203_defines.v”問題 在做
    發表于 10-24 07:12

    E203軟件仿真下改變DTCM和ICTM容量的方法

    隊伍編號:CICC1304 系統:Ubuntu20.04iverilog:12.0 E203內核的DTCM和ICTM的默認配置為64KB的大小。然而,我們自己編寫的應用程序可能因為代碼量或者數據量
    發表于 10-20 12:22

    基于FPGA開發板TSP的串口通信設計

    本文詳細介紹基于Terasic FPGA開發板TSP(又名C5P和OSK)和其板載CP2102N USB-UART橋接芯片的串口通信系統設計與實現。系統采用Verilog HDL編寫UART收發控制器,通過CP2102N實現FPGA
    的頭像 發表于 10-15 11:05 ?4469次閱讀
    基于<b class='flag-5'>FPGA</b>開發板TSP的串口通信設計

    利用英特爾Agilex FPGA應對PQC與CRA挑戰

    當下,半導體行業的安全需求正經歷深刻演變,后量子密碼學(PQC)與 《網絡彈性法案》(CRA)成為繞不開的重要議題。跟隨本文一起,深入剖析這兩大趨勢帶來的挑戰,并詳解 Altera Agilex 3、Agilex 5 FPGA 及 SoC 的全新功能,如何為行業構建面向未
    的頭像 發表于 08-08 17:11 ?4311次閱讀
    利用英特爾Agilex <b class='flag-5'>FPGA</b>應對PQC與CRA挑戰

    RTOS SDK的canmv_net_mgmt網絡模塊如何編寫連接代碼?

    從最近源碼更新了一次后,以前的可執行文件使用出錯了,請問有沒有大哥知道新一版源碼怎么編寫代碼進行操作網絡模塊canmv_net_mgmt。 或者是操作canmv_net_mgmt的頭文件都是哪些,可以參考些什么
    發表于 07-25 08:14

    基于FPGA的壓縮算法加速實現

    法的速度。我們將首先使用C語言進行代碼實現,然后在Vivado HLS中綜合實現,并最終在FPGA板(pynq-z2)上進行硬件實現,同時于jupyter notebook中使用python來進行功能驗證。
    的頭像 發表于 07-10 11:09 ?2396次閱讀
    基于<b class='flag-5'>FPGA</b>的壓縮算法加速實現

    何為 Android 操作系統/設備生成 APK ?

    何為 Android 操作系統/設備生成 APK ?
    發表于 06-30 07:12

    【經驗分享】玩轉FPGA串口通信:從“幻覺調試”到代碼解析

    FPGA開發,思路先行!玩FPGA板子,讀代碼是基本功!尤其對從C語言轉戰FPGA的“寶貝們”來說,適應流水線(pipeline)編程可能需要點時間。上篇點燈
    的頭像 發表于 06-05 08:05 ?1108次閱讀
    【經驗分享】玩轉<b class='flag-5'>FPGA</b>串口通信:從“幻覺調試”到<b class='flag-5'>代碼</b>解析

    RAKsmart企業服務器上部署DeepSeek編寫運行代碼

    在RAKsmart企業服務器上部署并運行DeepSeek模型的代碼示例和詳細步驟。假設使用 Python + Transformers庫 + FastAPI實現一個基礎的AI服務。主機推薦小編為您整理發布RAKsmart企業服務器上部署DeepSeek編寫運行
    的頭像 發表于 03-25 10:39 ?705次閱讀

    MCXN947使用ADC并編寫代碼,總是報警告是怎么回事?

    我使用 MCXN947,我想使用 ADC 并編寫代碼,但警告總是發生。然后我創建了一個新項目進行調試,它仍然發生了。 我試著打掃,但還是沒用。 警告:無法將 \'main\' 從主機編碼 (CP1252) 轉換為 UTF-32。 這通常不會發生,請提交 bug 報告。
    發表于 03-20 08:17

    27個FPGA實例源代碼

    本資料收集匯總了27個FPGA實例源代碼,有需要的可以下載學習! 獲取完整文檔資料可下載附件哦?。。?!如果內容有幫助可以關注、點贊、評論支持一下哦~
    發表于 03-14 17:31

    何為micropython添加自己的C代碼庫?

    部分代碼需要更高效的效率 如何為micropython添加自己的C代碼庫? 是否有教程? 如果可以的話是否可以提供一個實現實例?
    發表于 03-11 07:03