一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Verilog編碼風(fēng)格

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

掃碼添加小助手

加入工程師交流群

一、Verilog 編碼風(fēng)格

(本文的語法高亮因?yàn)闉g覽器的緣故,所以不準(zhǔn)確)

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

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

// 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中使用文件名,而不要使用絕對或相對路徑名。這將使代碼位置獨(dú)立,因此更加可移植。另一個(gè)建議是保持包含文件簡單而不使用嵌套的include指令。

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


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

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

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

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

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關(guān)鍵字與parameter相似。它被分配了一個(gè)常量表達(dá)式,并在特定模塊內(nèi)具有作用域。它定義為:

1.3 使用函數(shù)

以下是執(zhí)行XOR操作的Verilog函數(shù)的簡單示例:

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函數(shù)來實(shí)現(xiàn)組合邏輯和其他不需要非阻塞分配的操作,例如同步邏輯。使用函數(shù)可以編寫更緊湊和模塊化的代碼。所有綜合工具均支持Verilog函數(shù)。

1.4使用 generate塊

在Verilog-2001中引入了generate塊,以使對同一模塊,函數(shù),變量,網(wǎng)絡(luò)和連續(xù)分配的多個(gè)實(shí)例的實(shí)例化變得容易。以下是使用generate的兩個(gè)示例:

// 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 開發(fā)簡單的代碼

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

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

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

通常,代碼清晰度高容易實(shí)現(xiàn)高效率。同一段代碼能在其生命周期內(nèi)被多個(gè)開發(fā)人員讀取。編寫更清晰的代碼更容易調(diào)試,并且一般不容易包含錯(cuò)誤。

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

2.1考慮資源

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

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

該示例能正確模擬出來,但會(huì)導(dǎo)致FPGA物理實(shí)現(xiàn)失敗。該代碼需要4 MB的內(nèi)存,這是一些FPGA所沒有的。此外,綜合工具將忽略初始塊,該塊將初始化內(nèi)存的最低兩個(gè)字節(jié)。

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

2.2 遵循同步設(shè)計(jì)原則

建議開發(fā)人員遵守FPGA同步設(shè)計(jì)的原則,其中包括以下內(nèi)容:

1、使用同步復(fù)位。后續(xù)會(huì)詳細(xì)討論,同步,異步復(fù)位的問題

2、避免使用鎖存

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

4、使用時(shí)鐘使能而不是多個(gè)時(shí)鐘

5、對所有異步信號(hào)實(shí)行正確同步

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1645

    文章

    22050

    瀏覽量

    618717
  • Verilog
    +關(guān)注

    關(guān)注

    29

    文章

    1367

    瀏覽量

    112313

