網(wǎng)站建設技巧亅金手指排名25網(wǎng)站頁面優(yōu)化方案
ZYNQ是一個fpga用來硬件編程,外加一個軟件編程
?FPGA是可通過編程來修改其邏輯功能的數(shù)字集成電路
第三篇語法篇
第七章 verilog HDL語法
Verilog的簡介
可編程邏輯電路:允許用戶自行修改內(nèi)部連接的集成電路,其內(nèi)部的電路結(jié)構(gòu)可以通過編程數(shù)據(jù)來設置,寫入的編程數(shù)據(jù)還可以擦除
FPGA是基于查找表的CLB陣列
數(shù)字系統(tǒng)設計流程
Verilog和c的區(qū)別
Verilog是硬件描述語言,在下載到FPGA中后會生成電路,是并行運行的
c語言下載到單片機中之后,是存儲器中的一組指令,而單片機處理軟件指令是需要取指、譯碼、執(zhí)行這個過程是串行執(zhí)行
FPGA的特點就是運行速度特別快,要有硬件設計的思想
程序框架
Verilog的邏輯值
邏輯0:表示低電平,也就是電路的GND
邏輯1:表示高電平,也就是電路的vcc
邏輯x:表示未知,有可能是高電平,也有可能是低電平
邏輯z:表示高阻態(tài),表示外部沒有激勵信號是一個懸空的狀態(tài)
沒有輸入驅(qū)動?
verilogd的標識符
書寫規(guī)范:
1、用有意義的有效的名字如 sum、cpu_addr 等。
2、用下劃線區(qū)分詞語組合,如 cpu_addr。
3、采用一些前綴或后綴,比如:時鐘采用 clk 前綴:clk_50m,clk_cpu;低電平采用_n 后綴: enable_n;
4、統(tǒng)一縮寫,如全局復位信號 rst。
5、同一信號在不同層次保持一致性,如同一時鐘信號必須在各模塊保持一致。
6、自定義的標識符不能與保留字(關(guān)鍵詞)同名。
7、參數(shù)統(tǒng)一采用大寫,如定義參數(shù)使用 SIZE。
進制
二進制
二進制表示如下:4’b0101 表示 4 位二進制數(shù)字 0101;
十進制
4’d2 表示 4 位十進制數(shù)字 2(二進制 0010)
十六進制
4’ha 表示 4 位十六進制數(shù)字 a(二進制 1010)········
要是沒有標識默認位寬就是32位,位寬就是一次可以傳輸多少位二進制數(shù)
默認10進制數(shù)
數(shù)組類型
1、寄存器類型
寄存器類型是表示一個抽象的數(shù)據(jù)存儲單元,它只能在always和initial語句中被賦值,并且它的值從一個賦值到另一個賦值過程中被保存下來。如果該過程語句描述的是時序邏輯,即 always 語句帶有時鐘 信號,則該寄存器變量對應為寄存器;如果該過程語句描述的是組合邏輯,即 always 語句不帶有時鐘信 號,則該寄存器變量對應為硬件連線;寄存器類型的缺省值是 x(未知狀態(tài))。 寄存器數(shù)據(jù)類型有很多種,如 reg、integer、real 等,其中最常用的就是 reg 類型,它的使用方法如 :
//reg define
reg [31:0] delay_cnt; //延時計數(shù)器
reg key_flag ; //按鍵標志
2、線網(wǎng)類型
線網(wǎng)表示 Verilog 結(jié)構(gòu)化元件間的物理連線。它的值由驅(qū)動元件的值決定,例如連續(xù)賦值或門的輸 出。如果沒有驅(qū)動元件連接到線網(wǎng),線網(wǎng)的缺省值為 z(高阻態(tài))。線網(wǎng)類型同寄存器類型一樣也是有很 多種,如 tri 和 wire 等,其中最常用的就是 wire 類型,它的使用方法如下
//wire define
wire data_en; //數(shù)據(jù)使能信號
wire [7:0] data ; //數(shù)據(jù)
3、參數(shù)類型
我們再來看下參數(shù)類型,參數(shù)其實就是一個常量,常被用于定義狀態(tài)機的狀態(tài)、數(shù)據(jù)位寬和延遲大小 等,由于它可以在編譯時修改參數(shù)的值,因此它又常被用于一些參數(shù)可調(diào)的模塊中,使用戶在實例化模塊 時,可以根據(jù)需要配置參數(shù)。在定義參數(shù)時,我們可以一次定義多個參數(shù),參數(shù)與參數(shù)之間需要用逗號隔 開。這里我們需要注意的是參數(shù)的定義是局部的,只在當前模塊中有效。它的使用方法如下
//parameter define
parameter DATA_WIDTH = 8; //數(shù)據(jù)位寬為8位
運算符
邏輯運算符與位運算符的差別
邏輯運算符
?位運算符
不同位寬的數(shù)據(jù)進行位運算會將位小的用0補齊?,
一個數(shù)據(jù)位寬為4,表示這個數(shù)據(jù)由4位數(shù)組成
拼接運算符
Verilog程序框架
關(guān)鍵字(小寫)
module? ? ? ? ? ? ? ? ? ? 模塊開始定義
input? ? ? ? ? ? ? ? ? ? ? ? ?輸入端口定義
output? ? ? ? ? ? ? ? ? ? ? 輸出端口定義
inout? ? ? ? ? ? ? ? ? ? ? ? 雙向端口定義
parameter? ? ? ? ? ? ? ?信號的參數(shù)定義
wire? ? ? ? ? ? ? ? ? ? ? ? wire信號定義
reg? ? ? ? ? ? ? ? ? ? ? ? ? reg信號定義
always? ? ? ? ? ? ? ? ? ?產(chǎn)生reg信號語句的關(guān)鍵字
assign? ? ? ? ? ? ? ? ? ? 產(chǎn)生wire信號的關(guān)鍵字
begin? ? ? ? ? ? ? ? ? ? ?語句的起始標志
end? ? ? ? ? ? ? ? ? ? ? ? ? 語句的結(jié)束標志
posedge/negedeg? ? ? 時序電路的標志
case? ? ? ? ? ? ? ? ? ? ? ? ? ? case語句的起始標志
default? ? ? ? ? ? ? ? ? ? ? ? ?case語句的默認·分支標志
endcase? ? ? ? ? ? ? ? ? ? ? case語句結(jié)束標志
if? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if/else語句標記
else? ? ? ? ? ? ? ? ? ? ? ? ? ? if/else語句標志
for? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?for語句標記
endmodule? ? ? ? ? ? ? ?模塊結(jié)束定義
? ? ? Verilog 高級知識點
模塊的結(jié)構(gòu)
每個程序都由4個部分組成
端口定義、io說明、內(nèi)部信號聲明、功能定義
第一行給出了所有端口,第二、三行說明了端口的io功能,5、6是功能定義
?模塊的調(diào)用(函數(shù)的調(diào)用)
?