verilog之原語設計
1、原語作用
在一般的verilog設計中,一般采用數字邏輯設計,由軟件將數字邏輯轉化為特定的數字電路。但是,對於某些特殊的領域,有可能需要用戶直接自定義數字電路以達到對指定電路的設計。原語就是執行這個功能的。原語也就是門級語言。這個語言之於verilog就像匯編語言之於C語言一樣,是門級網表所采用的語法。了解這個語言的語法,可以提高對編譯器工作的認識。如果具有足夠的經驗,甚至可以直接修改門級網表來實現設計的實現。對於一個大型的工程而言,這無疑會節約大量的時間。
2、基本語法
簡單的與或非門:
and a1(out1,in1,in2); //簡單的與門a1,先輸出,再輸入
not n1(out1,in1); //簡單的非門
or or1(out1,in1,in2); //簡單或門
xor xor1(out1,in1,in2);//簡單異或門
nand nand1(out1,in1,in2);//與非門
nor nor(out1,in1,in2);//與或門
xnor xnor1(out1,in1,in2);//簡單同或門
buf b1(out1,out2,in); //二輸出緩存門,除了z會被當作x輸出,其他輸出和輸入一樣
bufif1 bf1(outw,inw,controlw);//三態門,控制位為0,輸出為z,控制位為1,輸出等於輸入,一般不將控制位置於高阻;fi1就是控制位為1輸出。
//同理可以推出bufif0是control為0時輸出有效。其他的三態門如notif0和notif1就是在buf三態上加上not邏輯,即輸出為輸入的非。
陣列輸入的與或非門:
nand #2 nand_array[3:0] (out,in1,in2);//這里的out,in1,in2都是和[3:0]的位寬對齊的。就相當於聲明了一排與門。可以理解為總線與非門
bufif0 ar[3:0] (out,in,en);//注意,這里的控制端口en是一個位寬,也就是聲明由一個控制口控制的陣列三態門。
//還有一些復雜的陣列操作,如合並,添加等,這里就不多說明。
在FPGA常用的門級組合邏輯語言就這幾個。還有一些基於器件的描述和傳輸門的描述以后有時間再看,現在先接觸簡單邏輯。
延時控制:
#(95:100:105) clk=1;//這個#的延時是95到105之間,經典值為100,用於表示時鍾的偏斜
and #(10) a1(out,in1,in2);//輸入輸出總延時
and #(10,12) a2(out,in1,in2);//上升延時和下降延時,區分了上升和下降的區別
bufif1 #(10,12,11) a3(out,in1,en);//上升延時,下降延時和關斷延時,關斷延時,就是en作用的時間
這里也是幾個簡單的延時模型,還有許多其他的語法,這里就不多介紹。
3、簡單總結
想要掌握原語設計還是比較困難的,但是閱讀應該是必要的。通過閱讀自己寫的verilog代碼所對應的原語,可以快速理解自己代碼所對應的電路。通過對數字電路的理解,可以提高設計的認識,進而理解verilog的設計方法。而且,對於學習過數字電路設計的人來說,將簡單的數字電路轉化為原語也是一個不錯的挑戰。