0.模塊級(jí)的注釋
每個(gè)模塊開(kāi)始要注明文件名、功能描述、引用模塊、設(shè)計(jì)者、設(shè)計(jì)時(shí)間及版權(quán)信息等。
/* ========================
Filename ﹕
Author ﹕
Description ﹕
Called by ﹕Top module
Revision History ﹕
Revision 1.0
Email ﹕
Company ﹕ Robsense Technology .Inc
Copyright(c) 2015, xxxxx Technology Inc, All right reserved
========================= */
1.宏(Macros)
1、可以把所有的`define放在一個(gè)文件中,在編譯原代碼時(shí)首先把這個(gè)文件讀入
2、如果希望宏的作用域僅在一個(gè)模塊中有效,就用parameter,==可以用來(lái)傳遞參數(shù)==。
3、作用域僅在一個(gè)模塊中有效,localparam,==不可用來(lái)傳遞參數(shù)==。
4、parameter在本module內(nèi)有效的定義,可用于參數(shù)傳遞;
從上層傳值進(jìn)下一層常數(shù)時(shí),需要在上層用#定義傳的值
在下層需要定義對(duì)應(yīng)的參數(shù)名字parameter parameter_name;
module_name
#(
.parameter_name(para_value),
.parameter_name(para_value)
)
inst_name
(
port map
);
2.FSM
1、verilog描述狀態(tài)機(jī)時(shí)必須由parameter分配,而VHDL狀態(tài)機(jī)狀態(tài)可以在綜合時(shí)分配產(chǎn)生。
2、組合邏輯和時(shí)序邏輯分開(kāi)用不同的進(jìn)程
3、狀態(tài)機(jī)主要分為==Mealy==機(jī)和==Moore==機(jī),Mealy機(jī)的狀態(tài)和輸入有關(guān),而Moore機(jī)的狀態(tài)轉(zhuǎn)換和輸入無(wú)關(guān)。
3.輸入不確定的組合邏輯電路
在設(shè)計(jì)組合邏輯時(shí),需要將不確定的輸入轉(zhuǎn)化成確定的輸入,然后再完成組合邏輯。
module x2one(in, out);
input in;
output out;
assign out = (in == 1)? 1:0;
endmodule
4.Verilog 中文件輸出輸出函數(shù)的使用方法
1、系統(tǒng)函數(shù)$fopen用于打開(kāi)一個(gè)文件,并返回一個(gè)整數(shù)的文件指針
2、系統(tǒng)函數(shù)$fdisplay就可以用這個(gè)文件指針在文件中實(shí)現(xiàn)寫(xiě)入信息。
3、寫(xiě)完后用$fclose函數(shù)關(guān)閉文件
==以下語(yǔ)句將”a”和”b”分別顯示在”@%h %h”中的兩個(gè)%h,并寫(xiě)入指針?biāo)傅奈募_file.txt==
integer W_file; //定義文件指針
W_file = $fopen(“W_file.txt”);
$fdisplay(W_file, “@%h %h”,a,b);
$fclose(W_file);
4、讀文件操作通過(guò)readmemh和readmemb函數(shù)來(lái)完成,分別對(duì)應(yīng)的數(shù)據(jù)文件為十六進(jìn)制和二進(jìn)制
reg[15:0]c[0:15];
$readmemh(“R_file.txt”, c);
5.Verilog 中預(yù)處理
verilog預(yù)處理與C很類似,預(yù)處理符號(hào)`開(kāi)頭。
==注:在引用已定義的宏名時(shí),必須在宏名前加`。==
`include file.v //包含文件file.v
`define X 1 //定義宏x 值為1
`ifdef X
z = 1;
`else
z = 0;
`endif
6. tri和wire的用法區(qū)別
連線與三態(tài)線(tri)網(wǎng)語(yǔ)法和語(yǔ)義一致。
tri是用來(lái)強(qiáng)調(diào)三態(tài)門(mén)的使用,三態(tài)門(mén)值 0 1 X Z。
三態(tài)線可以用于描述多個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)同一根線的線網(wǎng)類型;并且沒(méi)有其他特殊的意義。
7. pullup和 pulldown的用法
如果兩個(gè)INOUT都處于高阻態(tài),那么接收到的信號(hào)到底是什么狀態(tài)呢?這實(shí)際上等效為兩個(gè)INPUT端口連接,也就等效為INPUT端口懸空。
這應(yīng)該是取決于外圍的驅(qū)動(dòng),添加的上拉或者下拉電阻,一般而言,FPGA添加的是上拉電阻,也就意味著此時(shí)chipscope采集的數(shù)據(jù)是高電平。
FPGA管腳內(nèi)部可以配置弱上拉或下拉電阻來(lái)實(shí)現(xiàn)Z狀態(tài)下的控制。
在verilog代碼中直接可以定義信號(hào)線的==上拉==或者==下拉==模式
或者在約束文件中也可以也可以通過(guò)約束文件中配置信號(hào)線的上拉或者下拉模式
具體用法:
pullup p1 ( );
8. 下面代碼中的wire和assign用法有什么區(qū)別
paramenter addr =4‘h0;
input [13:0] aaa;
wire ccc=aaa[13:10]==addr;
------------------------------------------
assign bbb=(aaa==16’d0);
從用法來(lái)說(shuō)是一樣的,assign是一種線的賦值語(yǔ)句,普通的io口也可以直接賦值,其實(shí)io口在電路上就是一種wire。
reg 與 寄存器實(shí)際上應(yīng)該反過(guò)來(lái)講:
- 如果要綜合寄存器,需要同時(shí)滿足倆個(gè)條件:
定義為reg,
在always @posedge(negedge) block中賦值
- 如果要綜合組合邏輯,可以(任意):
定義為wire, 用assign賦值
定義為reg, 只在always @(a b c d) block中賦值
在verilog語(yǔ)言中的reg類型只是語(yǔ)法意義上。reg類型的變量不能通過(guò)assign賦值,而wire類型的變量不能在always block中賦值。
9. verilog中g(shù)enerater語(yǔ)句的使用,以及genvar用法
在Verilog-2001里,新增加的generate語(yǔ)句拓展了這種用法(其思想來(lái)源于VHDL
語(yǔ)言)。除了允許復(fù)制產(chǎn)生primitive和module的多個(gè)實(shí)例化,同時(shí)也可以復(fù)制產(chǎn)生多個(gè)net、reg、parameter、assign、always、initial、task、function。
generate語(yǔ)句有g(shù)enerate-for、genreate-if和generate-case三種語(yǔ)句
generate-for語(yǔ)句必須用genvar關(guān)鍵字定義for的索引變量。
module gray2bin2 (bin, gray);
prameter SIZE = 8;
ouput [SIZE-1:0] bin;
input [SIZE-1:0] gray;
reg [SIZE-1:0] bin;
genvar i;
generate
for(i=0; i 《 SIZE; i=i+1)
begin: bit
assign bin[i] = ^gray[SIZE-1:i]
end
endgenerate
endmodule
9. verilog中 {}和{{}}的區(qū)別。
{}表示拼接,{第一位,第二位,…}
{{}}表示復(fù)制,{4{a}}等同于{a,a,a,a}
10. IBUFDS、IBUFGDS和OBUFDS差分信號(hào)緩沖
IBUFDS、IBUFGDS和OBUFDS都是差分信號(hào)緩沖器,用于不同電平接口之間的緩沖和轉(zhuǎn)換。
IBUFDS是差分輸入的時(shí)候用;
OBUFDS是差分輸出的時(shí)候用;
IBUFGDS則是時(shí)鐘信號(hào)專用的輸入緩沖器。
具體見(jiàn)筆記中《==FPGA差分信號(hào)緩沖的轉(zhuǎn)換(IBUFDS、IBUFGDS和OBUFDS)==》
11. 時(shí)鐘配置中MMCM 與PLL的不同點(diǎn)
MMCM 混合時(shí)鐘管理單元也是由pll構(gòu)成,只是增加了一些額外性能, 比如給定輸入時(shí)鐘中的頻率約束輸出時(shí)鐘頻率相位的關(guān)系,生成不同的時(shí)鐘,其實(shí)內(nèi)部也是pll去經(jīng)過(guò)VCO環(huán)路鎖定輸出的。可以理解為MMCM比PLL更高級(jí)復(fù)雜一些的時(shí)鐘管理單元。
評(píng)論
查看更多