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之間的所有非阻塞語句都在同一時刻被賦值,因此邏輯行為與非阻塞語句的次序就沒有關係。
-----------------------------------------------以上----------------------------------------------------
徐偉學長說:藍皮書就是個工具書,主要看例程。書快速的過一遍就行了。