VHDL語言
剛好看到這本書。
:=是賦值,好像和Pascal類似
邏輯 AND OR NAND NOR XOR
關系 = /= < > <= >=
加 減 并置 + - &
乘法 * / MOD REM
** ABS NOT
而在利用標準邏輯型對端口或信號進行說明以前,在整個程序的最開始,必須有如下調用語句。
LIBRARY IEEE;
USE *_LOGIC_*;
STD_LOGIC_1164程序包,其中預定義內容為STD_LOGIC,STD_LOGIC_VECTOR等數據類型。STD_LOGIC_ARITH程序包,其中預定義的內容為有符號和無符號類型,以及基于這些類型的算術運算。STD_LOGIC_UNSIGNED程序包,其中的預定義內容為基于STD_LOGICHE STD_LOGIC_VECTOR類型的無符號的算術運算。
VHDL語言
VHDL當然好學,語法內容比C語言要少,不過它本質是硬件描述語言,你可以通過實踐的方式慢慢去理解,什么是并行的概念。
也就是說VHDL語言所形成的數字電路能夠在一個時鐘周期(既一次電平跳變的過程中)把你所寫的代碼一次性執行完畢。這和C語言的至少幾個時鐘周期才能執行一條命令的概念不太相同。
線程語言(順序語言)和并行語言(例如VHDL)在語法上都差不多,例如if,case,or,not之類的。但是綜合(編譯)之后出來的效果完全不一樣,一個是運行CPU程序,另一個則是實打實的數字電路(可以直接理解為硬件核心)。
vhdl 并行語句的疑問
并行語句的意思是一起運行,沒有先后,完全的同時。
舉個通俗的例子:1個人,就只有一個腦袋,想東西是有連續性的,即要么想這個,要么想那個,如果要同時想2件事情,那么只能一段時間想a事情,一段時間想b事情,這不是真正的同時。如果我們有2個人,就有2個腦袋了,可以同時想2件事情,讓A想a事件,B想b事件。
我們玩個游戲:有2人,A君、B君 每個人手里的這2兩旗子,一紅一藍。我跟A君說,你看到B君舉紅色的旗子,你就舉綠色的旗子。
否者舉綠色。我跟B君說,你看到A君舉什么你就舉什么。
也就是,A的旗子不能和B一樣,B的旗子要A一樣。A<=not B;B<=A; 然后游戲開始。
AB 2個人不斷的換起旗子舉起來,B觸發A,A又觸發B,如此往復。這2個人就是并行的。
看您的問題。(1)執行是否觸發(2)是的(2)執行觸發(3)進程和(4)是的(4)執行是否又會觸發進程執行是的(4)執行后,c變了,是否意味著(2)會被觸發在執行一遍 是的但是需要聲明一下。
以A<=not B;B<=not A; 為例子其實我們可以假設這2句代碼的全部代碼是這樣的process(clk)beginA<=not B;end process;process(clk)beginB<=A;end process;首先第一個clk到來我們假設原來是A=0,B=0此時A將會變化(注意是將變化,而不是現在變化了)。由于A還沒有變化,于是B保持原值。
于是這一刻A將為0,B還是0 第二個clk到來A=1,B=0此時A變化了,于是B將會變化(注意是將變化,而不是現在變化了)。于是這一刻A=1,B將是1 第三個clk到來A=1,B=1此時B變化了,于是A將會變化(注意是將變化,而不是現在變化了)。
于是這一刻A將為0,B是1 第四個clk到來A=0,B=1此時A變化了,于是B將會變化(注意是將變化,而不是現在變化了)。于是這一刻A是0,B將是0。
然后AB 回復到了最開始的狀態 00 完成了一個循環。