Verilog語法記錄

2021-10-11 14:41:07 字數 3630 閱讀 3892

運算子及表示式

語句系統函式和任務

狀態機阻塞賦值和非阻塞賦值

二進位制整數(b或b);

十進位制整數(d或d);

十六進製制整數(h或h);

八進位制整數(o或o);

表達方式:《位寬》《進製》《數字》

8『d10(全面表達方式),』d10(位寬由機器決定,但至少32位),10(十進位制整數10)

x和z值:x代表不定值,z代表高阻值(z也可以是『?』)。

負數:-8』d10;

下劃線:8『d1111_0000;

parameter msb = 7; //定義引數msb為常量7

wire型:線

reg型:暫存器

memory型:reg[127:0] sdata [15:0]

(1). 算術運算子( +, -, *, /, %);

(2). 賦值運算子( =, <=);

(3). 關係運算子( >, =, <=);

(4). 邏輯運算子( &&, ||, !);

(5). 條件運算子( ?: ); (a = b ? c : d)

(6). 位運算子( ~, |, &, ^, ^~);(取反,按位或,按位與,按位異或,按位同或(異或非))

(7). 移位運算子( <>);

(8). 拼接運算子( {} );

(9). 等式運算子( = =, ! =, = = =, ! = =)

(1).if_else

(2).case

case (cnt)

4'd1: result <= 'd0;

4'd2: result <= 'd0;

4'd3: result <= 'd0;

4'd4: result <= 'd0;

default: result <= 'd0;

endcase

(1).forever; (2).repeat; (3).while; (4).for

(1).initial; (2).always; (3).task; (4).function

task和function的區別:

(1).function只能與主模組公用同乙個**時間單位,而task可以定義自己的**時間單位

(2).function不能啟動task,而task能啟動其它task和function

(3).function至少要有乙個輸入變數,而task可以沒有或有多個任何型別的變數

(4).function返回乙個值,而task則不返回值

task 《任務名》;

《埠及資料型別宣告語句》;

《語句1>;

《語句2>;

呼叫:《任務名》 (埠1,埠2,…,埠n);

例如:

task read_iv;

output [127:0] iv_out;

begin

apb_read(aes_ivr0, iv_out[ 31:0]);

apb_read(aes_ivr1, iv_out[ 63:32]);

apb_read(aes_ivr2, iv_out[ 95:64]);

apb_read(aes_ivr3, iv_out[127:96]);

endendtask

read_iv(iv_rd);

function 《返回值的型別和範圍》 (函式名)

《埠說明語句》

《變數型別說明語句》

begin

《語句》..

end

呼叫:《函式名》 ( 《函式名》 《表示式》

例如:

function [31:0] factorial;

input [3:0] operand

reg [3:0] index,

begin

factorial = operand ? 1: 0;

for(index = 2; index <= operand; index = index + 1)

factorial = index * factorial

endresult <= n * factorial(n);

$bitstoreal, $rtoi, $setup, $skew, $hold, $setuphold, $itor, $strobe, $period, $time, $printtimescale, $timefoemat, $realtime, $width, $real tobits, $$recovery

$random: 返回乙個32位的隨機數

巨集定義 `define

`define 識別符號(巨集名) 字串(巨集內容)
"檔案包含"處理 `include

時間尺度 `timescale

`timescale 《時間單位》 / 《時間精度》
條件編譯命令

`ifdef、	程式段1

`else、 程式段2

`endif

mealy型:時序邏輯的輸出不僅取決於狀態還取決於輸入;

moore型:時序邏輯的輸出只取決於當前狀態。

實際設計工作中,大部分狀態機都屬於mealy狀態機,因為狀態機的輸出中或多或少有幾個屬於mealy型別的輸出,輸出不但與當前狀態有關還與輸入有關;還有幾個輸出屬於moore型別的,至於當前的狀態有關。

在描述組合邏輯的always塊中用阻塞賦值,則綜合成組合邏輯的電路結構;

在描述時序邏輯的always塊中用非阻塞賦值,則綜合成時序邏輯的電路結構。

可綜合風格的verilog模組程式設計的8個原則:

(1). 時序電路建模時,用非阻塞賦值。

(2). 鎖存器電路建模時,用非阻塞賦值。

(3). 用always塊建立組合邏輯模型時,用阻塞賦值。

(4). 在同乙個always塊中建立時序和組合邏輯電路時,用非阻塞賦值。

(5). 在同乙個always塊中不要既用非阻塞賦值又用阻塞賦值。

(6). 不要在乙個以上的always塊中為同乙個變數賦值。

(7). 用$strobe系統任務來顯示用非阻塞賦值的變數值。

(8). 在賦值時不要使用#0 延遲。

不要在乙個以上always塊中對同乙個變數進行多次賦值可能會導致競爭冒險,即使使用非阻塞賦值也可能產生競爭冒險。因為不同always塊執行的順序時隨機的。

Verilog語法總結

1.阻塞賦值 與非阻塞賦值 的區別 一條非阻塞過程賦值語句對應的賦值操作執行完之前,下一語句也可以開始執行。各條阻塞型過程賦值語句將以他們在順序塊中的排列次序得到執行。2.關係運算子 關係運算子的優先順序比算數運算子的優先順序低.3.縮減運算 縮減運算的過程 第一步將運算元的第一位與第二位進行與或非...

verilog語法隨記

module host cpld 宣告host cpld的輸入輸出變數 input a0,b0,c0 宣告輸入埠a0,b0和c0 output a1,b1,c1 宣告輸出埠a1,b1和c1 reg x 0 reg是暫存器型別,表示需要觸發,無輸入時可保持原來數值 wire x wire是網線型別,表...

Verilog語法簡介

常量 正數常量 含義8 b11001100 寬度為8位的二進位制數 8 hff 寬度為8位的十六進製制數 7 o15 寬度為7位的八進位制數 6 d10 寬度為6位的十進位制數 變數net型變數相當於硬體電路中各種物料連線其特點是輸出的值緊跟輸入值的變化而變化。wire是最常用的net型變數。wir...