這裡講解一下verilog書寫**的格式,首先呼叫預編譯命令`timescale命令,指定**時間單位和**時間精度,不可省略。
module(
input clk,
input rst_n,
nput ***,(這裡加入其它輸入訊號)
output xx(這裡加入其它輸出訊號)
reg ***;
always@(posedge clk or negedge rst_n)
begin
if(rst_n)
//這裡加入要初始化的引數
else if()
//這裡加入滿足此條件的功能
else()
endassign 輸出訊號 = 滿足要求的輸出變數值;
endmodule
上述是簡單的verilog結構,verilog語法有很多種,其實常用的不多,記住常用的語法就可以了。比如如下:
localparam n = 20;
parameter n = 20;
上述兩個引數的作用範圍不一樣,parameter定義的引數可以用於引數的傳遞,而localparam定義的的引數只能在module內使用。
task
begin
//加入要執行的語句
endendtask
這裡說一下task和function的區別,在面試的時候可能會被問到。
task的結構定義需要在過程塊的外部,不能定義在內部。task的呼叫必須在過程塊內呼叫。task的定義可以定義有輸入輸出埠,也可以不用定義,task可以呼叫function和其他類的函式。
function的結構定義也是不能定義在過程快的內部,而且function內部不能出現時延引數,#、@ 等。function只有input變數,不過可以通過引數名來傳遞乙個返回值。
所以上述兩者的區別就是:
task有輸入輸出埠,function只有輸入埠,沒有輸出埠。
task的呼叫必須通過輸出埠來傳遞輸出值,function是通過函式名來傳遞乙個返回值。
function中不能呼叫任務類函式,task可以呼叫function。
function可以出現在過程塊或者連續賦值語句中,task只能出現在過程塊中。
function只能與主模組共用乙個**時間單位,其內部不能有其他時延引數參與,task中沒有此限制。
repeat();該語句執行重複命令,括號內填寫重複的數字即可,如repeat (4) @(posedge clk),該語句的意思是重複執行clk上公升沿4次。
forever # (n/2) clk = !clk;
forever語句是永遠執行的意思,常常用於時鐘訊號的產生。
initial
begin
//加入要執行的語句
end
FPGA中組合邏輯和時序邏輯的區別
數位電路根據邏輯功能的不同特點,可以分成兩大類,一類叫組合邏輯電路 簡稱組合電路 另一類叫做時序邏輯電路 簡稱時序電路 1 組合邏輯概念 組合邏輯電路在邏輯功能上的特點是任意時刻的輸出僅僅取決於該時刻的輸入,與電路原來的狀態無關,不涉及對訊號跳變沿的處理,無儲存電路,也沒有反饋電路。通常可以通過真值...
FPGA 組合邏輯中的競爭與險象問題(四)
上篇博文 組合邏輯中的競爭與險象問題 三 講解了險象的定義,即競爭引起的非預期輸出,同時給出了分析,對什麼樣的競爭會引起險象。這篇博文繼續講解險象問題,重要突出險象的分類。上篇博文最後提出了化簡後具有多個半開關的電路,可能會導致險象的阻塞,縮小,傳遞或方法作用。這篇博文接著這個問題討論 1 一般說來...
組合邏輯和時序邏輯
組合邏輯和時序邏輯 一 組合邏輯 always 敏感訊號 或者always 組合邏輯相當於組合電路,與或非門組成的電路,其輸出只與當前狀態有關,與其他輸入狀態的函式無關,不涉及訊號跳變處理 組合邏輯競爭冒險 只要輸入訊號同時變化,組合邏輯就必然產生毛刺 二 時序邏輯 always 跳變時鐘 是時序電...