1. 程式人生 > >FPGA第八篇:運算子、賦值語句和結構說明語句

FPGA第八篇:運算子、賦值語句和結構說明語句

第四章——《運算子、賦值語句和結構說明語句》

一、概念

1、邏輯運算子(&&、||、!)

2、關係運算符(<、<=、>、>=)

3、等式運算子(==、!=、===、!==)

4、移位運算子(>>、<<)

注:a、這兩種移位運算子都用0來填補移出的空位 

b、左移幾位就在末尾加幾個0,右移位數不變

5、位拼接運算子

6、縮減運算子

注:a、單目運算子

b、第一步將運算元的第一位與第二位進行與或非;第二步將運算結果與第三位進行與或非,以此類推,直至最後一位

7、賦值語句和塊語句

(1)賦值語句

a、非阻塞賦值(b <= a)

說明一:在語句塊中,上面語句所賦的變數值不能立即就為下面的語句所用

說明二:塊結束後才能完成這次賦值操作,而所賦的變數值是上一次賦值得到的

說明三:在編寫可綜合的時序邏輯模組時,這是最常用的賦值方法

b、阻塞賦值(b = a)

說明一:賦值語句執行完後,塊才結束

說明二:b的值在賦值語句執行完後立刻就改變的

說明三:在時序邏輯中使用時,可能會產生意想不到的結果

-------------------------------------思考分割線以內------------------------------------------

這裡面涉及到了D觸發器的概念,大學時聽過,現在快忘了,來吧,撿起來學一個。首先在網上查詢相關的資料,將連結附在下面,將在下一篇部落格詳細學習。

另外一點是關於阻塞賦值與非阻塞賦值,這點的話,在本書中就有詳細講解,我可以直接參考本書第十四章。

-------------------------------------思考分割線以內------------------------------------------

(2)塊語句——重點放在順序塊

順序塊(begin_end)

特點:

a、塊內的語句是按順序執行的,即上面一條語句執行完後下面的語句才能執行

b、每一條語句的延遲時間是相對於前一條語句的模擬時間而言的

c、直到最後一條語句執行完,程式流程控制才跳出該語句塊

-------------------------------------我有疑惑呀------------------------------------------

我不懂這裡面所說的延遲,怎麼樣才能理解呢?

(1)“=”——assign,硬線連線

“<=”——always,暫存器,D觸發器,有個坑

(2)與硬體結構聯絡起來

-------------------------------------我要答疑呀------------------------------------------

為什麼要使用塊名?

a、可以在塊內定義區域性變數,即只在塊內使用的變數

b、可以允許塊被其他語句呼叫

c、在Verilog語言內,所有的變數都是靜態的,即所有的變數都只有一個唯一的儲存地址,因此進入或跳出塊並不影響儲存在變數內的值

二、小結——與C語言對比

1、C語言中沒有的概念

位拼接運算子、縮減運算子、阻塞與非阻塞

2、在beigin_end之間的所有非阻塞語句都在同一時刻被賦值,因此邏輯行為與非阻塞語句的次序就沒有關係。

-----------------------------------------------以上----------------------------------------------------

徐偉學長說:藍皮書就是個工具書,主要看例程。書快速的過一遍就行了。