verilog入門小結

2021-05-27 06:34:00 字數 2541 閱讀 6167

1、verilog hdl語言過程中關於三種常用賦值語句

「=」阻塞賦值語句,相當於序列語句,即所有該型別語句在所在模組內按順序執行。常用於組合邏輯。

「<=」非阻塞賦值語句,相當於並行語句,當該語句所在模組結束時,所有帶「<=」的語句同時執行。常用於時序邏輯(暫存器 ).

2、inout outpunt inout 等本身預設都是wire型別,但是要在initial和always語句下操作,必須申明為reg型別。

3、在編寫測試檔案時,輸入訊號定義為reg型別,輸出訊號定義為wire型別。這個要謹記。

4、if-else語句如果有if下有多條語句,需要加入begin end。

eg:  if(!rst)

begin

clk_out=1'b0;

count=0;

end5、

組合邏輯電路的設計,在談到always電平敏感訊號列表時,網上有的說:

「 在賦值表示式右端參與賦值的所有訊號都必須在always @(敏感電平列表)中列出,always中if語句的判斷表示式必須在敏感電平列表中列出。如果在賦值表示式右端引用了敏感電平列表中沒有列出的訊號,在綜合時將會為沒有列出的訊號隱含地產生乙個透明鎖存器。這是因為該訊號的變化不會立刻引起所賦值的變化,而必須等到敏感電平列表中的某乙個訊號變化時,它的作用才表現出來,即相當於存在乙個透明鎖存器,把該訊號的變化暫存起來,待敏感電平列表中的某乙個訊號變化時再起作用,純組合邏輯電路不可能作到這一點。綜合器會發出警告。」

這句話是錯的!而事實的真相應該是這段話:

「敏感訊號列表出現在always塊中,其典型行為級的含義為:只要敏感訊號列表內的訊號發生電平變化,則always模組中的語句就執行一次,因此設計人員必須將所有的輸入訊號和條件判斷訊號都列在訊號列表中。有時不完整的訊號列表會造成不同的**和綜合結果,因此需要保證敏感訊號的完備性。在實際的pld 器件開發中,eda 工具都會預設將所有的輸入訊號和條件判斷語句作為觸發訊號,增減敏感訊號列表中的訊號不會對最終的執行結果產生影響,因此如果期望在設計中通過修改敏感訊號來得到不同的邏輯,那就大錯特錯了。當敏感訊號不完備時,會使得**結果不一樣,這是因為**器在工作時不會自動補充敏感訊號表。如果缺少訊號,則無法觸發和該訊號相關的**程序,也就得不到正確的**結果。」

必須將所有的輸入訊號和條件判斷訊號都列在訊號列表中

有一種輸入方式是:

always@(*)

begin

end另附分頻及呼叫模組的程式.

div.v //4000000hz分頻到1hz

module div(clk_in,clk_out);

input clk_in;

output clk_out;

reg[31:0]count;

parameter div_num=40000000-1;

always @(posedge clk_in)

begin

if(count==div_num)

count<=0;

else

count<=count+1;

endreg clk_out;

always @(posedge clk_in)

begin

if(count==div_num)

clk_out<=~clk_out;

endendmodule

test.v//呼叫並簡單使用led

`include "div.v"

module test(clk_in,led,out);

input clk_in;

output led;

output out;

wire clk_out;

div u1(

.clk_in(clk_in),

.clk_out(clk_out)

); reg led;

assign out=clk_out;

always @(posedge clk_out)

begin

led<=~led;

endendmodule

測試函式 led.v

`timescale 1ns/100ps

module led_tb;

reg clk_in;

wire led;

wire out;

test u1(

.clk_in(clk_in),

.led(led),

.out(out)

);initial

begin

clk_in<=0;

forever #2 clk_in=~clk_in;

endinitial

begin

#8000 $stop;

endinitial

$monitor($time,"clk=%d,led=%d",clk_in,led);

endmodule

結果:

Verilog演算法入門

一 什麼是演算法?演算法就是按步就班地解決問題,也就是解決問題的辦法。演算法是個很泛的概念,並不是一定得包含高深的數學公式。二 用verilog語言實現的演算法跟c語言實現的演算法有何區別?verilog是完全可以自主地設計硬體,而c語言則是依賴於cpu,依賴於現成的硬體。verilog做出來的演算...

Verilog 語法入門知識

verilog 語法入門知識 一 變數型別 數值 數值表示採用 二進位制位數 數值表示的進製 數值 的結構。其中進製可以為b o d h分別代表 二 八 十 十六進製制。例如22 d0代表22位二進位制數用十進位制表示為0。暫存器型別 reg宣告暫存器型別變數,如 reg 0 3 my 0 63 是...

verilog入門經驗(五) 並轉串

並轉串電路主要由時鐘 clk 復位訊號 rst 並行輸入訊號 pdin 序列輸出訊號 sdout 和使能訊號 en 組成。其它訊號都是名字意義,現在主要講下使能訊號。使能訊號表示開始執行並轉串操作,由於並轉串是移位操作,當一次並轉串完成後,需要重新載入待轉換的並行資料時,使能訊號要再起來一次。下面是...