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

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

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

3天內不再提示

Verilog編碼風格

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-06-26 10:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

    關注

    1660

    文章

    22412

    瀏覽量

    636404
  • Verilog
    +關注

    關注

    30

    文章

    1374

    瀏覽量

    114531

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Verilog HDL語法學習筆記

    Verilog HDL 語 言 最 初 是 作為 Gateway Design Automation 公 司 ( Gateway DesignAutomation 公司后來被著名的 Cadence Design Systems 公司收購)模擬器產品開發的硬件建模語言。
    的頭像 發表于 03-04 15:04 ?4341次閱讀
    <b class='flag-5'>Verilog</b> HDL語法學習筆記

    hcs301 編碼跳變編碼器應用手冊

    電子發燒友網站提供《hcs301 編碼跳變編碼器應用手冊.pdf》資料免費下載
    發表于 02-09 16:35 ?0次下載

    Linux內核編碼風格權威總結:從縮進到底層設計,讓你的代碼更“內核味”

    作為全球最龐大的開源項目之一,Linux 內核的代碼量早已突破千萬行。要讓來自世界各地的開發者高效協作,一套統一、嚴謹的編碼風格必不可少 —— 這不僅是 “代碼顏值” 的要求,更是可讀性、可維護性的核心保障。
    的頭像 發表于 02-09 16:29 ?129次閱讀
    Linux內核<b class='flag-5'>編碼</b><b class='flag-5'>風格</b>權威總結:從縮進到底層設計,讓你的代碼更“內核味”

    請問verilog文件開頭部分的@00080000是什么意思?

    請問verilog文件開頭部分的@00080000是什么意思??
    發表于 11-06 08:10

    使用NucleiStudio生成tb仿真需要的.verilog文件

    打開仿真頂層文件tb_top.v,存放在ITCM模塊里面的指令是通過readmemh函數讀入.verilog文件實現的: 下面通過對NucleiStudio IDE進行設置,實現將c
    發表于 11-05 07:07

    絕對值編碼器與增量式編碼器相比有哪些優勢?

    絕對值編碼器與增量式編碼器相比有哪些優勢?核心功能:斷電后位置信息不丟失,絕對值編碼器:通過機械結構或電子存儲(如電池備份),能實時輸出當前位置的唯一絕對值編碼(如二進制、格雷碼)。無
    的頭像 發表于 08-11 13:57 ?1654次閱讀
    絕對值<b class='flag-5'>編碼</b>器與增量式<b class='flag-5'>編碼</b>器相比有哪些優勢?

    增量型編碼器與絕對值型編碼器怎么選擇?

    在選擇增量型編碼器與絕對值型編碼器時,需要考慮多個因素,包括應用需求、成本、精度、可靠性以及環境適應性等。以下是對兩種編碼器的詳細比較及選擇建議: 一、增量型編碼器 1. 優點: ?
    的頭像 發表于 07-10 10:34 ?1399次閱讀

    RTL級機器人電機控制器的FPGA設計

    借助Verilog,在FPGA中實現了帶編碼器的兩臺電機的電機控制系統的RTL級設計。
    的頭像 發表于 07-07 14:01 ?2911次閱讀
    RTL級機器人電機控制器的FPGA設計

    verilog模塊的調用、任務和函數

    在做模塊劃分時,通常會出現這種情形,某個大的模塊中包含了一個或多個功能子模塊,verilog是通過模塊調用或稱為模塊實例化的方式來實現這些子模塊與高層模塊的連接的.
    的頭像 發表于 05-03 10:29 ?1573次閱讀
    <b class='flag-5'>verilog</b>模塊的調用、任務和函數

    FPGA Verilog HDL語法之編譯預處理

    Verilog HDL語言和C語言一樣也提供了編譯預處理的功能。“編譯預處理”是Verilog HDL編譯系統的一個組成部分。Verilog HDL語言允許在程序中使用幾種特殊的命令(它們不是一般
    的頭像 發表于 03-27 13:30 ?1439次閱讀
    FPGA <b class='flag-5'>Verilog</b> HDL語法之編譯預處理

    優先編碼器:高效數據選擇與編碼的解決方案

    在現代數字電路設計中,數據的選擇與編碼是不可或缺的重要環節。面對眾多輸入信號,如何高效地選擇并編碼所需數據,成為設計師們面臨的一大挑戰。優先編碼器,作為一種獨特的數字電路組件,憑借其高效、靈活的特點
    的頭像 發表于 03-25 08:33 ?1172次閱讀

    一文詳解Verilog HDL

    Verilog HDL(Hardware Description Language)是一種硬件描述語言,用于從算法級、門級到開關級的多種抽象設計層次的數字系統建模。現實生活中多用于專用集成電路
    的頭像 發表于 03-17 15:17 ?4302次閱讀
    一文詳解<b class='flag-5'>Verilog</b> HDL

    編碼器與無軸承編碼器,到底如何選擇?

    在選擇軸編碼器與無軸承編碼器時,需要根據具體的應用場景、性能需求、環境條件和成本預算等因素進行綜合考慮。以下是對兩者的詳細對比,以幫助做出合適的選擇: 一、工作原理與結構 1. 軸編碼
    的頭像 發表于 03-11 15:33 ?1325次閱讀
    軸<b class='flag-5'>編碼</b>器與無軸承<b class='flag-5'>編碼</b>器,到底如何選擇?

    伺服電機編碼器怎么選型

    伺服電機編碼器的選型是一個綜合性的過程,需要考慮多個因素以確保所選編碼器能夠滿足系統的性能要求。以下是一些關鍵的選型步驟和考慮因素: 一、明確應用需求 首先,需要明確伺服電機編碼器的應用需求,包括
    的頭像 發表于 03-11 12:01 ?2064次閱讀
    伺服電機<b class='flag-5'>編碼</b>器怎么選型

    尋找verilog高手,有報酬

    我采集了一塊電路板正常工作時的數據,基于這些數據我想用EPM7128slc84-15(sys_clk:50Mhz)測試電路板,尋求一位verilog高手,有償
    發表于 03-08 16:31