原文標(biāo)題:學(xué)習(xí)FPGA的小Tips(一)

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    FPGA Verilog HDL語法之編譯預(yù)處理

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

    Verilog 電路仿真常見問題 Verilog 在芯片設(shè)計(jì)中的應(yīng)用

    在現(xiàn)代電子設(shè)計(jì)自動(dòng)化(EDA)領(lǐng)域,Verilog作為一種硬件描述語言,已經(jīng)成為數(shù)字電路設(shè)計(jì)和驗(yàn)證的標(biāo)準(zhǔn)工具。它允許設(shè)計(jì)師以高級抽象的方式定義電路的行為和結(jié)構(gòu),從而簡化了從概念到硅片的整個(gè)設(shè)計(jì)流程
    的頭像 發(fā)表于 12-17 09:53 ?1205次閱讀

    Verilog 與 ASIC 設(shè)計(jì)的關(guān)系 Verilog 代碼優(yōu)化技巧

    Verilog與ASIC設(shè)計(jì)的關(guān)系 Verilog作為一種硬件描述語言(HDL),在ASIC設(shè)計(jì)中扮演著至關(guān)重要的角色。ASIC(Application Specific Integrated
    的頭像 發(fā)表于 12-17 09:52 ?1044次閱讀

    Verilog 測試平臺(tái)設(shè)計(jì)方法 Verilog FPGA開發(fā)指南

    Verilog測試平臺(tái)設(shè)計(jì)方法是Verilog FPGA開發(fā)中的重要環(huán)節(jié),它用于驗(yàn)證Verilog設(shè)計(jì)的正確性和性能。以下是一個(gè)詳細(xì)的Verilog測試平臺(tái)設(shè)計(jì)方法及
    的頭像 發(fā)表于 12-17 09:50 ?1151次閱讀

    Verilog與VHDL的比較 Verilog HDL編程技巧

    Verilog 與 VHDL 比較 1. 語法和風(fēng)格 VerilogVerilog 的語法更接近于 C 語言,對于有 C 語言背景的工程師來說,學(xué)習(xí)曲線較平緩。它支持結(jié)構(gòu)化編程,代
    的頭像 發(fā)表于 12-17 09:44 ?1713次閱讀

    FPGA編碼風(fēng)格介紹

    組合邏輯環(huán)路(Combinational Loops):指組合邏輯的輸出信號(hào)不經(jīng)過任何時(shí)序邏輯電路(FF等),而直接反饋到輸入節(jié)點(diǎn),從而構(gòu)成的電路環(huán)路。
    的頭像 發(fā)表于 11-15 10:49 ?644次閱讀
    FPGA<b class='flag-5'>編碼</b><b class='flag-5'>風(fēng)格</b>介紹

    如何自動(dòng)生成verilog代碼

    介紹幾種自動(dòng)生成verilog代碼的方法。
    的頭像 發(fā)表于 11-05 11:45 ?1040次閱讀
    如何自動(dòng)生成<b class='flag-5'>verilog</b>代碼

    Verilog硬件描述語言參考手冊

    一. 關(guān)于 IEEE 1364 標(biāo)準(zhǔn)二. Verilog簡介三. 語法總結(jié)四. 編寫Verilog HDL源代碼的標(biāo)準(zhǔn)五. 設(shè)計(jì)流程
    發(fā)表于 11-04 10:12 ?4次下載

    system verilog語言簡介

    ICer需要System Verilog語言得加成,這是ICer深度的表現(xiàn)。
    發(fā)表于 11-01 10:44 ?0次下載

    Verilog語法中運(yùn)算符的用法

    verilog語法中使用以下兩個(gè)運(yùn)算符可以簡化我們的位選擇代碼。
    的頭像 發(fā)表于 10-25 15:17 ?2580次閱讀
    <b class='flag-5'>Verilog</b>語法中運(yùn)算符的用法

    Verilog HDL的基礎(chǔ)知識(shí)

    本文繼續(xù)介紹Verilog HDL基礎(chǔ)知識(shí),重點(diǎn)介紹賦值語句、阻塞與非阻塞、循環(huán)語句、同步與異步、函數(shù)與任務(wù)語法知識(shí)。
    的頭像 發(fā)表于 10-24 15:00 ?1206次閱讀
    <b class='flag-5'>Verilog</b> HDL的基礎(chǔ)知識(shí)

    如何利用Verilog-A開發(fā)器件模型

    Verilog-A對緊湊型模型的支持逐步完善,在模型的實(shí)現(xiàn)上扮演越來越重要的角色,已經(jīng)成為緊湊模型開發(fā)的新標(biāo)準(zhǔn)。而且Verilog-A能夠在抽象級別和應(yīng)用領(lǐng)域中擴(kuò)展SPICE建模和仿真功能,因此學(xué)會(huì)
    的頭像 發(fā)表于 10-18 14:16 ?1365次閱讀
    如何利用<b class='flag-5'>Verilog</b>-A開發(fā)器件模型

    磁電編碼器和光電編碼器的區(qū)別

    磁電編碼器和光電編碼器是兩種不同類型的編碼器,它們在原理、結(jié)構(gòu)、性能和應(yīng)用領(lǐng)域上都有所不同。 磁電編碼器和光電編碼器的區(qū)別 1. 引言
    的頭像 發(fā)表于 10-12 09:54 ?3134次閱讀

    Verilog 如何做到心中有電路?

    管理:盡量減少時(shí)鐘的數(shù)量,避免使用過多的異步時(shí)鐘。對于多個(gè)時(shí)鐘域的設(shè)計(jì),要正確處理跨時(shí)鐘域的數(shù)據(jù)傳輸。 資源復(fù)用:對于相同功能的邏輯,盡量復(fù)用資源,減少硬件資源的消耗。 編碼風(fēng)格:采用合適的編碼
    發(fā)表于 09-26 20:30

    FPGA Verilog HDL有什么奇技巧?

    今天給大俠帶來在FPAG技術(shù)交流群里平時(shí)討論的問題答疑合集(九),以后還會(huì)多推出本系列,話不多說,上貨。 交流問題(一) Q:Verilog 有什么奇技淫巧? A:在 Verilog 中,以下這些
    發(fā)表于 09-12 19:10